8271341: Opcode() != Op_If && Opcode() != Op_RangeCheck) || outcnt() == 2 assert failure with Test7179138_1.java
Reviewed-by: kvn, thartmann
This commit is contained in:
parent
041ae20b10
commit
99fb12c798
@ -277,6 +277,20 @@ void StringConcat::eliminate_unneeded_control() {
|
|||||||
C->gvn_replace_by(n, n->in(0)->in(0));
|
C->gvn_replace_by(n, n->in(0)->in(0));
|
||||||
// get rid of the other projection
|
// get rid of the other projection
|
||||||
C->gvn_replace_by(n->in(0)->as_If()->proj_out(false), C->top());
|
C->gvn_replace_by(n->in(0)->as_If()->proj_out(false), C->top());
|
||||||
|
} else if (n->is_Region()) {
|
||||||
|
Node* iff = n->in(1)->in(0);
|
||||||
|
assert(n->req() == 3 && n->in(2)->in(0) == iff, "not a diamond");
|
||||||
|
assert(iff->is_If(), "no if for the diamond");
|
||||||
|
Node* bol = iff->in(1);
|
||||||
|
assert(bol->is_Bool(), "unexpected if shape");
|
||||||
|
Node* cmp = bol->in(1);
|
||||||
|
assert(cmp->is_Cmp(), "unexpected if shape");
|
||||||
|
if (cmp->in(1)->is_top() || cmp->in(2)->is_top()) {
|
||||||
|
// This region should lose its Phis and be optimized out by igvn but there's a chance the if folds to top first
|
||||||
|
// which then causes a reachable part of the graph to become dead.
|
||||||
|
Compile* C = _stringopts->C;
|
||||||
|
C->gvn_replace_by(n, iff->in(0));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1003,6 +1017,7 @@ bool StringConcat::validate_control_flow() {
|
|||||||
// The IGVN will make this simple diamond go away when it
|
// The IGVN will make this simple diamond go away when it
|
||||||
// transforms the Region. Make sure it sees it.
|
// transforms the Region. Make sure it sees it.
|
||||||
Compile::current()->record_for_igvn(ptr);
|
Compile::current()->record_for_igvn(ptr);
|
||||||
|
_control.push(ptr);
|
||||||
ptr = ptr->in(1)->in(0)->in(0);
|
ptr = ptr->in(1)->in(0)->in(0);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -23,11 +23,13 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* @test
|
* @test
|
||||||
* @bug 7179138
|
* @bug 7179138 8271341
|
||||||
* @summary Incorrect result with String concatenation optimization
|
* @summary Incorrect result with String concatenation optimization
|
||||||
*
|
*
|
||||||
* @run main/othervm -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation
|
* @run main/othervm -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation
|
||||||
* compiler.c2.Test7179138_1
|
* compiler.c2.Test7179138_1
|
||||||
|
* @run main/othervm -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation
|
||||||
|
* -XX:+UnlockDiagnosticVMOptions -XX:+StressIGVN -XX:RepeatCompilation=100 compiler.c2.Test7179138_1
|
||||||
*
|
*
|
||||||
* @author Skip Balk
|
* @author Skip Balk
|
||||||
*/
|
*/
|
||||||
@ -67,4 +69,3 @@ public class Test7179138_1 {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user