aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-dse.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/tree-ssa-dse.c')
-rw-r--r--gcc/tree-ssa-dse.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/gcc/tree-ssa-dse.c b/gcc/tree-ssa-dse.c
index 5d29e03..625e1d1 100644
--- a/gcc/tree-ssa-dse.c
+++ b/gcc/tree-ssa-dse.c
@@ -134,7 +134,13 @@ fix_phi_uses (tree phi, tree stmt)
def_operand_p def_p;
ssa_op_iter iter;
int i;
-
+ edge e;
+ edge_iterator ei;
+
+ FOR_EACH_EDGE (e, ei, PHI_BB (phi)->preds)
+ if (e->flags & EDGE_ABNORMAL)
+ break;
+
get_stmt_operands (stmt);
FOR_EACH_SSA_MAYDEF_OPERAND (def_p, use_p, stmt, iter)
@@ -146,7 +152,12 @@ fix_phi_uses (tree phi, tree stmt)
them with the appropriate V_MAY_DEF_OP. */
for (i = 0; i < PHI_NUM_ARGS (phi); i++)
if (v_may_def == PHI_ARG_DEF (phi, i))
- SET_PHI_ARG_DEF (phi, i, v_may_use);
+ {
+ SET_PHI_ARG_DEF (phi, i, v_may_use);
+ /* Update if the new phi argument is an abnormal phi. */
+ if (e != NULL)
+ SSA_NAME_OCCURS_IN_ABNORMAL_PHI (v_may_use) = 1;
+ }
}
}