Commit 54e075fe by Andrew Pinski Committed by Andrew Pinski

re PR tree-optimization/17624 (ICE: SSA corruption (another one))

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
parent 7e53ab66
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> 2004-09-24 Andreas Schwab <schwab@suse.de>
* tree-ssa-dom.c (record_range): Fix violation of strict aliasing * tree-ssa-dom.c (record_range): Fix violation of strict aliasing
......
...@@ -212,6 +212,11 @@ record_single_argument_cond_exprs (varray_type cond_worklist, ...@@ -212,6 +212,11 @@ record_single_argument_cond_exprs (varray_type cond_worklist,
|| !CONSTANT_CLASS_P (op1) || !CONSTANT_CLASS_P (op1)
|| !INTEGRAL_TYPE_P (TREE_TYPE (op1))) || !INTEGRAL_TYPE_P (TREE_TYPE (op1)))
continue; 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 /* These cases require comparisons of a naked SSA_NAME or
...@@ -235,6 +240,18 @@ record_single_argument_cond_exprs (varray_type cond_worklist, ...@@ -235,6 +240,18 @@ record_single_argument_cond_exprs (varray_type cond_worklist,
|| (TREE_CODE (op1) != SSA_NAME || (TREE_CODE (op1) != SSA_NAME
&& !is_gimple_min_invariant (op1))) && !is_gimple_min_invariant (op1)))
continue; 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 /* 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, ...@@ -247,6 +264,12 @@ record_single_argument_cond_exprs (varray_type cond_worklist,
if (TREE_CODE (def_rhs) != SSA_NAME if (TREE_CODE (def_rhs) != SSA_NAME
&& !is_gimple_min_invariant (def_rhs)) && !is_gimple_min_invariant (def_rhs))
continue; 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 /* 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, ...@@ -268,6 +291,13 @@ record_single_argument_cond_exprs (varray_type cond_worklist,
; ;
else else
continue; 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 else
continue; continue;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment