< prev index next >

src/hotspot/share/opto/parse1.cpp

Print this page

        

*** 123,135 **** 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); l = _gvn.transform(new LoadPNode(ctl, mem, adr, TypeRawPtr::BOTTOM, vtptr_type, MemNode::unordered)); ! l = ValueTypeNode::make(this, l); break; } case T_VALUETYPEPTR: { l = new LoadPNode(ctl, mem, adr, TypeRawPtr::BOTTOM, TypeValueTypePtr::NOTNULL, MemNode::unordered); break; --- 123,135 ---- 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(TypePtr::NotNull, type->is_valuetype()->value_klass()); l = _gvn.transform(new LoadPNode(ctl, mem, adr, TypeRawPtr::BOTTOM, vtptr_type, MemNode::unordered)); ! 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,816 **** 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(); } 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); --- 806,816 ---- 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 = 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,870 **** // 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(); Node* ctl = map->control(); ! Node* vt = ValueTypeNode::make(gvn, ctl, map->memory(), start, vk, j, true); map->set_control(ctl); ! map->init_req(i, gvn.transform(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. --- 856,870 ---- // 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_klass(); Node* ctl = map->control(); ! ValueTypeNode* vt = ValueTypeNode::make_from_multi(gvn, ctl, map->memory(), start, vk, j, true); map->set_control(ctl); ! 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,886 **** 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); map->set_control(ctl); } map->init_req(i, parm); // Record all these guys for later GVN. record_for_igvn(parm); --- 876,886 ---- 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_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 >