re PR rtl-optimization/56466 (ICE in verify_loop_structure, at cfgloop.c:1629 (loop with header n not in loop tree !))
PR rtl-optimization/56466 * loop-unroll.c (unroll_and_peel_loops): Call fix_loop_structure if we're changing a loop. (peel_loops_completely): Likewise. From-SVN: r196335
This commit is contained in:
parent
502c067d54
commit
45fa0eef76
@ -1,3 +1,10 @@
|
||||
2013-02-28 Marek Polacek <polacek@redhat.com>
|
||||
|
||||
PR rtl-optimization/56466
|
||||
* loop-unroll.c (unroll_and_peel_loops): Call fix_loop_structure
|
||||
if we're changing a loop.
|
||||
(peel_loops_completely): Likewise.
|
||||
|
||||
2013-02-28 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
PR c++/55813
|
||||
|
@ -207,7 +207,7 @@ void
|
||||
unroll_and_peel_loops (int flags)
|
||||
{
|
||||
struct loop *loop;
|
||||
bool check;
|
||||
bool changed = false;
|
||||
loop_iterator li;
|
||||
|
||||
/* First perform complete loop peeling (it is almost surely a win,
|
||||
@ -220,7 +220,6 @@ unroll_and_peel_loops (int flags)
|
||||
/* Scan the loops, inner ones first. */
|
||||
FOR_EACH_LOOP (li, loop, LI_FROM_INNERMOST)
|
||||
{
|
||||
check = true;
|
||||
/* And perform the appropriate transformations. */
|
||||
switch (loop->lpt_decision.decision)
|
||||
{
|
||||
@ -229,30 +228,33 @@ unroll_and_peel_loops (int flags)
|
||||
gcc_unreachable ();
|
||||
case LPT_PEEL_SIMPLE:
|
||||
peel_loop_simple (loop);
|
||||
changed = true;
|
||||
break;
|
||||
case LPT_UNROLL_CONSTANT:
|
||||
unroll_loop_constant_iterations (loop);
|
||||
changed = true;
|
||||
break;
|
||||
case LPT_UNROLL_RUNTIME:
|
||||
unroll_loop_runtime_iterations (loop);
|
||||
changed = true;
|
||||
break;
|
||||
case LPT_UNROLL_STUPID:
|
||||
unroll_loop_stupid (loop);
|
||||
changed = true;
|
||||
break;
|
||||
case LPT_NONE:
|
||||
check = false;
|
||||
break;
|
||||
default:
|
||||
gcc_unreachable ();
|
||||
}
|
||||
if (check)
|
||||
{
|
||||
#ifdef ENABLE_CHECKING
|
||||
verify_loop_structure ();
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
if (changed)
|
||||
{
|
||||
calculate_dominance_info (CDI_DOMINATORS);
|
||||
fix_loop_structure (NULL);
|
||||
}
|
||||
|
||||
iv_analysis_done ();
|
||||
}
|
||||
|
||||
@ -283,6 +285,7 @@ peel_loops_completely (int flags)
|
||||
{
|
||||
struct loop *loop;
|
||||
loop_iterator li;
|
||||
bool changed = false;
|
||||
|
||||
/* Scan the loops, the inner ones first. */
|
||||
FOR_EACH_LOOP (li, loop, LI_FROM_INNERMOST)
|
||||
@ -306,11 +309,15 @@ peel_loops_completely (int flags)
|
||||
{
|
||||
report_unroll_peel (loop, locus);
|
||||
peel_loop_completely (loop);
|
||||
#ifdef ENABLE_CHECKING
|
||||
verify_loop_structure ();
|
||||
#endif
|
||||
changed = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (changed)
|
||||
{
|
||||
calculate_dominance_info (CDI_DOMINATORS);
|
||||
fix_loop_structure (NULL);
|
||||
}
|
||||
}
|
||||
|
||||
/* Decide whether unroll or peel loops (depending on FLAGS) and how much. */
|
||||
|
@ -1,3 +1,8 @@
|
||||
2013-02-27 Marek Polacek <polacek@redhat.com>
|
||||
|
||||
PR rtl-optimization/56466
|
||||
* gcc.dg/pr56466.c: New test.
|
||||
|
||||
2013-02-28 Naveen H.S <Naveen.Hurugalawadi@caviumnetworks.com>
|
||||
|
||||
* gcc.dg/tree-ssa/slsr-1.c: Allow widening multiplications.
|
||||
|
31
gcc/testsuite/gcc.dg/pr56466.c
Normal file
31
gcc/testsuite/gcc.dg/pr56466.c
Normal file
@ -0,0 +1,31 @@
|
||||
/* PR rtl-optimization/56466 */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -w -funroll-loops" } */
|
||||
|
||||
int a, b, c;
|
||||
|
||||
void
|
||||
f (void)
|
||||
{
|
||||
for (; b; b++)
|
||||
{
|
||||
if (0)
|
||||
for (; b < 0; b++)
|
||||
if (1 % 0)
|
||||
{
|
||||
while (1)
|
||||
{
|
||||
a = 0;
|
||||
lbl1:
|
||||
c++;
|
||||
}
|
||||
lbl2:
|
||||
;
|
||||
}
|
||||
|
||||
goto lbl1;
|
||||
}
|
||||
|
||||
a = 0;
|
||||
goto lbl2;
|
||||
}
|
Loading…
Reference in New Issue
Block a user