--- old/src/hotspot/share/opto/library_call.cpp 2019-05-15 13:57:24.151638410 -0400 +++ new/src/hotspot/share/opto/library_call.cpp 2019-05-15 13:57:23.771636525 -0400 @@ -795,8 +795,8 @@ 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: @@ -3492,8 +3492,8 @@ } //-------------------------inline_value_Class_conversion------------------- -// public Class java.lang.Class.asBoxType(); -// public Class java.lang.Class.asValueType() +// public Class java.lang.Class.asPrimaryType(); +// public Class 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(); @@ -3505,10 +3505,10 @@ 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; @@ -3593,11 +3593,11 @@ 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);