From 18eb76ebfa25806dab9a23e726f1d8f914c51630 Mon Sep 17 00:00:00 2001 From: Richard Guenther Date: Wed, 5 Sep 2012 13:29:13 +0000 Subject: [PATCH] re PR tree-optimization/46590 (long compile time with -O2 and many loops) 2012-09-05 Richard Guenther PR tree-optimization/46590 * tree-ssa-loop-ivcanon.c (try_unroll_loop_completely): Do not update SSA form here. (canonicalize_induction_variables): Assert we do not need to update SSA form. (tree_unroll_loops_completely): Update SSA form here. * tree-ssa-loop-manip.c (gimple_duplicate_loop_to_header_edge): Do not verify loop-closed SSA form if SSA form is not up-to-date. From-SVN: r190978 --- gcc/ChangeLog | 11 +++++++++++ gcc/tree-ssa-loop-ivcanon.c | 4 +++- gcc/tree-ssa-loop-manip.c | 8 +++++++- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9866362b50b..33a8dfd2c7f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,14 @@ +2012-09-05 Richard Guenther + + PR tree-optimization/46590 + * tree-ssa-loop-ivcanon.c (try_unroll_loop_completely): Do not + update SSA form here. + (canonicalize_induction_variables): Assert we do not need to + update SSA form. + (tree_unroll_loops_completely): Update SSA form here. + * tree-ssa-loop-manip.c (gimple_duplicate_loop_to_header_edge): + Do not verify loop-closed SSA form if SSA form is not up-to-date. + 2012-09-05 Georg-Johann Lay PR target/54461 diff --git a/gcc/tree-ssa-loop-ivcanon.c b/gcc/tree-ssa-loop-ivcanon.c index 48fd3f4425b..e1584b44e93 100644 --- a/gcc/tree-ssa-loop-ivcanon.c +++ b/gcc/tree-ssa-loop-ivcanon.c @@ -414,7 +414,6 @@ try_unroll_loop_completely (struct loop *loop, else gimple_cond_make_false (cond); update_stmt (cond); - update_ssa (TODO_update_ssa); if (dump_file && (dump_flags & TDF_DETAILS)) fprintf (dump_file, "Unrolled loop %d completely.\n", loop->num); @@ -493,6 +492,7 @@ canonicalize_induction_variables (void) true, UL_SINGLE_ITER, true); } + gcc_assert (!need_ssa_update_p (cfun)); /* Clean up the information about numbers of iterations, since brute force evaluation could reveal new information. */ @@ -536,6 +536,8 @@ tree_unroll_loops_completely (bool may_increase_size, bool unroll_outer) if (changed) { + update_ssa (TODO_update_ssa); + /* This will take care of removing completely unrolled loops from the loop structures so we can continue unrolling now innermost loops. */ diff --git a/gcc/tree-ssa-loop-manip.c b/gcc/tree-ssa-loop-manip.c index 832a5011493..9732fbe484a 100644 --- a/gcc/tree-ssa-loop-manip.c +++ b/gcc/tree-ssa-loop-manip.c @@ -752,7 +752,13 @@ gimple_duplicate_loop_to_header_edge (struct loop *loop, edge e, return false; #ifdef ENABLE_CHECKING - if (loops_state_satisfies_p (LOOP_CLOSED_SSA)) + /* ??? This forces needless update_ssa calls after processing each + loop instead of just once after processing all loops. We should + instead verify that loop-closed SSA form is up-to-date for LOOP + only (and possibly SSA form). For now just skip verifying if + there are to-be renamed variables. */ + if (!need_ssa_update_p (cfun) + && loops_state_satisfies_p (LOOP_CLOSED_SSA)) verify_loop_closed_ssa (true); #endif