diff -r dee7a3f3dc9d -r de93acbb64fc src/share/vm/opto/memnode.cpp --- a/src/share/vm/opto/memnode.cpp Mon Mar 31 16:22:52 2008 -0700 +++ b/src/share/vm/opto/memnode.cpp Mon Mar 31 18:37:36 2008 -0700 @@ -1122,6 +1122,12 @@ } // Split through Phi (see original code in loopopts.cpp). assert(phase->C->have_alias_type(addr_t), "instance should have alias type"); + + // Do nothing here if Identity will find a value + // (to avoid infinite chain of value phis generation). + if ( !phase->eqv(this, this->Identity(phase)) ) + return NULL; + const Type* this_type = this->bottom_type(); int this_index = phase->C->get_alias_index(addr_t); int this_offset = addr_t->offset();