< prev index next >
src/hotspot/share/opto/macro.cpp
Print this page
*** 859,870 ****
res_type = _igvn.type(res)->isa_oopptr();
}
if (res != NULL) {
klass = res_type->klass();
! // Value types are only allocated on demand
! if (res_type->isa_instptr() || res_type->isa_valuetypeptr()) {
// find the fields of the class which will be needed for safepoint debug information
assert(klass->is_instance_klass(), "must be an instance klass.");
iklass = klass->as_instance_klass();
nfields = iklass->nof_nonstatic_fields();
} else {
--- 859,869 ----
res_type = _igvn.type(res)->isa_oopptr();
}
if (res != NULL) {
klass = res_type->klass();
! if (res_type->isa_instptr()) {
// find the fields of the class which will be needed for safepoint debug information
assert(klass->is_instance_klass(), "must be an instance klass.");
iklass = klass->as_instance_klass();
nfields = iklass->nof_nonstatic_fields();
} else {
*** 2680,2690 ****
void PhaseMacroExpand::expand_mh_intrinsic_return(CallStaticJavaNode* call) {
Node* ret = call->proj_out(TypeFunc::Parms);
if (ret == NULL) {
return;
}
! assert(ret->bottom_type()->is_valuetypeptr()->is__Value(), "unexpected return type from MH intrinsic");
const TypeFunc* tf = call->_tf;
const TypeTuple* domain = OptoRuntime::store_value_type_fields_Type()->domain_cc();
const TypeFunc* new_tf = TypeFunc::make(tf->domain_sig(), tf->domain_cc(), tf->range_sig(), domain);
call->_tf = new_tf;
// Make sure the change of type is applied before projections are
--- 2679,2690 ----
void PhaseMacroExpand::expand_mh_intrinsic_return(CallStaticJavaNode* call) {
Node* ret = call->proj_out(TypeFunc::Parms);
if (ret == NULL) {
return;
}
! // TODO fix this with the calling convention changes
! //assert(ret->bottom_type()->is_valuetypeptr()->is__Value(), "unexpected return type from MH intrinsic");
const TypeFunc* tf = call->_tf;
const TypeTuple* domain = OptoRuntime::store_value_type_fields_Type()->domain_cc();
const TypeFunc* new_tf = TypeFunc::make(tf->domain_sig(), tf->domain_cc(), tf->range_sig(), domain);
call->_tf = new_tf;
// Make sure the change of type is applied before projections are
*** 2711,2721 ****
IfNode* allocation_iff = new IfNode(ctl, bol, PROB_MAX, COUNT_UNKNOWN);
transform_later(allocation_iff);
Node* allocation_ctl = transform_later(new IfTrueNode(allocation_iff));
Node* no_allocation_ctl = transform_later(new IfFalseNode(allocation_iff));
! Node* no_allocation_res = transform_later(new CheckCastPPNode(no_allocation_ctl, res, TypeValueTypePtr::NOTNULL));
Node* mask2 = MakeConX(-2);
Node* masked2 = transform_later(new AndXNode(cast, mask2));
Node* rawklassptr = transform_later(new CastX2PNode(masked2));
Node* klass_node = transform_later(new CheckCastPPNode(allocation_ctl, rawklassptr, TypeKlassPtr::OBJECT_OR_NULL));
--- 2711,2721 ----
IfNode* allocation_iff = new IfNode(ctl, bol, PROB_MAX, COUNT_UNKNOWN);
transform_later(allocation_iff);
Node* allocation_ctl = transform_later(new IfTrueNode(allocation_iff));
Node* no_allocation_ctl = transform_later(new IfFalseNode(allocation_iff));
! Node* no_allocation_res = transform_later(new CheckCastPPNode(no_allocation_ctl, res, TypeInstPtr::NOTNULL));
Node* mask2 = MakeConX(-2);
Node* masked2 = transform_later(new AndXNode(cast, mask2));
Node* rawklassptr = transform_later(new CastX2PNode(masked2));
Node* klass_node = transform_later(new CheckCastPPNode(allocation_ctl, rawklassptr, TypeKlassPtr::OBJECT_OR_NULL));
< prev index next >