6712835: Server compiler fails with assertion (loop_count < K,"infinite loop in PhaseIterGVN::transform")

Reviewed-by: kvn
This commit is contained in:
Tom Rodriguez 2008-07-25 11:32:56 -07:00
parent 97c80b8c84
commit 7b4a7f7bdc
4 changed files with 1587 additions and 1 deletions

View file

@ -351,7 +351,7 @@ void ciBlock::set_exception_range(int start_bci, int limit_bci) {
}
#ifndef PRODUCT
static char *flagnames[] = {
static const char *flagnames[] = {
"Processed",
"Handler",
"MayThrow",

View file

@ -473,10 +473,12 @@ void IdealGraphPrinter::visit_node(Node *n, void *param) {
print_prop("is_dontcare", "false");
}
#ifdef ASSERT
Node* old = C->matcher()->find_old_node(node);
if (old != NULL) {
print_prop("old_node_idx", old->_idx);
}
#endif
}
if (node->is_Proj()) {

View file

@ -725,6 +725,11 @@ static Node *remove_useless_bool(IfNode *iff, PhaseGVN *phase) {
int true_path = phi->is_diamond_phi();
if( true_path == 0 ) return NULL;
// Make sure that iff and the control of the phi are different. This
// should really only happen for dead control flow since it requires
// an illegal cycle.
if (phi->in(0)->in(1)->in(0) == iff) return NULL;
// phi->region->if_proj->ifnode->bool->cmp
BoolNode *bol2 = phi->in(0)->in(1)->in(0)->in(1)->as_Bool();
@ -751,6 +756,7 @@ static Node *remove_useless_bool(IfNode *iff, PhaseGVN *phase) {
}
Node* new_bol = (flip ? phase->transform( bol2->negate(phase) ) : bol2);
assert(new_bol != iff->in(1), "must make progress");
iff->set_req(1, new_bol);
// Intervening diamond probably goes dead
phase->C->set_major_progress();

File diff suppressed because it is too large Load diff