< prev index next >

src/share/vm/opto/type.cpp

Print this page

        

@@ -644,10 +644,11 @@
   TypeAryPtr::_array_body_type[T_DOUBLE]  = TypeAryPtr::DOUBLES;
 
   TypeKlassPtr::OBJECT = TypeKlassPtr::make(TypePtr::NotNull, current->env()->Object_klass(), Offset(0) );
   TypeKlassPtr::OBJECT_OR_NULL = TypeKlassPtr::make(TypePtr::BotPTR, current->env()->Object_klass(), Offset(0) );
   TypeKlassPtr::BOTTOM = (EnableValhalla | EnableMVT) ? TypeKlassPtr::make(TypePtr::BotPTR, NULL, Offset(0)) : TypeKlassPtr::OBJECT_OR_NULL;
+  TypeKlassPtr::VALUE = TypeKlassPtr::make(TypePtr::NotNull, current->env()->___Value_klass(), Offset(0));
 
   const Type **fi2c = TypeTuple::fields(2);
   fi2c[TypeFunc::Parms+0] = TypeInstPtr::BOTTOM; // Method*
   fi2c[TypeFunc::Parms+1] = TypeRawPtr::BOTTOM; // argument pointer
   TypeTuple::START_I2C = TypeTuple::make(TypeFunc::Parms+2, fi2c);

@@ -4767,17 +4768,20 @@
     case DoubleTop:
     case DoubleCon:
     case DoubleBot:
     case NarrowOop:
     case NarrowKlass:
+    case Bottom:                  // Ye Olde Default
+      return Type::BOTTOM;
+
     case MetadataPtr:
     case KlassPtr:
     case RawPtr:
     case AryPtr:
     case InstPtr:
-    case Bottom:                  // Ye Olde Default
-      return Type::BOTTOM;
+      return TypePtr::BOTTOM;
+
     case Top:
       return this;
 
     default:                      // All else is a mistake
       typerr(t);

@@ -5252,10 +5256,11 @@
 
 // Not-null object klass or below
 const TypeKlassPtr *TypeKlassPtr::OBJECT;
 const TypeKlassPtr *TypeKlassPtr::OBJECT_OR_NULL;
 const TypeKlassPtr* TypeKlassPtr::BOTTOM;
+const TypeKlassPtr *TypeKlassPtr::VALUE;
 
 //------------------------------TypeKlassPtr-----------------------------------
 TypeKlassPtr::TypeKlassPtr( PTR ptr, ciKlass* klass, Offset offset )
   : TypePtr(KlassPtr, ptr, offset), _klass(klass), _klass_is_exact(ptr == Constant) {
 }

@@ -5670,11 +5675,12 @@
   } else {
     domain_sig = TypeTuple::make_domain(method->holder(), method->signature(), false);
     domain_cc = TypeTuple::make_domain(method->holder(), method->signature(), ValueTypePassFieldsAsArgs);
   }
   const TypeTuple *range_sig = TypeTuple::make_range(method->signature(), false);
-  const TypeTuple *range_cc = TypeTuple::make_range(method->signature(), ValueTypeReturnedAsFields);
+  bool as_fields = ValueTypeReturnedAsFields;
+  const TypeTuple *range_cc = TypeTuple::make_range(method->signature(), as_fields);
   tf = TypeFunc::make(domain_sig, domain_cc, range_sig, range_cc);
   C->set_last_tf(method, tf);  // fill cache
   return tf;
 }
 
< prev index next >