< prev index next >
src/hotspot/share/opto/doCall.cpp
Print this page
*** 651,661 ****
if (rtype->basic_type() == T_VALUETYPE && !retnode->is_ValueType()) {
pop();
assert(!cg->is_inline(), "should have ValueTypeNode result when inlining");
ciValueKlass* vk = _gvn.type(retnode)->value_klass();
// We will deoptimize if the return value is null and then need to continue execution after the call
! ValueTypeNode* vt = ValueTypeNode::make_from_oop(this, retnode, vk, /* buffer_check */ false, /* null2default */ false, iter().next_bci());
push_node(T_VALUETYPE, vt);
}
if (Bytecodes::has_optional_appendix(iter().cur_bc_raw()) || is_signature_polymorphic) {
// Be careful here with return types.
--- 651,661 ----
if (rtype->basic_type() == T_VALUETYPE && !retnode->is_ValueType()) {
pop();
assert(!cg->is_inline(), "should have ValueTypeNode result when inlining");
ciValueKlass* vk = _gvn.type(retnode)->value_klass();
// We will deoptimize if the return value is null and then need to continue execution after the call
! ValueTypeNode* vt = ValueTypeNode::make_from_oop(this, retnode, vk, /* null2default */ false, iter().next_bci());
push_node(T_VALUETYPE, vt);
}
if (Bytecodes::has_optional_appendix(iter().cur_bc_raw()) || is_signature_polymorphic) {
// Be careful here with return types.
*** 684,694 ****
if (arg_type != NULL && !arg_type->higher_equal(sig_type) && !retnode->is_ValueType()) {
pop();
Node* cast_obj = _gvn.transform(new CheckCastPPNode(control(), retnode, sig_type));
if (ct == T_VALUETYPE) {
// We will deoptimize if the return value is null and then need to continue execution after the call
! cast_obj = ValueTypeNode::make_from_oop(this, cast_obj, ctype->as_value_klass(), /* buffer_check */ false, /* null2default */ false, iter().next_bci());
}
push(cast_obj);
}
}
} else {
--- 684,694 ----
if (arg_type != NULL && !arg_type->higher_equal(sig_type) && !retnode->is_ValueType()) {
pop();
Node* cast_obj = _gvn.transform(new CheckCastPPNode(control(), retnode, sig_type));
if (ct == T_VALUETYPE) {
// We will deoptimize if the return value is null and then need to continue execution after the call
! cast_obj = ValueTypeNode::make_from_oop(this, cast_obj, ctype->as_value_klass(), /* null2default */ false, iter().next_bci());
}
push(cast_obj);
}
}
} else {
< prev index next >