# HG changeset patch # User kvn # Date 1322890639 28800 # Node ID ccf66f30d4a8e03488df93b718f53e001d7fea55 # Parent 6050dd0fea1a1dff5137208861e9658a20b596ef 7117282: assert(base == NULL || t_adr->isa_rawptr() || !phase->type(base) Summary: Delay memory node transformation until the memory is processed. Reviewed-by: iveresov, never diff -r 6050dd0fea1a -r ccf66f30d4a8 hotspot/src/share/vm/opto/memnode.cpp --- a/hotspot/src/share/vm/opto/memnode.cpp Wed Nov 30 17:35:51 2011 -0800 +++ b/hotspot/src/share/vm/opto/memnode.cpp Fri Dec 02 21:37:19 2011 -0800 @@ -265,6 +265,13 @@ if( phase->type( mem ) == Type::TOP ) return NodeSentinel; // caller will return NULL assert( mem != this, "dead loop in MemNode::Ideal" ); + if (can_reshape && igvn != NULL && igvn->_worklist.member(mem)) { + // This memory slice may be dead. + // Delay this mem node transformation until the memory is processed. + phase->is_IterGVN()->_worklist.push(this); + return NodeSentinel; // caller will return NULL + } + Node *address = in(MemNode::Address); const Type *t_adr = phase->type( address ); if( t_adr == Type::TOP ) return NodeSentinel; // caller will return NULL