Skip to content

Commit e300a85

Browse files
committedMay 20, 2022
8287040: [lworld][lw4] Remove abstract Object class support from HotSpot
Reviewed-by: dsimms
1 parent b4f0a6e commit e300a85

File tree

20 files changed

+21
-139
lines changed

20 files changed

+21
-139
lines changed
 

‎src/hotspot/cpu/aarch64/templateTable_aarch64.cpp

-3
Original file line numberDiff line numberDiff line change
@@ -3792,9 +3792,6 @@ void TemplateTable::_new() {
37923792
__ cmp(rscratch1, (u1)InstanceKlass::fully_initialized);
37933793
__ br(Assembler::NE, slow_case);
37943794

3795-
__ ldrw(rscratch1, Address(r4, Klass::access_flags_offset()));
3796-
__ tbz(rscratch1, exact_log2(JVM_ACC_ABSTRACT), slow_case);
3797-
37983795
__ allocate_instance(r4, r0, r3, r1, true, slow_case);
37993796
__ b(done);
38003797

‎src/hotspot/cpu/x86/templateTable_x86.cpp

-4
Original file line numberDiff line numberDiff line change
@@ -4308,10 +4308,6 @@ void TemplateTable::_new() {
43084308
__ cmpb(Address(rcx, InstanceKlass::init_state_offset()), InstanceKlass::fully_initialized);
43094309
__ jcc(Assembler::notEqual, slow_case);
43104310

4311-
__ movl(rdx, Address(rcx, Klass::access_flags_offset()));
4312-
__ testl(rdx, JVM_ACC_ABSTRACT);
4313-
__ jcc(Assembler::notZero, slow_case);
4314-
43154311
__ allocate_instance(rcx, rax, rdx, rbx, true, slow_case);
43164312
__ jmp(done);
43174313

‎src/hotspot/share/c1/c1_GraphBuilder.cpp

+1-5
Original file line numberDiff line numberDiff line change
@@ -2568,11 +2568,7 @@ void GraphBuilder::new_instance(int klass_index) {
25682568
bool will_link;
25692569
ciKlass* klass = stream()->get_klass(will_link);
25702570
assert(klass->is_instance_klass(), "must be an instance klass");
2571-
ciKlass* ik = klass;
2572-
if (ik == compilation()->env()->Object_klass() && compilation()->env()->Object_klass()->is_abstract()) {
2573-
ik = compilation()->env()->Identity_klass();
2574-
}
2575-
NewInstance* new_instance = new NewInstance(ik->as_instance_klass(), state_before, stream()->is_unresolved_klass());
2571+
NewInstance* new_instance = new NewInstance(klass->as_instance_klass(), state_before, stream()->is_unresolved_klass());
25762572
_memory->new_instance(new_instance);
25772573
apush(append_split(new_instance));
25782574
}

‎src/hotspot/share/cds/classListParser.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -469,7 +469,7 @@ InstanceKlass* ClassListParser::load_class_from_source(Symbol* class_name, TRAPS
469469
InstanceKlass* k = UnregisteredClasses::load_class(class_name, _source, CHECK_NULL);
470470
const int actual_num_interfaces = k->local_interfaces()->length();
471471
const int specified_num_interfaces = _interfaces->length(); // specified in classlist
472-
int expected_num_interfaces = actual_num_interfaces, i;
472+
int expected_num_interfaces = actual_num_interfaces;
473473

474474
if (specified_num_interfaces != expected_num_interfaces) {
475475
print_specified_interfaces();

‎src/hotspot/share/ci/ciTypeFlow.cpp

-5
Original file line numberDiff line numberDiff line change
@@ -841,11 +841,6 @@ void ciTypeFlow::StateVector::do_multianewarray(ciBytecodeStream* str) {
841841
void ciTypeFlow::StateVector::do_new(ciBytecodeStream* str) {
842842
bool will_link;
843843
ciKlass* klass = str->get_klass(will_link);
844-
845-
if (klass == outer()->env()->Object_klass() && outer()->env()->Object_klass()->is_abstract()) {
846-
klass = outer()->env()->Identity_klass();
847-
}
848-
849844
if (!will_link || str->is_unresolved_klass() || klass->is_inlinetype()) {
850845
trap(str, klass, str->get_klass_index());
851846
} else {

‎src/hotspot/share/classfile/vmClassMacros.hpp

-2
Original file line numberDiff line numberDiff line change
@@ -184,8 +184,6 @@
184184
do_klass(vector_VectorMask_klass, jdk_internal_vm_vector_VectorMask ) \
185185
do_klass(vector_VectorShuffle_klass, jdk_internal_vm_vector_VectorShuffle ) \
186186
\
187-
do_klass(Identity_klass, java_lang_Identity ) \
188-
\
189187
/*end*/
190188

191189
#endif // SHARE_CLASSFILE_VMCLASSMACROS_HPP

‎src/hotspot/share/classfile/vmSymbols.hpp

-1
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,6 @@
143143
template(java_util_Iterator, "java/util/Iterator") \
144144
template(java_lang_Record, "java/lang/Record") \
145145
template(sun_instrument_InstrumentationImpl, "sun/instrument/InstrumentationImpl") \
146-
template(java_lang_Identity, "java/lang/Identity") \
147146
template(sun_invoke_util_ValueConversions, "sun/invoke/util/ValueConversions") \
148147
\
149148
template(jdk_internal_loader_NativeLibraries, "jdk/internal/loader/NativeLibraries") \

‎src/hotspot/share/interpreter/interpreterRuntime.cpp

-8
Original file line numberDiff line numberDiff line change
@@ -225,14 +225,6 @@ JRT_ENTRY(void, InterpreterRuntime::_new(JavaThread* current, ConstantPool* pool
225225
Klass* k = pool->klass_at(index, CHECK);
226226
InstanceKlass* klass = InstanceKlass::cast(k);
227227

228-
if (klass->is_abstract()) {
229-
if (klass == vmClasses::Object_klass()) {
230-
klass = vmClasses::Identity_klass();
231-
} else {
232-
THROW(vmSymbols::java_lang_InstantiationError());
233-
}
234-
}
235-
236228
if (klass->is_inline_klass()) {
237229
THROW(vmSymbols::java_lang_InstantiationError());
238230
}

‎src/hotspot/share/memory/universe.cpp

+1-6
Original file line numberDiff line numberDiff line change
@@ -419,12 +419,7 @@ void Universe::genesis(TRAPS) {
419419
int i = 0;
420420
while (i < size) {
421421
// Allocate dummy in old generation
422-
oop dummy;
423-
if(vmClasses::Object_klass()->is_abstract()) {
424-
dummy = vmClasses::Identity_klass()->allocate_instance(CHECK);
425-
} else {
426-
dummy = vmClasses::Object_klass()->allocate_instance(CHECK);
427-
}
422+
oop dummy = vmClasses::Object_klass()->allocate_instance(CHECK);
428423
dummy_array->obj_at_put(i++, dummy);
429424
}
430425
{

‎src/hotspot/share/opto/library_call.cpp

-23
Original file line numberDiff line numberDiff line change
@@ -3001,21 +3001,6 @@ bool LibraryCallKit::inline_unsafe_allocate() {
30013001
kls = null_check(kls);
30023002
if (stopped()) return true; // argument was like int.class
30033003

3004-
bool object_check = C->env()->Object_klass()->is_abstract();
3005-
3006-
IdealKit ideal(this);
3007-
#define __ ideal.
3008-
IdealVariable result(ideal); __ declarations_done();
3009-
3010-
if (object_check) {
3011-
__ if_then(kls, BoolTest::eq, makecon(TypeKlassPtr::make(C->env()->Object_klass())));
3012-
sync_kit(ideal);
3013-
Node* obj = new_instance(makecon(TypeKlassPtr::make(C->env()->Identity_klass())));
3014-
ideal.sync_kit(this);
3015-
ideal.set(result, obj);
3016-
__ else_();
3017-
sync_kit(ideal);
3018-
}
30193004
Node* test = NULL;
30203005
if (LibraryCallKit::klass_needs_init_guard(kls)) {
30213006
// Note: The argument might still be an illegal value like
@@ -3036,15 +3021,7 @@ bool LibraryCallKit::inline_unsafe_allocate() {
30363021
} else {
30373022
obj = new_instance(kls, test);
30383023
}
3039-
if (object_check) {
3040-
ideal.sync_kit(this);
3041-
ideal.set(result, obj);
3042-
__ end_if();
3043-
final_sync(ideal);
3044-
obj = ideal.value(result);
3045-
}
30463024
set_result(obj);
3047-
#undef __
30483025
return true;
30493026
}
30503027

‎src/hotspot/share/opto/parseHelper.cpp

-4
Original file line numberDiff line numberDiff line change
@@ -286,10 +286,6 @@ void Parse::do_new() {
286286
assert(will_link, "_new: typeflow responsibility");
287287
assert(!klass->is_inlinetype(), "unexpected inline type");
288288

289-
if (klass == C->env()->Object_klass() && C->env()->Object_klass()->is_abstract()) {
290-
klass = C->env()->Identity_klass();
291-
}
292-
293289
// Should throw an InstantiationError?
294290
if (klass->is_abstract() || klass->is_interface() ||
295291
klass->name() == ciSymbols::java_lang_Class() ||

‎src/hotspot/share/prims/jni.cpp

+3-15
Original file line numberDiff line numberDiff line change
@@ -999,11 +999,7 @@ JNI_ENTRY(jobject, jni_NewObjectA(JNIEnv *env, jclass clazz, jmethodID methodID,
999999
}
10001000

10011001
if (!k->is_inline_klass()) {
1002-
Klass* ik = k;
1003-
if (ik == vmClasses::Object_klass() && vmClasses::Object_klass()->is_abstract()) {
1004-
ik = vmClasses::Identity_klass();
1005-
}
1006-
instanceOop i = InstanceKlass::allocate_instance(k->java_mirror(), CHECK_NULL);
1002+
instanceOop i = InstanceKlass::allocate_instance(clazzoop, CHECK_NULL);
10071003
obj = JNIHandles::make_local(THREAD, i);
10081004
JavaValue jvalue(T_VOID);
10091005
JNI_ArgumentPusherArray ap(methodID, args);
@@ -1035,11 +1031,7 @@ JNI_ENTRY(jobject, jni_NewObjectV(JNIEnv *env, jclass clazz, jmethodID methodID,
10351031
}
10361032

10371033
if (!k->is_inline_klass()) {
1038-
Klass* ik = k;
1039-
if (ik == vmClasses::Object_klass() && vmClasses::Object_klass()->is_abstract()) {
1040-
ik = vmClasses::Identity_klass();
1041-
}
1042-
instanceOop i = InstanceKlass::allocate_instance(ik->java_mirror(), CHECK_NULL);
1034+
instanceOop i = InstanceKlass::allocate_instance(clazzoop, CHECK_NULL);
10431035
obj = JNIHandles::make_local(THREAD, i);
10441036
JavaValue jvalue(T_VOID);
10451037
JNI_ArgumentPusherVaArg ap(methodID, args);
@@ -1071,11 +1063,7 @@ JNI_ENTRY(jobject, jni_NewObject(JNIEnv *env, jclass clazz, jmethodID methodID,
10711063
}
10721064

10731065
if (!k->is_inline_klass()) {
1074-
Klass* ik = k;
1075-
if (ik == vmClasses::Object_klass() && vmClasses::Object_klass()->is_abstract()) {
1076-
ik = vmClasses::Identity_klass();
1077-
}
1078-
instanceOop i = InstanceKlass::allocate_instance(ik->java_mirror(), CHECK_NULL);
1066+
instanceOop i = InstanceKlass::allocate_instance(clazzoop, CHECK_NULL);
10791067
obj = JNIHandles::make_local(THREAD, i);
10801068
va_list args;
10811069
va_start(args, methodID);

‎src/hotspot/share/prims/unsafe.cpp

+1-6
Original file line numberDiff line numberDiff line change
@@ -463,13 +463,8 @@ UNSAFE_LEAF(void, Unsafe_FullFence(JNIEnv *env, jobject unsafe)) {
463463
////// Allocation requests
464464

465465
UNSAFE_ENTRY(jobject, Unsafe_AllocateInstance(JNIEnv *env, jobject unsafe, jclass cls)) {
466-
oop mirror = JNIHandles::resolve_non_null(cls);
467-
InstanceKlass* k = InstanceKlass::cast(java_lang_Class::as_Klass(mirror));
468-
if (k == vmClasses::Object_klass() && vmClasses::Object_klass()->is_abstract()) {
469-
k = vmClasses::Identity_klass();
470-
}
471466
JvmtiVMObjectAllocEventCollector oam;
472-
instanceOop i = InstanceKlass::allocate_instance(k->java_mirror(), CHECK_NULL);
467+
instanceOop i = InstanceKlass::allocate_instance(JNIHandles::resolve_non_null(cls), CHECK_NULL);
473468
return JNIHandles::make_local(THREAD, i);
474469
} UNSAFE_END
475470

‎src/hotspot/share/runtime/reflection.cpp

+1-5
Original file line numberDiff line numberDiff line change
@@ -1201,11 +1201,7 @@ oop Reflection::invoke_constructor(oop constructor_mirror, objArrayHandle args,
12011201

12021202
// main branch of code creates a non-inline object:
12031203
assert(!klass->is_inline_klass(), "classic constructors are only for non-inline classes");
1204-
InstanceKlass* ik = klass;
1205-
if (klass == vmClasses::Object_klass() && vmClasses::Object_klass()->is_abstract()) {
1206-
ik = vmClasses::Identity_klass();
1207-
}
1208-
Handle receiver = ik->allocate_instance_handle(CHECK_NULL);
1204+
Handle receiver = klass->allocate_instance_handle(CHECK_NULL);
12091205

12101206
// Ignore result from call and return receiver
12111207
invoke(klass, method, receiver, override, ptypes, T_VOID, args, false, CHECK_NULL);

‎src/java.base/share/classes/java/lang/Identity.java

-38
This file was deleted.

‎src/java.base/share/classes/java/util/Objects.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -533,6 +533,6 @@ long checkFromIndexSize(long fromIndex, long size, long length) {
533533
* @since 17
534534
*/
535535
public static Object newIdentity() {
536-
return new Identity();
536+
return new Object() {};
537537
}
538538
}

‎test/hotspot/jtreg/compiler/c2/irTests/TestStripMiningDropsSafepoint.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@
3535

3636
public class TestStripMiningDropsSafepoint {
3737
public static void main(String[] args) {
38-
TestFramework.runWithFlags("-XX:CompileCommand=inline,java.util.Objects::newIdentity", "-XX:+UseCountedLoopSafepoints", "-XX:LoopStripMiningIter=1000", "-XX:LoopMaxUnroll=1", "-XX:-RangeCheckElimination");
39-
TestFramework.runWithFlags("-XX:CompileCommand=inline,java.util.Objects::newIdentity", "-XX:+UseCountedLoopSafepoints", "-XX:LoopStripMiningIter=1000", "-XX:LoopMaxUnroll=1", "-XX:-RangeCheckElimination", "-XX:-PartialPeelLoop");
38+
TestFramework.runWithFlags("-XX:+UseCountedLoopSafepoints", "-XX:LoopStripMiningIter=1000", "-XX:LoopMaxUnroll=1", "-XX:-RangeCheckElimination");
39+
TestFramework.runWithFlags("-XX:+UseCountedLoopSafepoints", "-XX:LoopStripMiningIter=1000", "-XX:LoopMaxUnroll=1", "-XX:-RangeCheckElimination", "-XX:-PartialPeelLoop");
4040
}
4141

4242
@Test

‎test/hotspot/jtreg/vmTestbase/jit/t/t058/t058.gold

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ jit.t.t058.k
88
jit.t.t058.k
99
o instanceof k: true
1010
Voodoo 3
11-
java.lang.Identity
11+
java.lang.Object
1212

1313
Here come the instance variables of ko:
1414
39.0

‎test/hotspot/jtreg/vmTestbase/jit/t/t062/t062.gold

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ jit.t.t062.t062
88
jit.t.t062.t062
99
o instanceof t062: true
1010
Voodoo 3
11-
java.lang.Identity
11+
java.lang.Object
1212

1313
Here come the instance variables of ko:
1414
39.0

‎test/jdk/java/security/Identity/EqualsHashCodeContract.java

+8-8
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,11 @@ public class EqualsHashCodeContract
3434
{
3535
public static void main(String args[]) throws Exception {
3636

37-
java.security.Identity i1=new MyIdentity("identity",
37+
Identity i1=new MyIdentity("identity",
3838
new MyIdentityScope("IdentityScope"));
39-
java.security.Identity i2=new MyIdentity("identity",
39+
Identity i2=new MyIdentity("identity",
4040
new MyIdentityScope("IdentityScope"));
41-
java.security.Identity i3=new MyIdentity("identity",
41+
Identity i3=new MyIdentity("identity",
4242
new MyIdentityScope(""));
4343

4444
PublicKey pk1=new MyPublicKey();
@@ -66,7 +66,7 @@ public static void main(String args[]) throws Exception {
6666
}
6767
}
6868

69-
class MyIdentity extends java.security.Identity {
69+
class MyIdentity extends Identity {
7070
public MyIdentity(String name, IdentityScope is) throws KeyManagementException {
7171
super(name, is);
7272
}
@@ -124,18 +124,18 @@ public int size() {
124124
return 0;
125125
}
126126

127-
public java.security.Identity getIdentity(String name) {
127+
public Identity getIdentity(String name) {
128128
return null;
129129
}
130130

131-
public java.security.Identity getIdentity(PublicKey key) {
131+
public Identity getIdentity(PublicKey key) {
132132
return null;
133133
}
134134

135-
public void addIdentity(java.security.Identity identity) {
135+
public void addIdentity(Identity identity) {
136136
}
137137

138-
public void removeIdentity(java.security.Identity identity) {
138+
public void removeIdentity(Identity identity) {
139139
}
140140

141141
public java.util.Enumeration identities() {

0 commit comments

Comments
 (0)
Please sign in to comment.