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:
Vladimir Kozlov 2009-07-16 16:29:55 -07:00
parent c3efa899b6
commit 2e2f60507e
2 changed files with 130 additions and 3 deletions

View file

@ -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