comparison src/share/vm/opto/memnode.cpp @ 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 1bd45abaa507
children 069ab3f976d3
comparison
equal deleted inserted replaced
4123:97825a4f7369 4124:f745b2be3737
262 } 262 }
263 // Ignore if memory is dead, or self-loop 263 // Ignore if memory is dead, or self-loop
264 Node *mem = in(MemNode::Memory); 264 Node *mem = in(MemNode::Memory);
265 if( phase->type( mem ) == Type::TOP ) return NodeSentinel; // caller will return NULL 265 if( phase->type( mem ) == Type::TOP ) return NodeSentinel; // caller will return NULL
266 assert( mem != this, "dead loop in MemNode::Ideal" ); 266 assert( mem != this, "dead loop in MemNode::Ideal" );
267
268 if (can_reshape && igvn != NULL && igvn->_worklist.member(mem)) {
269 // This memory slice may be dead.
270 // Delay this mem node transformation until the memory is processed.
271 phase->is_IterGVN()->_worklist.push(this);
272 return NodeSentinel; // caller will return NULL
273 }
267 274
268 Node *address = in(MemNode::Address); 275 Node *address = in(MemNode::Address);
269 const Type *t_adr = phase->type( address ); 276 const Type *t_adr = phase->type( address );
270 if( t_adr == Type::TOP ) return NodeSentinel; // caller will return NULL 277 if( t_adr == Type::TOP ) return NodeSentinel; // caller will return NULL
271 278