OSDN Git Service

2004-10-02 James A. Morrison <phython@gcc.gnu.org>
[pf3gnuchains/gcc-fork.git] / gcc / tree-ssa-forwprop.c
index 619cab0..cbf1fde 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;