tree-ssa-phiopt.c (value_replacement): Handle the case where the desired edge out of COND_BLOCK reaches OTHER_BLOCK...

* tree-ssa-phiopt.c (value_replacement): Handle the case where
	the desired edge out of COND_BLOCK reaches OTHER_BLOCK rather than
	BB directly.

From-SVN: r82031
This commit is contained in:
Jeff Law 2004-05-19 12:31:35 -06:00 committed by Jeff Law
parent 0aea6467d5
commit 84c672b950
2 changed files with 19 additions and 0 deletions

View File

@ -1,3 +1,9 @@
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

View File

@ -464,7 +464,20 @@ value_replacement (basic_block bb, tree phi, tree arg0, tree arg1)
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