Fri, 02 Dec 2011 21:37:19 -0800
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
src/share/vm/opto/memnode.cpp | file | annotate | diff | comparison | revisions |
1.1 --- a/src/share/vm/opto/memnode.cpp Wed Nov 30 17:35:51 2011 -0800 1.2 +++ b/src/share/vm/opto/memnode.cpp Fri Dec 02 21:37:19 2011 -0800 1.3 @@ -265,6 +265,13 @@ 1.4 if( phase->type( mem ) == Type::TOP ) return NodeSentinel; // caller will return NULL 1.5 assert( mem != this, "dead loop in MemNode::Ideal" ); 1.6 1.7 + if (can_reshape && igvn != NULL && igvn->_worklist.member(mem)) { 1.8 + // This memory slice may be dead. 1.9 + // Delay this mem node transformation until the memory is processed. 1.10 + phase->is_IterGVN()->_worklist.push(this); 1.11 + return NodeSentinel; // caller will return NULL 1.12 + } 1.13 + 1.14 Node *address = in(MemNode::Address); 1.15 const Type *t_adr = phase->type( address ); 1.16 if( t_adr == Type::TOP ) return NodeSentinel; // caller will return NULL