diff options
-rw-r--r-- | gcc/testsuite/gcc.dg/torture/pr110298.c | 20 | ||||
-rw-r--r-- | gcc/tree-ssa-loop-ivcanon.cc | 7 |
2 files changed, 24 insertions, 3 deletions
diff --git a/gcc/testsuite/gcc.dg/torture/pr110298.c b/gcc/testsuite/gcc.dg/torture/pr110298.c new file mode 100644 index 0000000..139f5c7 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr110298.c @@ -0,0 +1,20 @@ +/* { dg-do compile } */ + +int a, b, c, d, e; +int f() { + c = 0; + for (; c >= 0; c--) { + d = 0; + for (; d <= 0; d++) { + e = 0; + for (; d + c + e >= 0; e--) + ; + a = 1; + b = 0; + for (; a; ++b) + a *= 2; + for (; b + d >= 0;) + return 0; + } + } +} diff --git a/gcc/tree-ssa-loop-ivcanon.cc b/gcc/tree-ssa-loop-ivcanon.cc index 6a962a9..491b57e 100644 --- a/gcc/tree-ssa-loop-ivcanon.cc +++ b/gcc/tree-ssa-loop-ivcanon.cc @@ -1520,15 +1520,16 @@ tree_unroll_loops_completely (bool may_increase_size, bool unroll_outer) } BITMAP_FREE (fathers); + /* Clean up the information about numbers of iterations, since + complete unrolling might have invalidated it. */ + scev_reset (); + /* This will take care of removing completely unrolled loops from the loop structures so we can continue unrolling now innermost loops. */ if (cleanup_tree_cfg ()) update_ssa (TODO_update_ssa_only_virtuals); - /* Clean up the information about numbers of iterations, since - complete unrolling might have invalidated it. */ - scev_reset (); if (flag_checking && loops_state_satisfies_p (LOOP_CLOSED_SSA)) verify_loop_closed_ssa (true); } |