< 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 >