From 72079d62a67e326d07a7d706e9d37b95c6f7c642 Mon Sep 17 00:00:00 2001 From: rakdver Date: Wed, 17 May 2006 11:33:00 +0000 Subject: [PATCH] PR tree-optimization/27548 * tree-scalar-evolution.c (scev_const_prop): Do not prolong life range of ssa names that appear on abnormal edges. * tree-ssa-loop-ivopts.c (contains_abnormal_ssa_name_p): Export. * tree-flow.h (contains_abnormal_ssa_name_p): Declare. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@113853 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 8 ++++++++ gcc/tree-flow.h | 1 + gcc/tree-scalar-evolution.c | 6 +++++- gcc/tree-ssa-loop-ivopts.c | 2 +- 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2f7034c9f00..ca43a0e6eaf 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2006-05-17 Zdenek Dvorak + + PR tree-optimization/27548 + * tree-scalar-evolution.c (scev_const_prop): Do not prolong life + range of ssa names that appear on abnormal edges. + * tree-ssa-loop-ivopts.c (contains_abnormal_ssa_name_p): Export. + * tree-flow.h (contains_abnormal_ssa_name_p): Declare. + 2005-05-17 Bernd Schmidt PR middle-end/27620 diff --git a/gcc/tree-flow.h b/gcc/tree-flow.h index 98ed8afe282..3b374d86cd0 100644 --- a/gcc/tree-flow.h +++ b/gcc/tree-flow.h @@ -842,6 +842,7 @@ bool can_unroll_loop_p (struct loop *loop, unsigned factor, struct tree_niter_desc *niter); void tree_unroll_loop (struct loops *, struct loop *, unsigned, edge, struct tree_niter_desc *); +bool contains_abnormal_ssa_name_p (tree); /* In tree-ssa-threadedge.c */ extern bool potentially_threadable_block (basic_block); diff --git a/gcc/tree-scalar-evolution.c b/gcc/tree-scalar-evolution.c index 6fcfaa4fa19..22ca912f38c 100644 --- a/gcc/tree-scalar-evolution.c +++ b/gcc/tree-scalar-evolution.c @@ -2802,7 +2802,11 @@ scev_const_prop (void) def = analyze_scalar_evolution_in_loop (ex_loop, loop, def, NULL); def = compute_overall_effect_of_inner_loop (ex_loop, def); if (!tree_does_not_contain_chrecs (def) - || chrec_contains_symbols_defined_in_loop (def, ex_loop->num)) + || chrec_contains_symbols_defined_in_loop (def, ex_loop->num) + /* Moving the computation from the loop may prolong life range + of some ssa names, which may cause problems if they appear + on abnormal edges. */ + || contains_abnormal_ssa_name_p (def)) continue; /* Eliminate the phi node and replace it by a computation outside diff --git a/gcc/tree-ssa-loop-ivopts.c b/gcc/tree-ssa-loop-ivopts.c index 02f045b43c6..7cf91e24cfe 100644 --- a/gcc/tree-ssa-loop-ivopts.c +++ b/gcc/tree-ssa-loop-ivopts.c @@ -678,7 +678,7 @@ idx_contains_abnormal_ssa_name_p (tree base, tree *index, /* Returns true if EXPR contains a ssa name that occurs in an abnormal phi node. */ -static bool +bool contains_abnormal_ssa_name_p (tree expr) { enum tree_code code; -- 2.11.4.GIT