< prev index next >

src/hotspot/share/opto/library_call.cpp

Print this page
rev 55127 : 8223351: [lworld] Primary mirror and nullable mirror for inline type
Reviewed-by: tbd

@@ -793,12 +793,12 @@
   case vmIntrinsics::_isArray:
   case vmIntrinsics::_isPrimitive:
   case vmIntrinsics::_getSuperclass:
   case vmIntrinsics::_getClassAccessFlags:      return inline_native_Class_query(intrinsic_id());
 
-  case vmIntrinsics::_asValueType:
-  case vmIntrinsics::_asBoxType:                return inline_value_Class_conversion(intrinsic_id());
+  case vmIntrinsics::_asPrimaryType:
+  case vmIntrinsics::_asNullableType:          return inline_value_Class_conversion(intrinsic_id());
 
   case vmIntrinsics::_floatToRawIntBits:
   case vmIntrinsics::_floatToIntBits:
   case vmIntrinsics::_intBitsToFloat:
   case vmIntrinsics::_doubleToRawLongBits:

@@ -3490,12 +3490,12 @@
   set_result(region, phi);
   return true;
 }
 
 //-------------------------inline_value_Class_conversion-------------------
-// public Class<T> java.lang.Class.asBoxType();
-// public Class<T> java.lang.Class.asValueType()
+// public Class<T> java.lang.Class.asPrimaryType();
+// public Class<T> java.lang.Class.asNullableType()
 bool LibraryCallKit::inline_value_Class_conversion(vmIntrinsics::ID id) {
   Node* mirror = argument(0); // Receiver Class
   const TypeInstPtr* mirror_con = _gvn.type(mirror)->isa_instptr();
   if (mirror_con == NULL) {
     return false;

@@ -3503,14 +3503,14 @@
 
   bool is_val_type = false;
   ciType* tm = mirror_con->java_mirror_type(&is_val_type);
   if (tm != NULL && tm->is_valuetype()) {
     Node* result = mirror;
-    if (id == vmIntrinsics::_asValueType && !is_val_type) {
+    if (id == vmIntrinsics::_asPrimaryType && !is_val_type) {
       result = _gvn.makecon(TypeInstPtr::make(tm->as_value_klass()->value_mirror_instance()));
-    } else if (id == vmIntrinsics::_asBoxType && is_val_type) {
-      result = _gvn.makecon(TypeInstPtr::make(tm->as_value_klass()->box_mirror_instance()));
+    } else if (id == vmIntrinsics::_asNullableType && is_val_type) {
+      result = _gvn.makecon(TypeInstPtr::make(tm->as_value_klass()->nullable_mirror_instance()));
     }
     set_result(result);
     return true;
   }
   return false;

@@ -3591,15 +3591,15 @@
 
   Node* res = top();
   if (!stopped()) {
     // TODO move this into do_checkcast?
     if (EnableValhalla && !obj->is_ValueType() && !is_val_type) {
-      // Check if (mirror == value_mirror && obj == null)
+      // Check if (mirror == inline_mirror && obj == null)
       RegionNode* r = new RegionNode(3);
-      Node* p = basic_plus_adr(mirror, java_lang_Class::value_mirror_offset_in_bytes());
-      Node* value_mirror = access_load_at(mirror, p, _gvn.type(p)->is_ptr(), TypeInstPtr::MIRROR->cast_to_ptr_type(TypePtr::BotPTR), T_OBJECT, IN_HEAP);
-      Node* cmp = _gvn.transform(new CmpPNode(mirror, value_mirror));
+      Node* p = basic_plus_adr(mirror, java_lang_Class::inline_mirror_offset_in_bytes());
+      Node* inline_mirror = access_load_at(mirror, p, _gvn.type(p)->is_ptr(), TypeInstPtr::MIRROR, T_OBJECT, IN_HEAP);
+      Node* cmp = _gvn.transform(new CmpPNode(mirror, inline_mirror));
       Node* bol = _gvn.transform(new BoolNode(cmp, BoolTest::ne));
       Node* if_ne = generate_fair_guard(bol, NULL);
       r->init_req(1, if_ne);
 
       // Casting to .val, check for null
< prev index next >