7107042: assert(no_dead_loop) failed: dead loop detected

Use dead nodes elimination code in PhaseIdealLoop before executing EA.

Reviewed-by: never, twisti
This commit is contained in:
Vladimir Kozlov 2011-11-09 07:25:51 -08:00
parent dc1f4fe50e
commit 09b7902e14
9 changed files with 57 additions and 23 deletions

View file

@ -1421,6 +1421,12 @@ Node *LoadNode::Ideal(PhaseGVN *phase, bool can_reshape) {
const TypeOopPtr *t_oop = addr_t->isa_oopptr();
if (can_reshape && opt_mem->is_Phi() &&
(t_oop != NULL) && t_oop->is_known_instance_field()) {
PhaseIterGVN *igvn = phase->is_IterGVN();
if (igvn != NULL && igvn->_worklist.member(opt_mem)) {
// Delay this transformation until memory Phi is processed.
phase->is_IterGVN()->_worklist.push(this);
return NULL;
}
// Split instance field load through Phi.
Node* result = split_through_phi(phase);
if (result != NULL) return result;