mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-21 11:34:38 +02:00
6712835: Server compiler fails with assertion (loop_count < K,"infinite loop in PhaseIterGVN::transform")
Reviewed-by: kvn
This commit is contained in:
parent
97c80b8c84
commit
7b4a7f7bdc
4 changed files with 1587 additions and 1 deletions
|
@ -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",
|
||||
|
|
|
@ -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()) {
|
||||
|
|
|
@ -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();
|
||||
|
|
1578
hotspot/test/compiler/6712835/Test6712835.java
Normal file
1578
hotspot/test/compiler/6712835/Test6712835.java
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue