< prev index next >
src/hotspot/share/opto/parse1.cpp
Print this page
@@ -123,13 +123,13 @@
case T_FLOAT: l = new LoadFNode(ctl, mem, adr, TypeRawPtr::BOTTOM, Type::FLOAT, MemNode::unordered); break;
case T_ADDRESS: l = new LoadPNode(ctl, mem, adr, TypeRawPtr::BOTTOM, TypeRawPtr::BOTTOM, MemNode::unordered); break;
case T_OBJECT: l = new LoadPNode(ctl, mem, adr, TypeRawPtr::BOTTOM, TypeInstPtr::BOTTOM, MemNode::unordered); break;
case T_VALUETYPE: {
// Load oop and create a new ValueTypeNode
- const TypeValueTypePtr* vtptr_type = TypeValueTypePtr::make(type->is_valuetype(), TypePtr::NotNull);
+ const TypeValueTypePtr* vtptr_type = TypeValueTypePtr::make(TypePtr::NotNull, type->is_valuetype()->value_klass());
l = _gvn.transform(new LoadPNode(ctl, mem, adr, TypeRawPtr::BOTTOM, vtptr_type, MemNode::unordered));
- l = ValueTypeNode::make(this, l);
+ l = ValueTypeNode::make_from_oop(this, l);
break;
}
case T_VALUETYPEPTR: {
l = new LoadPNode(ctl, mem, adr, TypeRawPtr::BOTTOM, TypeValueTypePtr::NOTNULL, MemNode::unordered);
break;
@@ -806,11 +806,11 @@
if ((_caller->has_method() || tf()->returns_value_type_as_fields()) &&
ret_type->isa_valuetypeptr() &&
!ret_type->is_valuetypeptr()->is__Value()) {
// When inlining or with multiple return values: return value
// type as ValueTypeNode not as oop
- ret_type = ret_type->is_valuetypeptr()->value_type();
+ ret_type = TypeValueType::make(ret_type->is_valuetypeptr()->value_klass());
}
int ret_size = type2size[ret_type->basic_type()];
Node* ret_phi = new PhiNode(region, ret_type);
gvn().set_type_bottom(ret_phi);
_exits.ensure_stack(ret_size);
@@ -856,15 +856,15 @@
// Value type arguments are not passed by reference: we get an
// argument per field of the value type. Build ValueTypeNodes
// from the value type arguments.
const Type* t = tf->domain_sig()->field_at(i);
if (t->isa_valuetypeptr() && !t->is_valuetypeptr()->is__Value()) {
- ciValueKlass* vk = t->is_valuetypeptr()->value_type()->value_klass();
+ ciValueKlass* vk = t->is_valuetypeptr()->value_klass();
Node* ctl = map->control();
- Node* vt = ValueTypeNode::make(gvn, ctl, map->memory(), start, vk, j, true);
+ ValueTypeNode* vt = ValueTypeNode::make_from_multi(gvn, ctl, map->memory(), start, vk, j, true);
map->set_control(ctl);
- map->init_req(i, gvn.transform(vt));
+ map->init_req(i, vt);
j += vk->value_arg_slots();
} else {
Node* parm = gvn.transform(new ParmNode(start, j));
map->init_req(i, parm);
// Record all these guys for later GVN.
@@ -876,11 +876,11 @@
Node* parm = gvn.transform(new ParmNode(start, i));
// Check if parameter is a value type pointer
if (gvn.type(parm)->isa_valuetypeptr()) {
// Create ValueTypeNode from the oop and replace the parameter
Node* ctl = map->control();
- parm = ValueTypeNode::make(gvn, ctl, map->memory(), parm);
+ parm = ValueTypeNode::make_from_oop(gvn, ctl, map->memory(), parm);
map->set_control(ctl);
}
map->init_req(i, parm);
// Record all these guys for later GVN.
record_for_igvn(parm);
< prev index next >