< prev index next >

src/share/vm/opto/cfgnode.cpp

Print this page

        

*** 1631,1651 **** if( phase->type_or_null(r) == Type::TOP ) // Dead code? return NULL; // No change // If all inputs are value types, push the value type node down through the // phi because value type nodes should be merged through their input values. ! bool all_vt = true; ! for (uint i = 1; i < req() && all_vt; ++i) { ! all_vt = in(i) && in(i)->is_ValueType(); } ! if (req() > 2 && all_vt) { ! ValueTypeNode* vt = in(1)->as_ValueType()->clone_with_phis(phase, in(0)); for (uint i = 2; i < req(); ++i) { vt->merge_with(phase, in(i)->as_ValueType(), i, i == (req()-1)); } return vt; } Node *top = phase->C->top(); bool new_phi = (outcnt() == 0); // transforming new Phi // No change for igvn if new phi is not hooked if (new_phi && can_reshape) --- 1631,1654 ---- if( phase->type_or_null(r) == Type::TOP ) // Dead code? return NULL; // No change // If all inputs are value types, push the value type node down through the // phi because value type nodes should be merged through their input values. ! if (req() > 2 && in(1) && in(1)->is_ValueTypeBase()) { ! int opcode = in(1)->Opcode(); ! uint i = 2; ! for (; i < req() && in(i) && in(i)->is_ValueTypeBase(); i++) { ! assert(in(i)->Opcode() == opcode, "mixing pointers and values?"); } ! if (i == req()) { ! ValueTypeBaseNode* vt = in(1)->as_ValueTypeBase()->clone_with_phis(phase, in(0)); for (uint i = 2; i < req(); ++i) { vt->merge_with(phase, in(i)->as_ValueType(), i, i == (req()-1)); } return vt; } + } Node *top = phase->C->top(); bool new_phi = (outcnt() == 0); // transforming new Phi // No change for igvn if new phi is not hooked if (new_phi && can_reshape)
< prev index next >