< prev index next >
src/hotspot/share/opto/parse1.cpp
Print this page
*** 155,165 ****
Node* Parse::check_interpreter_type(Node* l, const Type* type,
SafePointNode* &bad_type_exit) {
const TypeOopPtr* tp = type->isa_oopptr();
if (type->isa_valuetype() != NULL) {
// The interpreter passes value types as oops
! tp = TypeOopPtr::make_from_klass(type->isa_valuetype()->value_klass());
tp = tp->join_speculative(TypePtr::NOTNULL)->is_oopptr();
}
// TypeFlow may assert null-ness if a type appears unloaded.
if (type == TypePtr::NULL_PTR ||
--- 155,165 ----
Node* Parse::check_interpreter_type(Node* l, const Type* type,
SafePointNode* &bad_type_exit) {
const TypeOopPtr* tp = type->isa_oopptr();
if (type->isa_valuetype() != NULL) {
// The interpreter passes value types as oops
! tp = TypeOopPtr::make_from_klass(type->value_klass());
tp = tp->join_speculative(TypePtr::NOTNULL)->is_oopptr();
}
// TypeFlow may assert null-ness if a type appears unloaded.
if (type == TypePtr::NULL_PTR ||
*** 925,935 ****
if (vt->is_allocated(&kit.gvn()) && !StressValueTypeReturnedAsFields) {
ret->init_req(TypeFunc::Parms, vt->get_oop());
} else {
ret->init_req(TypeFunc::Parms, vt->tagged_klass(kit.gvn()));
}
! const Array<SigEntry>* sig_array = vt->type()->is_valuetype()->value_klass()->extended_sig();
GrowableArray<SigEntry> sig = GrowableArray<SigEntry>(sig_array->length());
sig.appendAll(sig_array);
ExtendedSignature sig_cc = ExtendedSignature(&sig, SigEntryFilter());
uint idx = TypeFunc::Parms+1;
vt->pass_fields(&kit, ret, sig_cc, idx);
--- 925,935 ----
if (vt->is_allocated(&kit.gvn()) && !StressValueTypeReturnedAsFields) {
ret->init_req(TypeFunc::Parms, vt->get_oop());
} else {
ret->init_req(TypeFunc::Parms, vt->tagged_klass(kit.gvn()));
}
! const Array<SigEntry>* sig_array = vt->type()->value_klass()->extended_sig();
GrowableArray<SigEntry> sig = GrowableArray<SigEntry>(sig_array->length());
sig.appendAll(sig_array);
ExtendedSignature sig_cc = ExtendedSignature(&sig, SigEntryFilter());
uint idx = TypeFunc::Parms+1;
vt->pass_fields(&kit, ret, sig_cc, idx);
*** 2325,2335 ****
const Type* return_type = phi->bottom_type();
const TypeOopPtr* tr = return_type->isa_oopptr();
if (return_type->isa_valuetype()) {
// Value type is returned as fields, make sure it is scalarized
if (!value->is_ValueType()) {
! value = ValueTypeNode::make_from_oop(this, value, return_type->is_valuetype()->value_klass());
}
if (!_caller->has_method()) {
// Value type is returned as fields from root method, make
// sure all non-flattened value type fields are allocated.
assert(tf()->returns_value_type_as_fields(), "must be returned as fields");
--- 2325,2335 ----
const Type* return_type = phi->bottom_type();
const TypeOopPtr* tr = return_type->isa_oopptr();
if (return_type->isa_valuetype()) {
// Value type is returned as fields, make sure it is scalarized
if (!value->is_ValueType()) {
! value = ValueTypeNode::make_from_oop(this, value, return_type->value_klass());
}
if (!_caller->has_method()) {
// Value type is returned as fields from root method, make
// sure all non-flattened value type fields are allocated.
assert(tf()->returns_value_type_as_fields(), "must be returned as fields");
< prev index next >