Skip to content

Commit 2c52b4d

Browse files
committed
Provide JVMCI types for different array layouts.
1 parent 305ff92 commit 2c52b4d

File tree

2 files changed

+21
-8
lines changed

2 files changed

+21
-8
lines changed

src/hotspot/share/jvmci/jvmciCompilerToVM.cpp

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -728,20 +728,18 @@ 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-
if (klass->is_inline_klass() && vm_type) {
732-
InlineKlass* vk = InlineKlass::cast(klass);
731+
ArrayKlass* ak = klass->array_klass(THREAD);
732+
array_klass = ak;
733+
if (vm_type) {
733734
ArrayKlass::ArrayProperties props = ArrayKlass::ArrayProperties::DEFAULT;
734735
if (null_restricted) {
735736
props = (ArrayKlass::ArrayProperties)(props | ArrayKlass::ArrayProperties::NULL_RESTRICTED);
736737
}
737738
if (!atomic) {
738739
props = (ArrayKlass::ArrayProperties)(props | ArrayKlass::ArrayProperties::NON_ATOMIC);
739740
}
740-
ArrayKlass* ak = vk->array_klass(THREAD);
741+
ArrayKlass* ak = klass->array_klass(THREAD);
741742
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);
745743
}
746744
}
747745
JVMCIObject result = JVMCIENV->get_jvmci_type(array_klass, JVMCI_CHECK_NULL);

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

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@
3131
public abstract class HotSpotResolvedJavaType extends HotSpotJavaType implements ResolvedJavaType {
3232

3333
HotSpotResolvedObjectType arrayOfType;
34-
HotSpotResolvedObjectType flatArrayOfType;
34+
HotSpotResolvedObjectType nullRestrictedAtomicArrayOfType;
35+
HotSpotResolvedObjectType nullRestrictedNonAtomicArrayOfType;
3536

3637
protected HotSpotResolvedJavaType(String name) {
3738
super(name);
@@ -58,11 +59,25 @@ public int hashCode() {
5859
@Override
5960
public HotSpotResolvedObjectType getArrayClass() {
6061
if (arrayOfType == null) {
61-
arrayOfType = getArrayType(false, false, false);
62+
arrayOfType = getArrayType(true, false, true);
6263
}
6364
return arrayOfType;
6465
}
6566

67+
public HotSpotResolvedObjectType nullRestrictedAtomicArrayClass() {
68+
if (nullRestrictedAtomicArrayOfType == null) {
69+
nullRestrictedAtomicArrayOfType = getArrayType(true, true, true);
70+
}
71+
return nullRestrictedAtomicArrayOfType;
72+
}
73+
74+
public HotSpotResolvedObjectType getNullRestrictedNonAtomicArrayClass() {
75+
if (nullRestrictedNonAtomicArrayOfType == null) {
76+
nullRestrictedNonAtomicArrayOfType = getArrayType(false, true, true);
77+
}
78+
return nullRestrictedNonAtomicArrayOfType;
79+
}
80+
6681
/**
6782
* Checks whether this type is currently being initialized. If a type is being initialized it
6883
* implies that it was {@link #isLinked() linked} and that the static initializer is currently

0 commit comments

Comments
 (0)