+2004-06-14 Jeff Law <law@redhat.com>
+
+ * tree-ssa.c (kill_redundant_phi_nodes): More correctly handle
+ PHIs where the destination or an argument is marked with
+ SSA_NAME_OCCURS_IN_ABNORMAL_PHI.
+
2004-06-14 Jakub Jelinek <jakub@redhat.com>
PR middle-end/15945
{
var = PHI_RESULT (phi);
+ /* If the destination of the PHI is associated with an
+ abnormal edge, then we can not propagate this PHI away. */
+ if (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (var))
+ {
+ raise_value (phi, var, eq_to);
+ continue;
+ }
+
for (i = 0; i < (unsigned) PHI_NUM_ARGS (phi); i++)
{
t = PHI_ARG_DEF (phi, i);
stmt = SSA_NAME_DEF_STMT (t);
+ /* If any particular PHI argument is associated with
+ an abnormal edge, then we know that we should not
+ be propagating away this PHI. Go ahead and raise
+ the result of this PHI to the top of the lattice. */
+ if (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (t))
+ {
+ raise_value (phi, var, eq_to);
+ continue;
+ }
+
/* If the defining statement for this argument is not a
- phi node or the argument is associated with an abnormal
- edge, then we need to recursively start the forward
+ phi node then we need to recursively start the forward
dataflow starting with PHI. */
- if (TREE_CODE (stmt) != PHI_NODE
- || SSA_NAME_OCCURS_IN_ABNORMAL_PHI (t))
+ if (TREE_CODE (stmt) != PHI_NODE)
{
eq_to[SSA_NAME_VERSION (t)] = t;
raise_value (phi, t, eq_to);