Commit d5e82c9f by Richard Biener Committed by Richard Biener

re PR tree-optimization/92704 (ICE: Segmentation fault (in process_bb))

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.

	* gcc.dg/torture/pr92704.c: New testcase.

From-SVN: r278828
parent 34b43828
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> 2019-11-29 Julian Brown <julian@codesourcery.com>
* builtin-types.def (BT_DFLOAT32_PTR, BT_DFLOAT64_PTR, * 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> 2019-11-29 Joseph Myers <joseph@codesourcery.com>
* objc.dg/attributes/gnu2x-attr-syntax-1.m: New test. * objc.dg/attributes/gnu2x-attr-syntax-1.m: New test.
......
/* { 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;
}
}
...@@ -2624,6 +2624,11 @@ combine_blocks (class loop *loop) ...@@ -2624,6 +2624,11 @@ combine_blocks (class loop *loop)
vphi = get_virtual_phi (bb); vphi = get_virtual_phi (bb);
if (vphi) 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; imm_use_iterator iter;
use_operand_p use_p; use_operand_p use_p;
gimple *use_stmt; gimple *use_stmt;
...@@ -2655,6 +2660,10 @@ combine_blocks (class loop *loop) ...@@ -2655,6 +2660,10 @@ combine_blocks (class loop *loop)
if (gimple_vdef (stmt)) if (gimple_vdef (stmt))
last_vdef = 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]) if (predicated[i])
{ {
ssa_op_iter i; ssa_op_iter i;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment