re PR tree-optimization/17624 (ICE: SSA corruption (another one))
authorAndrew Pinski <pinskia@physics.uc.edu>
Fri, 24 Sep 2004 13:26:29 +0000 (13:26 +0000)
committerAndrew Pinski <pinskia@gcc.gnu.org>
Fri, 24 Sep 2004 13:26:29 +0000 (06:26 -0700)
2004-09-24  Andrew Pinski  <pinskia@physics.uc.edu>

        PR tree-opt/17624
        * tree-ssa-forwprop.c (record_single_argument_cond_exprs):
        Reject if any of the operands occur in an abnormal PHI.

From-SVN: r88032

gcc/ChangeLog
gcc/tree-ssa-forwprop.c

index b2f6bf779d691c8f215c9596190bc5d795e7fda5..aac77b4166fb7276eaf17ec28be9f9a90ff5912e 100644 (file)
@@ -1,3 +1,9 @@
+2004-09-24  Andrew Pinski  <pinskia@physics.uc.edu>
+
+       PR tree-opt/17624
+       * tree-ssa-forwprop.c (record_single_argument_cond_exprs):
+       Reject if any of the operands occur in an abnormal PHI.
+
 2004-09-24  Andreas Schwab  <schwab@suse.de>
 
        * tree-ssa-dom.c (record_range): Fix violation of strict aliasing
index 619cab0332008d2616b5a9b799cb690535bc83ef..cbf1fdec578407cc7308f0dc96cdb47cb6f8cb1e 100644 (file)
@@ -212,6 +212,11 @@ record_single_argument_cond_exprs (varray_type cond_worklist,
                          || !CONSTANT_CLASS_P (op1)
                          || !INTEGRAL_TYPE_P (TREE_TYPE (op1)))
                        continue;
+                     
+                     /* Don't propagate if the first operand occurs in
+                        an abnormal PHI.  */
+                     if (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (op0))
+                       continue;
                    }
 
                  /* These cases require comparisons of a naked SSA_NAME or
@@ -235,6 +240,18 @@ record_single_argument_cond_exprs (varray_type cond_worklist,
                              || (TREE_CODE (op1) != SSA_NAME
                                  && !is_gimple_min_invariant (op1)))
                            continue;
+                     
+                         /* Don't propagate if the first operand occurs in
+                            an abnormal PHI.  */
+                         if (TREE_CODE (op0) == SSA_NAME
+                             && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (op0))
+                           continue;
+                     
+                         /* Don't propagate if the second operand occurs in
+                            an abnormal PHI.  */
+                         if (TREE_CODE (op1) == SSA_NAME
+                             && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (op1))
+                           continue;
                        }
 
                      /* If TEST_VAR is set from a TRUTH_NOT_EXPR, then it
@@ -247,6 +264,12 @@ record_single_argument_cond_exprs (varray_type cond_worklist,
                          if (TREE_CODE (def_rhs) != SSA_NAME
                              && !is_gimple_min_invariant (def_rhs))
                            continue;
+                     
+                         /* Don't propagate if the operand occurs in
+                            an abnormal PHI.  */
+                         if (TREE_CODE (def_rhs) == SSA_NAME
+                             && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (def_rhs))
+                           continue;
                        }
 
                      /* If TEST_VAR was set from a cast of an integer type
@@ -268,6 +291,13 @@ record_single_argument_cond_exprs (varray_type cond_worklist,
                            ;
                          else
                            continue;
+                     
+                         /* Don't propagate if the operand occurs in
+                            an abnormal PHI.  */
+                         if (TREE_CODE (TREE_OPERAND (def_rhs, 0)) == SSA_NAME
+                             && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (TREE_OPERAND
+                                                                 (def_rhs, 0)))
+                           continue;
                        }
                      else
                        continue;