6883468: C2 compiler enters infinite loop in PhaseIterGVN::transform

Avoid ideal transformation ping-pong between AddPNode::Ideal() and CastX2PNode::Ideal().

Reviewed-by: cfang
This commit is contained in:
Vladimir Kozlov 2009-09-25 13:26:02 -07:00
parent eb73cf4739
commit 7e942d79d0

@ -1085,6 +1085,9 @@ Node *CastX2PNode::Ideal(PhaseGVN *phase, bool can_reshape) {
switch (op) {
case Op_SubX:
x = in(1)->in(1);
// Avoid ideal transformations ping-pong between this and AddP for raw pointers.
if (phase->find_intptr_t_con(x, -1) == 0)
break;
y = in(1)->in(2);
if (fits_in_int(phase->type(y), true)) {
return addP_of_X2P(phase, x, y, true);