re PR tree-optimization/46590 (long compile time with -O2 and many loops)

2012-09-05  Richard Guenther  <rguenther@suse.de>

	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
This commit is contained in:
Richard Guenther 2012-09-05 13:29:13 +00:00 committed by Richard Biener
parent e124e65f35
commit 18eb76ebfa
3 changed files with 21 additions and 2 deletions

View File

@ -1,3 +1,14 @@
2012-09-05 Richard Guenther <rguenther@suse.de>
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 <avr@gjlay.de> 2012-09-05 Georg-Johann Lay <avr@gjlay.de>
PR target/54461 PR target/54461

View File

@ -414,7 +414,6 @@ try_unroll_loop_completely (struct loop *loop,
else else
gimple_cond_make_false (cond); gimple_cond_make_false (cond);
update_stmt (cond); update_stmt (cond);
update_ssa (TODO_update_ssa);
if (dump_file && (dump_flags & TDF_DETAILS)) if (dump_file && (dump_flags & TDF_DETAILS))
fprintf (dump_file, "Unrolled loop %d completely.\n", loop->num); fprintf (dump_file, "Unrolled loop %d completely.\n", loop->num);
@ -493,6 +492,7 @@ canonicalize_induction_variables (void)
true, UL_SINGLE_ITER, true, UL_SINGLE_ITER,
true); true);
} }
gcc_assert (!need_ssa_update_p (cfun));
/* Clean up the information about numbers of iterations, since brute force /* Clean up the information about numbers of iterations, since brute force
evaluation could reveal new information. */ evaluation could reveal new information. */
@ -536,6 +536,8 @@ tree_unroll_loops_completely (bool may_increase_size, bool unroll_outer)
if (changed) if (changed)
{ {
update_ssa (TODO_update_ssa);
/* This will take care of removing completely unrolled loops /* This will take care of removing completely unrolled loops
from the loop structures so we can continue unrolling now from the loop structures so we can continue unrolling now
innermost loops. */ innermost loops. */

View File

@ -752,7 +752,13 @@ gimple_duplicate_loop_to_header_edge (struct loop *loop, edge e,
return false; return false;
#ifdef ENABLE_CHECKING #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); verify_loop_closed_ssa (true);
#endif #endif