+2019-11-29 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/92704
+ * tree-if-conv.c (combine_blocks): Deal with virtual PHIs
+ in loops performing only loads.
+
2019-11-29 Julian Brown <julian@codesourcery.com>
* builtin-types.def (BT_DFLOAT32_PTR, BT_DFLOAT64_PTR,
+2019-11-29 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/92704
+ * gcc.dg/torture/pr92704.c: New testcase.
+
2019-11-29 Joseph Myers <joseph@codesourcery.com>
* objc.dg/attributes/gnu2x-attr-syntax-1.m: New test.
--- /dev/null
+/* { dg-do compile } */
+/* { dg-additional-options "-fexceptions -fnon-call-exceptions -fno-tree-dce -ftree-loop-if-convert" } */
+int zr, yx;
+
+void __attribute__ ((simd))
+oj (int rd, int q7)
+{
+ int wo = (__UINTPTR_TYPE__)&rd;
+
+ while (q7 < 1)
+ {
+ int kv;
+ short int v3;
+
+ for (v3 = 0; v3 < 82; v3 += 3)
+ {
+ }
+
+ kv = zr ? 0 : v3;
+ yx = kv < rd;
+ zr = zr && yx;
+ ++q7;
+ }
+}
vphi = get_virtual_phi (bb);
if (vphi)
{
+ /* When there's just loads inside the loop a stray virtual
+ PHI merging the uses can appear, update last_vdef from
+ it. */
+ if (!last_vdef)
+ last_vdef = gimple_phi_arg_def (vphi, 0);
imm_use_iterator iter;
use_operand_p use_p;
gimple *use_stmt;
if (gimple_vdef (stmt))
last_vdef = gimple_vdef (stmt);
}
+ else
+ /* If this is the first load we arrive at update last_vdef
+ so we handle stray PHIs correctly. */
+ last_vdef = gimple_vuse (stmt);
if (predicated[i])
{
ssa_op_iter i;