Skip to content

Commit 305ff92

Browse files
committed
Provide an interface for the new array layouts.
1 parent cbe5ed0 commit 305ff92

File tree

7 files changed

+26
-141
lines changed

7 files changed

+26
-141
lines changed

src/hotspot/share/jvmci/jvmciCompilerToVM.cpp

Lines changed: 17 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -715,7 +715,7 @@ C2V_VMENTRY_NULL(jobject, lookupType, (JNIEnv* env, jobject, jstring jname, ARGU
715715
return JVMCIENV->get_jobject(result);
716716
C2V_END
717717

718-
C2V_VMENTRY_NULL(jobject, getArrayType, (JNIEnv* env, jobject, jchar type_char, ARGUMENT_PAIR(klass)))
718+
C2V_VMENTRY_NULL(jobject, getArrayType, (JNIEnv* env, jobject, jchar type_char, ARGUMENT_PAIR(klass), jboolean atomic, jboolean null_restricted, jboolean vm_type))
719719
JVMCIKlassHandle array_klass(THREAD);
720720
Klass* klass = UNPACK_PAIR(Klass, klass);
721721
if (klass == nullptr) {
@@ -728,45 +728,26 @@ C2V_VMENTRY_NULL(jobject, getArrayType, (JNIEnv* env, jobject, jchar type_char,
728728
JVMCI_THROW_MSG_NULL(InternalError, err_msg("No array klass for primitive type %s", type2name(type)));
729729
}
730730
} else {
731-
array_klass = klass->array_klass(CHECK_NULL);
731+
if (klass->is_inline_klass() && vm_type) {
732+
InlineKlass* vk = InlineKlass::cast(klass);
733+
ArrayKlass::ArrayProperties props = ArrayKlass::ArrayProperties::DEFAULT;
734+
if (null_restricted) {
735+
props = (ArrayKlass::ArrayProperties)(props | ArrayKlass::ArrayProperties::NULL_RESTRICTED);
736+
}
737+
if (!atomic) {
738+
props = (ArrayKlass::ArrayProperties)(props | ArrayKlass::ArrayProperties::NON_ATOMIC);
739+
}
740+
ArrayKlass* ak = vk->array_klass(THREAD);
741+
array_klass = ObjArrayKlass::cast(ak)->klass_with_properties(props, THREAD);
742+
} else {
743+
ArrayKlass* ak = klass->array_klass(THREAD);
744+
array_klass = ObjArrayKlass::cast(ak)->klass_with_properties(ArrayKlass::ArrayProperties::DEFAULT, THREAD);
745+
}
732746
}
733747
JVMCIObject result = JVMCIENV->get_jvmci_type(array_klass, JVMCI_CHECK_NULL);
734748
return JVMCIENV->get_jobject(result);
735749
C2V_END
736750

737-
// C2V_VMENTRY_NULL(jobject, getFlatArrayType, (JNIEnv* env, jobject, jchar type_char, ARGUMENT_PAIR(klass)))
738-
// JVMCIKlassHandle array_klass(THREAD);
739-
// Klass* klass = UNPACK_PAIR(Klass, klass);
740-
741-
// if(klass->is_inline_klass()){
742-
// InlineKlass* inline_klass = InlineKlass::cast(klass);
743-
// ArrayKlass* flat_array_klass;
744-
// if(inline_klass->flat_array()){
745-
// flat_array_klass = (ArrayKlass*)inline_klass->flat_array_klass(LayoutKind::NON_ATOMIC_FLAT, CHECK_NULL);
746-
// }else{
747-
// flat_array_klass = (ArrayKlass*)inline_klass->null_free_reference_array(CHECK_NULL);
748-
// }
749-
// // Request a flat array, but we might not actually get it...either way "null-free" are the aaload/aastore semantics
750-
// //ArrayKlass* flat_array_klass = (ArrayKlass*)inline_klass->flat_array_klass(LayoutKind::NON_ATOMIC_FLAT, CHECK_NULL);
751-
// array_klass = flat_array_klass;
752-
// assert(array_klass->is_null_free_array_klass(), "Expect a null-free array class here");
753-
// //assert(array_klass->is_flatArray_klass, "Expect a flat array class here");
754-
// }else{
755-
// array_klass = klass->array_klass(CHECK_NULL);
756-
// }
757-
// JVMCIObject result = JVMCIENV->get_jvmci_type(array_klass, JVMCI_CHECK_NULL);
758-
// return JVMCIENV->get_jobject(result);
759-
// C2V_END
760-
761-
// C2V_VMENTRY_NULL(jobject, getDefaultInlineTypeInstance, (JNIEnv* env, jobject, ARGUMENT_PAIR(klass)))
762-
// JVMCIKlassHandle array_klass(THREAD);
763-
// Klass* klass = UNPACK_PAIR(Klass, klass);
764-
765-
// assert(klass->is_inline_klass(), "Should only be called for inline types");
766-
// oop default_value = InlineKlass::cast(klass)->default_value();
767-
// return JVMCIENV->get_jobject(JVMCIENV->get_object_constant(default_value));
768-
// C2V_END
769-
770751
C2V_VMENTRY_NULL(jobject, lookupClass, (JNIEnv* env, jobject, jclass mirror))
771752
requireInHotSpot("lookupClass", JVMCI_CHECK_NULL);
772753
if (mirror == nullptr) {
@@ -3439,9 +3420,7 @@ JNINativeMethod CompilerToVM::methods[] = {
34393420
{CC "lookupType", CC "(" STRING HS_KLASS2 "IZ)" HS_RESOLVED_TYPE, FN_PTR(lookupType)},
34403421
{CC "lookupJClass", CC "(J)" HS_RESOLVED_TYPE, FN_PTR(lookupJClass)},
34413422
{CC "getJObjectValue", CC "(" OBJECTCONSTANT ")J", FN_PTR(getJObjectValue)},
3442-
{CC "getArrayType", CC "(C" HS_KLASS2 ")" HS_KLASS, FN_PTR(getArrayType)},
3443-
// {CC "getFlatArrayType", CC "(C" HS_KLASS2 ")" HS_KLASS, FN_PTR(getFlatArrayType)},
3444-
// {CC "getDefaultInlineTypeInstance", CC "(" HS_KLASS2 ")" JAVACONSTANT, FN_PTR(getDefaultInlineTypeInstance)},
3423+
{CC "getArrayType", CC "(C" HS_KLASS2 "ZZZ)" HS_KLASS, FN_PTR(getArrayType)},
34453424
{CC "lookupClass", CC "(" CLASS ")" HS_RESOLVED_TYPE, FN_PTR(lookupClass)},
34463425
{CC "lookupNameInPool", CC "(" HS_CONSTANT_POOL2 "II)" STRING, FN_PTR(lookupNameInPool)},
34473426
{CC "lookupNameAndTypeRefIndexInPool", CC "(" HS_CONSTANT_POOL2 "II)I", FN_PTR(lookupNameAndTypeRefIndexInPool)},

src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/CompilerToVM.java

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1180,26 +1180,12 @@ HotSpotResolvedJavaType getComponentType(HotSpotResolvedObjectTypeImpl klass) {
11801180
* @param primitiveTypeChar a {@link JavaKind#getTypeChar()} value for a primitive type
11811181
* @param nonPrimitiveKlass a non-primitive type
11821182
*/
1183-
HotSpotResolvedObjectTypeImpl getArrayType(char primitiveTypeChar, HotSpotResolvedObjectTypeImpl nonPrimitiveKlass) {
1183+
HotSpotResolvedObjectTypeImpl getArrayType(char primitiveTypeChar, HotSpotResolvedObjectTypeImpl nonPrimitiveKlass, boolean atomic, boolean nullRestricted, boolean vmType) {
11841184
long nonPrimitiveKlassPointer = nonPrimitiveKlass != null ? nonPrimitiveKlass.getKlassPointer() : 0L;
1185-
return getArrayType(primitiveTypeChar, nonPrimitiveKlass, nonPrimitiveKlassPointer);
1185+
return getArrayType(primitiveTypeChar, nonPrimitiveKlass, nonPrimitiveKlassPointer, atomic, nullRestricted, vmType);
11861186
}
11871187

1188-
native HotSpotResolvedObjectTypeImpl getArrayType(char typeChar, HotSpotResolvedObjectTypeImpl klass, long klassPointer);
1189-
1190-
HotSpotResolvedObjectTypeImpl getFlatArrayType(HotSpotResolvedObjectTypeImpl nonPrimitiveKlass) {
1191-
long nonPrimitiveKlassPointer = nonPrimitiveKlass.getKlassPointer();
1192-
return getFlatArrayType((char) 0, nonPrimitiveKlass, nonPrimitiveKlassPointer);
1193-
}
1194-
1195-
native HotSpotResolvedObjectTypeImpl getFlatArrayType(char typeChar, HotSpotResolvedObjectTypeImpl klass, long klassPointer);
1196-
1197-
JavaConstant getDefaultInlineTypeInstance(HotSpotResolvedObjectTypeImpl nonPrimitiveKlass) {
1198-
long nonPrimitiveKlassPointer = nonPrimitiveKlass.getKlassPointer();
1199-
return getDefaultInlineTypeInstance(nonPrimitiveKlass, nonPrimitiveKlassPointer);
1200-
}
1201-
1202-
native JavaConstant getDefaultInlineTypeInstance(HotSpotResolvedObjectTypeImpl klass, long klassPointer);
1188+
native HotSpotResolvedObjectTypeImpl getArrayType(char typeChar, HotSpotResolvedObjectTypeImpl klass, long klassPointer, boolean atomic, boolean nullRestricted, boolean vmType);
12031189

12041190
/**
12051191
* Forces initialization of {@code klass}.

src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/HotSpotResolvedJavaType.java

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -53,26 +53,16 @@ public int hashCode() {
5353
/**
5454
* Gets the array type of this type without caching the result.
5555
*/
56-
protected abstract HotSpotResolvedObjectType getArrayType();
57-
58-
abstract HotSpotResolvedObjectType getFlatArrayType();
56+
protected abstract HotSpotResolvedObjectType getArrayType(boolean atomic, boolean nullRestricted, boolean vmType);
5957

6058
@Override
6159
public HotSpotResolvedObjectType getArrayClass() {
6260
if (arrayOfType == null) {
63-
arrayOfType = getArrayType();
61+
arrayOfType = getArrayType(false, false, false);
6462
}
6563
return arrayOfType;
6664
}
6765

68-
@Override
69-
public final HotSpotResolvedObjectType getFlatArrayClass() {
70-
if (flatArrayOfType == null) {
71-
flatArrayOfType = getFlatArrayType();
72-
}
73-
return flatArrayOfType;
74-
}
75-
7666
/**
7767
* Checks whether this type is currently being initialized. If a type is being initialized it
7868
* implies that it was {@link #isLinked() linked} and that the static initializer is currently

src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/HotSpotResolvedObjectType.java

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -39,21 +39,6 @@ public interface HotSpotResolvedObjectType extends ResolvedJavaType {
3939
@Override
4040
HotSpotResolvedObjectType getArrayClass();
4141

42-
@Override
43-
default HotSpotResolvedObjectType getFlatArrayClass(){
44-
return null;
45-
}
46-
47-
@Override
48-
default HotSpotResolvedObjectType convertToFlatArray(){
49-
return null;
50-
}
51-
52-
@Override
53-
default JavaConstant getDefaultInlineTypeInstance(){
54-
return null;
55-
}
56-
5742
@Override
5843
ResolvedJavaType getComponentType();
5944

@@ -97,11 +82,6 @@ default int getLog2ComponentSize(){
9782
return -1;
9883
}
9984

100-
@Override
101-
default boolean isFlatArray(){
102-
return false;
103-
}
104-
10585
int getVtableLength();
10686

10787
@Override

src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/HotSpotResolvedObjectTypeImpl.java

Lines changed: 2 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -549,14 +549,6 @@ public int getLog2ComponentSize() {
549549
return l2esz;
550550
}
551551

552-
@Override
553-
public boolean isFlatArray() {
554-
HotSpotVMConfig config = config();
555-
assert isArray();
556-
assert getKlassPointer() != 0 : getName();
557-
return UNSAFE.getInt(getKlassPointer() + config.klassKind) == config.klassFlatArray;
558-
}
559-
560552
@Override
561553
public int layoutHelper() {
562554
HotSpotVMConfig config = config();
@@ -698,28 +690,10 @@ public JavaConstant getJavaMirror() {
698690
}
699691

700692
@Override
701-
protected HotSpotResolvedObjectTypeImpl getArrayType() {
702-
return runtime().compilerToVm.getArrayType((char) 0, this);
703-
}
704-
705-
@Override
706-
public HotSpotResolvedObjectTypeImpl getFlatArrayType() {
707-
return runtime().compilerToVm.getFlatArrayType(this);
693+
protected HotSpotResolvedObjectTypeImpl getArrayType(boolean atomic, boolean nullRestricted, boolean vmType) {
694+
return runtime().compilerToVm.getArrayType((char) 0, this, atomic, nullRestricted, vmType);
708695
}
709696

710-
@Override
711-
public HotSpotResolvedObjectTypeImpl convertToFlatArray() {
712-
assert isArray() : "only an array class can be converted to flat array class";
713-
ResolvedJavaType componentType = this.getComponentType();
714-
assert componentType != null : "component type must not be null";
715-
if (!(componentType instanceof HotSpotResolvedObjectTypeImpl)) return this;
716-
return runtime().compilerToVm.getFlatArrayType((HotSpotResolvedObjectTypeImpl) componentType);
717-
}
718-
719-
@Override
720-
public JavaConstant getDefaultInlineTypeInstance() {
721-
return runtime().compilerToVm.getDefaultInlineTypeInstance(this);
722-
}
723697

724698
/**
725699
* This class represents the field information for one field contained in the fields array of an

src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/HotSpotResolvedPrimitiveType.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -90,16 +90,11 @@ public int getModifiers() {
9090
}
9191

9292
@Override
93-
protected HotSpotResolvedObjectType getArrayType() {
93+
protected HotSpotResolvedObjectType getArrayType(boolean atomic, boolean nullRestricted, boolean vmType) {
9494
if (kind == JavaKind.Void) {
9595
return null;
9696
}
97-
return runtime().compilerToVm.getArrayType(getJavaKind().getTypeChar(), null);
98-
}
99-
100-
@Override
101-
HotSpotResolvedObjectType getFlatArrayType() {
102-
return getArrayType();
97+
return runtime().compilerToVm.getArrayType(getJavaKind().getTypeChar(), null, false, false, false);
10398
}
10499

105100
@Override

src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/meta/ResolvedJavaType.java

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -247,25 +247,6 @@ default ResolvedJavaType getElementalType() {
247247
@Override
248248
ResolvedJavaType getArrayClass();
249249

250-
/**
251-
* Gets the array class type used when creating an array with {@link jdk.internal.value.ValueClass#newNullRestrictedArray(Class, int)}
252-
*/
253-
default ResolvedJavaType getFlatArrayClass() {
254-
throw new UnsupportedOperationException();
255-
}
256-
257-
default ResolvedJavaType convertToFlatArray() {
258-
throw new UnsupportedOperationException();
259-
}
260-
261-
default boolean isFlatArray() {
262-
return false;
263-
}
264-
265-
default JavaConstant getDefaultInlineTypeInstance() {
266-
throw new UnsupportedOperationException();
267-
}
268-
269250
/**
270251
* Resolves the method implementation for virtual dispatches on objects of this dynamic type.
271252
* This resolution process only searches "up" the class hierarchy of this type. A broader search

0 commit comments

Comments
 (0)