7117282: assert(base == NULL || t_adr->isa_rawptr() || !phase->type(base)

Delay memory node transformation until the memory is processed.

Reviewed-by: iveresov, never
This commit is contained in:
Vladimir Kozlov 2011-12-02 21:37:19 -08:00
parent e60b163500
commit 78034a3d3b

View File

@ -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