re PR tree-optimization/27548 (ICE: SSA corruption - Conflict across an abnormal...
authorZdenek Dvorak <dvorakz@suse.cz>
Wed, 17 May 2006 11:33:00 +0000 (13:33 +0200)
committerZdenek Dvorak <rakdver@gcc.gnu.org>
Wed, 17 May 2006 11:33:00 +0000 (11:33 +0000)
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.

From-SVN: r113853

gcc/ChangeLog
gcc/tree-flow.h
gcc/tree-scalar-evolution.c
gcc/tree-ssa-loop-ivopts.c

index 2f7034c..ca43a0e 100644 (file)
@@ -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
index 98ed8af..3b374d8 100644 (file)
@@ -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);
index 6fcfaa4..22ca912 100644 (file)
@@ -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
index 02f045b..7cf91e2 100644 (file)
@@ -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;