src/share/vm/opto/cfgnode.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File 6851282 Cdiff src/share/vm/opto/cfgnode.cpp

src/share/vm/opto/cfgnode.cpp

Print this page

        

*** 1794,1813 **** bool has_decodeN = false; Node* in_decodeN = NULL; 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); } else if (!ii->is_Phi()) { may_push = false; } } 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 Node *ii = in(i); Node* new_ii = NULL; --- 1794,1816 ---- bool has_decodeN = false; Node* in_decodeN = NULL; for (uint i=1; i<req(); ++i) {// For all paths in Node *ii = in(i); if (ii->is_DecodeN() && ii->bottom_type() == bottom_type()) { + // 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; } } if (has_decodeN && may_push) { PhaseIterGVN *igvn = phase->is_IterGVN(); 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 Node *ii = in(i); Node* new_ii = NULL;
src/share/vm/opto/cfgnode.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File