< prev index next >

src/hotspot/share/opto/parse1.cpp

Print this page

        

@@ -124,18 +124,18 @@
   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));
+    const TypeInstPtr* ptr_type = TypeInstPtr::make(TypePtr::NotNull, type->is_valuetype()->value_klass());
+    l = _gvn.transform(new LoadPNode(ctl, mem, adr, TypeRawPtr::BOTTOM, ptr_type, MemNode::unordered));
     // Value type oop may point to the TLVB
-    l = ValueTypeNode::make_from_oop(this, l, vtptr_type->value_klass(), /* null_check */ false, /* buffer_check */ true);
+    l = ValueTypeNode::make_from_oop(this, l, type->is_valuetype()->value_klass(), /* null_check */ false, /* buffer_check */ true);
     break;
   }
   case T_VALUETYPEPTR: {
-    l = new LoadPNode(ctl, mem, adr, TypeRawPtr::BOTTOM, TypeValueTypePtr::NOTNULL, MemNode::unordered);
+    l = new LoadPNode(ctl, mem, adr, TypeRawPtr::BOTTOM, TypeInstPtr::NOTNULL, MemNode::unordered);
     break;
   }
   case T_LONG:
   case T_DOUBLE: {
     // Since arguments are in reverse order, the argument address 'adr'

@@ -608,12 +608,12 @@
 
   // Handle value type arguments
   int arg_size_sig = tf()->domain_sig()->cnt();
   for (uint i = 0; i < (uint)arg_size_sig; i++) {
     Node* parm = map()->in(i);
-    const TypeValueTypePtr* vtptr = _gvn.type(parm)->isa_valuetypeptr();
-    if (vtptr != NULL) {
+    const Type* t = _gvn.type(parm);
+    if (t->is_valuetypeptr()) {
       // Create ValueTypeNode from the oop and replace the parameter
       Node* null_ctl = top();
       Node* not_null_obj = null_check_common(parm, T_VALUETYPE, false, &null_ctl, false);
       if (null_ctl != top()) {
         // TODO For now, we just deoptimize if value type is NULL

@@ -621,11 +621,11 @@
         set_control(null_ctl);
         replace_in_map(parm, null());
         uncommon_trap(Deoptimization::Reason_null_check, Deoptimization::Action_none);
       }
       // Value type oop may point to the TLVB
-      Node* vt = ValueTypeNode::make_from_oop(this, not_null_obj, vtptr->value_klass(), /* null_check */ false, /* buffer_check */ true);
+      Node* vt = ValueTypeNode::make_from_oop(this, not_null_obj, t->value_klass(), /* null_check */ false, /* buffer_check */ true);
       map()->replace_edge(parm, vt);
     }
   }
 
   entry_map = map();  // capture any changes performed by method setup code

@@ -825,15 +825,14 @@
     // types will not join when we transform and push in do_exits().
     const TypeOopPtr* ret_oop_type = ret_type->isa_oopptr();
     if (ret_oop_type && !ret_oop_type->klass()->is_loaded()) {
       ret_type = TypeOopPtr::BOTTOM;
     }
-    if ((_caller->has_method() || tf()->returns_value_type_as_fields()) &&
-        ret_type->isa_valuetypeptr() && !ret_type->is_valuetypeptr()->is__Value()) {
+    if ((_caller->has_method() || tf()->returns_value_type_as_fields()) && ret_type->is_valuetypeptr()) {
       // 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());
+      ret_type = TypeValueType::make(ret_type->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);

@@ -878,12 +877,12 @@
       } else {
         // 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();
+        if (t->is_valuetypeptr()) {
+          ciValueKlass* vk = t->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();

@@ -1131,11 +1130,11 @@
     }
     if (ret_type->isa_int()) {
       BasicType ret_bt = method()->return_type()->basic_type();
       ret_phi = mask_int_value(ret_phi, ret_bt, &_gvn);
     }
-    if (_caller->has_method() && ret_type->isa_valuetypeptr()) {
+    if (_caller->has_method() && ret_type->is_valuetypeptr()) {
       // Inlined methods return a ValueTypeNode
       _exits.push_node(T_VALUETYPE, ret_phi);
     } else {
       _exits.push_node(ret_type->basic_type(), ret_phi);
     }
< prev index next >