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

Fri, 02 Dec 2011 21:37:19 -0800

author
kvn
date
Fri, 02 Dec 2011 21:37:19 -0800
changeset 3320
f745b2be3737
parent 3319
97825a4f7369
child 3321
81f7362f7bed

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

mercurial