+2004-05-19 Jeff Law <law@redhat.com>
+
+ * tree-ssa-phiopt.c (value_replacement): Handle the case where
+ the desired edge out of COND_BLOCK reaches OTHER_BLOCK rather than
+ BB directly.
+
2004-05-19 Zdenek Dvorak <rakdver@atrey.karlin.mff.cuni.cz>
PR c++/15463
edge e;
tree arg;
+ /* For NE_EXPR, we want to build an assignment result = arg where
+ arg is the PHI argument associated with the true edge. For
+ EQ_EXPR we want the PHI argument associated with the false edge. */
e = (TREE_CODE (cond) == NE_EXPR ? true_edge : false_edge);
+
+ /* Unfortunately, E may not reach BB (it may instead have gone to
+ OTHER_BLOCK). If that is the case, then we want the single outgoing
+ edge from OTHER_BLOCK which reaches BB and represents the desired
+ path from COND_BLOCK. */
+ if (e->dest == other_block)
+ e = e->dest->succ;
+
+ /* Now we know the incoming edge to BB that has the argument for the
+ RHS of our new assignment statement. */
if (PHI_ARG_EDGE (phi, 0) == e)
arg = arg0;
else