diff options
author | spop <spop@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-05-17 14:25:59 +0000 |
---|---|---|
committer | spop <spop@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-05-17 14:25:59 +0000 |
commit | dfe210e464510e705f64c07eec931449a2f43e19 (patch) | |
tree | 07cae7d173df3ab165bcf789fe48c1aeddde3dda /gcc/tree-loop-linear.c | |
parent | 9b19ab49482d31ef31c797b7abc5b32f5a391995 (diff) | |
download | gcc-dfe210e464510e705f64c07eec931449a2f43e19.tar.gz |
PR middle-end/20256
PR middle-end/26435
* tree-loop-linear.c (linear_transform_loops): Don't test perfect_nest_p.
Call rewrite_into_loop_closed_ssa only when something changed.
* lambda.h (gcc_loopnest_to_lambda_loopnest): Update declaration.
* lambda-code.c (can_convert_to_perfect_nest): Declared.
(gcc_loopnest_to_lambda_loopnest): Removed need_perfect_nest parameter.
Test for perfect_nest_p here. Fix formating.
(replace_uses_equiv_to_x_with_y): Fix formating.
(stmt_uses_op): Removed.
(can_convert_to_perfect_nest): Removed loopivs parameter.
Complete the test by checking the scalar dependences.
(perfect_nestify): Remove the test for can_convert_to_perfect_nest.
Fix formating.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@113862 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-loop-linear.c')
-rw-r--r-- | gcc/tree-loop-linear.c | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/gcc/tree-loop-linear.c b/gcc/tree-loop-linear.c index c648ef77c0d..e0f5bd2991b 100644 --- a/gcc/tree-loop-linear.c +++ b/gcc/tree-loop-linear.c @@ -241,6 +241,7 @@ try_interchange_loops (lambda_trans_matrix trans, void linear_transform_loops (struct loops *loops) { + bool modified = false; unsigned int i; VEC(tree,heap) *oldivs = NULL; VEC(tree,heap) *invariants = NULL; @@ -255,7 +256,6 @@ linear_transform_loops (struct loops *loops) lambda_loopnest before, after; lambda_trans_matrix trans; bool problem = false; - bool need_perfect_nest = false; /* If it's not a loop nest, we don't want it. We also don't handle sibling loops properly, which are loops of the following form: @@ -319,13 +319,9 @@ linear_transform_loops (struct loops *loops) continue; } - if (!perfect_nest_p (loop_nest)) - need_perfect_nest = true; + before = gcc_loopnest_to_lambda_loopnest (loops, loop_nest, &oldivs, + &invariants); - before = gcc_loopnest_to_lambda_loopnest (loops, - loop_nest, &oldivs, - &invariants, - need_perfect_nest); if (!before) continue; @@ -345,6 +341,7 @@ linear_transform_loops (struct loops *loops) lambda_loopnest_to_gcc_loopnest (loop_nest, oldivs, invariants, after, trans); + modified = true; if (dump_file) fprintf (dump_file, "Successfully transformed loop.\n"); @@ -356,5 +353,7 @@ linear_transform_loops (struct loops *loops) VEC_free (tree, heap, oldivs); VEC_free (tree, heap, invariants); scev_reset (); - rewrite_into_loop_closed_ssa (NULL, TODO_update_ssa_full_phi); + + if (modified) + rewrite_into_loop_closed_ssa (NULL, TODO_update_ssa_full_phi); } |