mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-23 12:34:32 +02:00
6851282: JIT miscompilation results in null entry in array when using CompressedOops
Get type for new Phi from non dead path. Reviewed-by: never
This commit is contained in:
parent
c3efa899b6
commit
2e2f60507e
2 changed files with 130 additions and 3 deletions
|
@ -1796,8 +1796,12 @@ Node *PhiNode::Ideal(PhaseGVN *phase, bool can_reshape) {
|
|||
for (uint i=1; i<req(); ++i) {// For all paths in
|
||||
Node *ii = in(i);
|
||||
if (ii->is_DecodeN() && ii->bottom_type() == bottom_type()) {
|
||||
has_decodeN = true;
|
||||
in_decodeN = ii->in(1);
|
||||
// Note: in_decodeN is used only to define the type of new phi.
|
||||
// Find a non dead path otherwise phi type will be wrong.
|
||||
if (ii->in(1)->bottom_type() != Type::TOP) {
|
||||
has_decodeN = true;
|
||||
in_decodeN = ii->in(1);
|
||||
}
|
||||
} else if (!ii->is_Phi()) {
|
||||
may_push = false;
|
||||
}
|
||||
|
@ -1805,7 +1809,6 @@ Node *PhiNode::Ideal(PhaseGVN *phase, bool can_reshape) {
|
|||
|
||||
if (has_decodeN && may_push) {
|
||||
PhaseIterGVN *igvn = phase->is_IterGVN();
|
||||
// Note: in_decodeN is used only to define the type of new phi here.
|
||||
PhiNode *new_phi = PhiNode::make_blank(in(0), in_decodeN);
|
||||
uint orig_cnt = req();
|
||||
for (uint i=1; i<req(); ++i) {// For all paths in
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue