Mercurial > hg > truffle
changeset 4124:f745b2be3737
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
author | kvn |
---|---|
date | Fri, 02 Dec 2011 21:37:19 -0800 |
parents | 97825a4f7369 |
children | 81f7362f7bed |
files | src/share/vm/opto/memnode.cpp |
diffstat | 1 files changed, 7 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- 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