aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/tree-flow.h1
-rw-r--r--gcc/tree-scalar-evolution.c6
-rw-r--r--gcc/tree-ssa-loop-ivopts.c2
4 files changed, 15 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 2f7034c..ca43a0e 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2006-05-17 Zdenek Dvorak <dvorakz@suse.cz>
+
+ 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 <bernd.schmidt@analog.com>
PR middle-end/27620
diff --git a/gcc/tree-flow.h b/gcc/tree-flow.h
index 98ed8af..3b374d8 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 6fcfaa4..22ca912 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 02f045b..7cf91e2 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;