# HG changeset patch # User kvn # Date 1322890639 28800 # Node ID f745b2be37375f5c54d5b6c1b95fbfcf24e21aa3 # Parent 97825a4f7369fb137ce89f3399dd146aa04c4ce9 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 97825a4f7369 -r f745b2be3737 src/share/vm/opto/memnode.cpp --- a/src/share/vm/opto/memnode.cpp Wed Nov 30 17:35:51 2011 -0800 +++ b/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