From 78034a3d3b44c416689d6714d79c5b3c23c9de40 Mon Sep 17 00:00:00 2001 From: Vladimir Kozlov Date: Fri, 2 Dec 2011 21:37:19 -0800 Subject: [PATCH] 7117282: assert(base == NULL || t_adr->isa_rawptr() || !phase->type(base) Delay memory node transformation until the memory is processed. Reviewed-by: iveresov, never --- hotspot/src/share/vm/opto/memnode.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/hotspot/src/share/vm/opto/memnode.cpp b/hotspot/src/share/vm/opto/memnode.cpp index 8e174ca98fc..722935a3fd3 100644 --- a/hotspot/src/share/vm/opto/memnode.cpp +++ b/hotspot/src/share/vm/opto/memnode.cpp @@ -265,6 +265,13 @@ Node *MemNode::Ideal_common(PhaseGVN *phase, bool can_reshape) { 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