re PR tree-optimization/69999 (ICE in verify_loop_structure, at cfgloop.c:1639 (error: loop with header 3 not in loop tree) at -O3 or -Ofast)
PR tree-optimization/69999 * gimple-ssa-split-paths.c (split_paths): When duplicating a block with an outgoing edge marked with EDGE_IRREDUCIBLE_LOOP, schedule loop cleanups. PR tree-optimization/69999 * gcc.c-torture/compile/pr69999.c: New test. From-SVN: r233824
This commit is contained in:
parent
8cfb576a28
commit
0c6072a3fc
4 changed files with 46 additions and 0 deletions
|
@ -1,3 +1,10 @@
|
|||
2016-02-28 Jeff Law <law@redhat.com>
|
||||
|
||||
PR tree-optimization/69999
|
||||
* gimple-ssa-split-paths.c (split_paths): When duplicating a block
|
||||
with an outgoing edge marked with EDGE_IRREDUCIBLE_LOOP, schedule
|
||||
loop cleanups.
|
||||
|
||||
2016-02-29 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/69994
|
||||
|
|
|
@ -294,6 +294,24 @@ split_paths ()
|
|||
basic_block pred0 = EDGE_PRED (bb, 0)->src;
|
||||
transform_duplicate (pred0, bb);
|
||||
changed = true;
|
||||
|
||||
/* If BB has an outgoing edge marked as IRREDUCIBLE, then
|
||||
duplicating BB may result in an irreducible region turning
|
||||
into a natural loop.
|
||||
|
||||
Long term we might want to hook this into the block
|
||||
duplication code, but as we've seen with similar changes
|
||||
for edge removal, that can be somewhat risky. */
|
||||
if (EDGE_SUCC (bb, 0)->flags & EDGE_IRREDUCIBLE_LOOP
|
||||
|| EDGE_SUCC (bb, 1)->flags & EDGE_IRREDUCIBLE_LOOP)
|
||||
{
|
||||
if (dump_file && (dump_flags & TDF_DETAILS))
|
||||
fprintf (dump_file,
|
||||
"Join block %d has EDGE_IRREDUCIBLE_LOOP set. "
|
||||
"Scheduling loop fixups.\n",
|
||||
bb->index);
|
||||
loops_state_set (LOOPS_NEED_FIXUP);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2016-02-29 Jeff Law <law@redhat.com>
|
||||
|
||||
PR tree-optimization/69999
|
||||
* gcc.c-torture/compile/pr69999.c: New test.
|
||||
|
||||
2016-02-29 Yuri Rumyantsev <ysrumyan@gmail.com>
|
||||
|
||||
PR tree-optimization/69652
|
||||
|
|
16
gcc/testsuite/gcc.c-torture/compile/pr69999.c
Normal file
16
gcc/testsuite/gcc.c-torture/compile/pr69999.c
Normal file
|
@ -0,0 +1,16 @@
|
|||
int uh;
|
||||
|
||||
void
|
||||
ha(void)
|
||||
{
|
||||
while (uh) {
|
||||
for (uh = 0; uh < 1; ++uh) {
|
||||
uh = 0;
|
||||
if (uh != 0)
|
||||
ts:
|
||||
uh %= uh;
|
||||
}
|
||||
++uh;
|
||||
}
|
||||
goto ts;
|
||||
}
|
Loading…
Add table
Reference in a new issue