Mercurial > hg > truffle
diff src/share/vm/opto/cfgnode.cpp @ 853:64219d2a6493
6851282: JIT miscompilation results in null entry in array when using CompressedOops
Summary: Get type for new Phi from non dead path.
Reviewed-by: never
author | kvn |
---|---|
date | Thu, 16 Jul 2009 16:29:55 -0700 |
parents | 7bb995fbd3c0 |
children | 433f394ab509 |
line wrap: on
line diff
--- a/src/share/vm/opto/cfgnode.cpp Thu Jul 16 14:10:42 2009 -0700 +++ b/src/share/vm/opto/cfgnode.cpp Thu Jul 16 16:29:55 2009 -0700 @@ -1796,8 +1796,12 @@ 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 @@ 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