Skip to content

Commit e448ee3

Browse files
Add missing class initializations in JVMCI
Don't use an `InitCheck` node in this code path since the type is not a variable.
1 parent 53696fb commit e448ee3

5 files changed

+31
-43
lines changed

espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/substitutions/jvmci/Target_com_oracle_truffle_espresso_jvmci_EspressoJVMCIRuntime.java

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@
4646
import com.oracle.truffle.espresso.impl.ModuleTable;
4747
import com.oracle.truffle.espresso.impl.ObjectKlass;
4848
import com.oracle.truffle.espresso.meta.Meta;
49-
import com.oracle.truffle.espresso.nodes.bytecodes.InitCheck;
5049
import com.oracle.truffle.espresso.runtime.EspressoContext;
5150
import com.oracle.truffle.espresso.runtime.staticobject.StaticObject;
5251
import com.oracle.truffle.espresso.substitutions.EspressoSubstitutions;
@@ -94,8 +93,7 @@ static StaticObject doDefault(@SuppressWarnings("unused") StaticObject self, Sta
9493
@Cached("create(context.getMeta().jvmci.EspressoResolvedInstanceType_init.getCallTarget())") DirectCallNode objectTypeConstructor,
9594
@Cached("create(context.getMeta().jvmci.EspressoResolvedArrayType_init.getCallTarget())") DirectCallNode arrayTypeConstructor,
9695
@Cached("create(context.getMeta().jvmci.EspressoResolvedPrimitiveType_forBasicType.getCallTarget())") DirectCallNode forBasicType,
97-
@Cached("create(context.getMeta().jvmci.UnresolvedJavaType_create.getCallTarget())") DirectCallNode createUnresolved,
98-
@Cached InitCheck initCheck) {
96+
@Cached("create(context.getMeta().jvmci.UnresolvedJavaType_create.getCallTarget())") DirectCallNode createUnresolved) {
9997
assert context.getLanguage().isInternalJVMCIEnabled();
10098
Meta meta = context.getMeta();
10199
if (StaticObject.isNull(guestTypeString) || StaticObject.isNull(accessingClass)) {
@@ -104,25 +102,25 @@ static StaticObject doDefault(@SuppressWarnings("unused") StaticObject self, Sta
104102
String type = meta.toHostString(guestTypeString);
105103
LOGGER.finer(() -> "lookupType " + type + " resolved:" + resolve);
106104
ObjectKlass accessingKlass = (ObjectKlass) meta.jvmci.HIDDEN_OBJECTKLASS_MIRROR.getHiddenObject(accessingClass);
107-
return lookupType(type, accessingKlass, resolve, objectTypeConstructor, arrayTypeConstructor, forBasicType, initCheck, createUnresolved, context, meta);
105+
return lookupType(type, accessingKlass, resolve, objectTypeConstructor, arrayTypeConstructor, forBasicType, createUnresolved, context, meta);
108106
}
109107
}
110108

111-
static StaticObject lookupType(String type, ObjectKlass accessingKlass, boolean resolve, DirectCallNode objectTypeConstructor, DirectCallNode arrayTypeConstructor, DirectCallNode forBasicType,
112-
InitCheck initCheck, DirectCallNode createUnresolved, EspressoContext context, Meta meta) {
109+
private static StaticObject lookupType(String type, ObjectKlass accessingKlass, boolean resolve, DirectCallNode objectTypeConstructor, DirectCallNode arrayTypeConstructor,
110+
DirectCallNode forBasicType, DirectCallNode createUnresolved, EspressoContext context, Meta meta) {
113111
ByteSequence typeDescriptor = ByteSequence.create(type);
114112
if (type.length() == 1) {
115113
JavaKind kind = JavaKind.fromPrimitiveOrVoidTypeCharOrNull(type.charAt(0));
116114
if (kind == null) {
117115
return toJVMCIUnresolvedType(typeDescriptor, createUnresolved, meta);
118116
}
119-
return toJVMCIPrimitiveType(kind, forBasicType, initCheck, meta);
117+
return toJVMCIPrimitiveType(kind, forBasicType, meta);
120118
}
121-
return lookupNonPrimitiveType(typeDescriptor, accessingKlass, resolve, objectTypeConstructor, arrayTypeConstructor, forBasicType, initCheck, createUnresolved, context, meta);
119+
return lookupNonPrimitiveType(typeDescriptor, accessingKlass, resolve, objectTypeConstructor, arrayTypeConstructor, forBasicType, createUnresolved, context, meta);
122120
}
123121

124-
static StaticObject lookupNonPrimitiveType(ByteSequence typeDescriptor, ObjectKlass accessingKlass, boolean resolve, DirectCallNode objectTypeConstructor, DirectCallNode arrayTypeConstructor,
125-
DirectCallNode forBasicType, InitCheck initCheck, DirectCallNode createUnresolved, EspressoContext context, Meta meta) {
122+
private static StaticObject lookupNonPrimitiveType(ByteSequence typeDescriptor, ObjectKlass accessingKlass, boolean resolve, DirectCallNode objectTypeConstructor,
123+
DirectCallNode arrayTypeConstructor, DirectCallNode forBasicType, DirectCallNode createUnresolved, EspressoContext context, Meta meta) {
126124
Symbol<Type> symbol = meta.getTypes().lookupValidType(typeDescriptor);
127125
if (symbol == null) {
128126
if (resolve) {
@@ -137,7 +135,7 @@ static StaticObject lookupNonPrimitiveType(ByteSequence typeDescriptor, ObjectKl
137135
assert !resolve;
138136
return toJVMCIUnresolvedType(symbol, createUnresolved, meta);
139137
} else {
140-
return toJVMCIObjectType(result, objectTypeConstructor, arrayTypeConstructor, forBasicType, initCheck, context, meta);
138+
return toJVMCIObjectType(result, objectTypeConstructor, arrayTypeConstructor, forBasicType, context, meta);
141139
}
142140
}
143141

espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/substitutions/jvmci/Target_com_oracle_truffle_espresso_jvmci_meta_EspressoMetaAccessProvider.java

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@
3838
import com.oracle.truffle.espresso.impl.Method;
3939
import com.oracle.truffle.espresso.impl.ObjectKlass;
4040
import com.oracle.truffle.espresso.meta.Meta;
41-
import com.oracle.truffle.espresso.nodes.bytecodes.InitCheck;
4241
import com.oracle.truffle.espresso.runtime.EspressoContext;
4342
import com.oracle.truffle.espresso.runtime.staticobject.StaticObject;
4443
import com.oracle.truffle.espresso.substitutions.EspressoSubstitutions;
@@ -61,38 +60,34 @@ static StaticObject doDefault(@SuppressWarnings("unused") StaticObject self, @Ja
6160
@Bind("getContext()") EspressoContext context,
6261
@Cached("create(context.getMeta().jvmci.EspressoResolvedInstanceType_init.getCallTarget())") DirectCallNode objectTypeConstructor,
6362
@Cached("create(context.getMeta().jvmci.EspressoResolvedArrayType_init.getCallTarget())") DirectCallNode arrayTypeConstructor,
64-
@Cached("create(context.getMeta().jvmci.EspressoResolvedPrimitiveType_forBasicType.getCallTarget())") DirectCallNode forBasicType,
65-
@Cached InitCheck initCheck) {
63+
@Cached("create(context.getMeta().jvmci.EspressoResolvedPrimitiveType_forBasicType.getCallTarget())") DirectCallNode forBasicType) {
6664
assert context.getLanguage().isInternalJVMCIEnabled();
6765
Meta meta = context.getMeta();
6866
if (StaticObject.isNull(clazz)) {
6967
throw meta.throwIllegalArgumentExceptionBoundary("Class parameter was null");
7068
}
7169
Klass klass = clazz.getMirrorKlass(meta);
72-
return toJVMCIType(klass, objectTypeConstructor, arrayTypeConstructor, forBasicType, initCheck, context, meta);
70+
return toJVMCIType(klass, objectTypeConstructor, arrayTypeConstructor, forBasicType, context, meta);
7371
}
7472
}
7573

76-
static StaticObject toJVMCIType(Klass klass, DirectCallNode objectTypeConstructor, DirectCallNode arrayTypeConstructor, DirectCallNode forBasicType, InitCheck initCheck, EspressoContext context,
77-
Meta meta) {
74+
static StaticObject toJVMCIType(Klass klass, DirectCallNode objectTypeConstructor, DirectCallNode arrayTypeConstructor, DirectCallNode forBasicType, EspressoContext context, Meta meta) {
7875
if (klass.isArray()) {
7976
StaticObject jvmciMirror = meta.jvmci.EspressoResolvedArrayType.allocateInstance(context);
8077
ArrayKlass arrayKlass = (ArrayKlass) klass;
81-
arrayTypeConstructor.call(jvmciMirror, toJVMCIElementalType(arrayKlass.getElementalType(), objectTypeConstructor, forBasicType, initCheck, context, meta), arrayKlass.getDimension(),
78+
arrayTypeConstructor.call(jvmciMirror, toJVMCIElementalType(arrayKlass.getElementalType(), objectTypeConstructor, forBasicType, context, meta), arrayKlass.getDimension(),
8279
arrayKlass.mirror());
8380
return jvmciMirror;
8481
} else {
85-
return toJVMCIElementalType(klass, objectTypeConstructor, forBasicType, initCheck, context, meta);
82+
return toJVMCIElementalType(klass, objectTypeConstructor, forBasicType, context, meta);
8683
}
8784
}
8885

89-
static StaticObject toJVMCIObjectType(Klass klass, DirectCallNode objectTypeConstructor, DirectCallNode arrayTypeConstructor, DirectCallNode forBasicType, InitCheck initCheck,
90-
EspressoContext context,
91-
Meta meta) {
86+
static StaticObject toJVMCIObjectType(Klass klass, DirectCallNode objectTypeConstructor, DirectCallNode arrayTypeConstructor, DirectCallNode forBasicType, EspressoContext context, Meta meta) {
9287
if (klass.isArray()) {
9388
StaticObject jvmciMirror = meta.jvmci.EspressoResolvedArrayType.allocateInstance(context);
9489
ArrayKlass arrayKlass = (ArrayKlass) klass;
95-
arrayTypeConstructor.call(jvmciMirror, toJVMCIElementalType(arrayKlass.getElementalType(), objectTypeConstructor, forBasicType, initCheck, context, meta), arrayKlass.getDimension(),
90+
arrayTypeConstructor.call(jvmciMirror, toJVMCIElementalType(arrayKlass.getElementalType(), objectTypeConstructor, forBasicType, context, meta), arrayKlass.getDimension(),
9691
arrayKlass.mirror());
9792
return jvmciMirror;
9893
} else {
@@ -111,9 +106,9 @@ static StaticObject toJVMCIObjectType(Klass klass, Meta meta) {
111106
}
112107
}
113108

114-
static StaticObject toJVMCIElementalType(Klass klass, DirectCallNode objectTypeConstructor, DirectCallNode forBasicType, InitCheck initCheck, EspressoContext context, Meta meta) {
109+
static StaticObject toJVMCIElementalType(Klass klass, DirectCallNode objectTypeConstructor, DirectCallNode forBasicType, EspressoContext context, Meta meta) {
115110
if (klass.isPrimitive()) {
116-
return toJVMCIPrimitiveType(klass.getJavaKind(), forBasicType, initCheck, meta);
111+
return toJVMCIPrimitiveType(klass.getJavaKind(), forBasicType, meta);
117112
} else {
118113
return toJVMCIInstanceType((ObjectKlass) klass, objectTypeConstructor, context, meta);
119114
}
@@ -127,15 +122,14 @@ static StaticObject toJVMCIElementalType(Klass klass, Meta meta) {
127122
}
128123
}
129124

130-
static StaticObject toJVMCIPrimitiveType(JavaKind kind, DirectCallNode forBasicType, InitCheck initCheck, Meta meta) {
131-
initCheck.execute(meta.jvmci.EspressoResolvedPrimitiveType);
125+
static StaticObject toJVMCIPrimitiveType(JavaKind kind, DirectCallNode forBasicType, Meta meta) {
126+
meta.jvmci.EspressoResolvedPrimitiveType.safeInitialize();
132127
StaticObject result = (StaticObject) forBasicType.call(kind.getBasicType());
133128
assert !StaticObject.isNull(result);
134129
return result;
135130
}
136131

137132
static StaticObject toJVMCIPrimitiveType(JavaKind kind, Meta meta) {
138-
meta.jvmci.EspressoResolvedPrimitiveType.initialize();
139133
StaticObject result = (StaticObject) meta.jvmci.EspressoResolvedPrimitiveType_forBasicType.invokeDirectStatic(kind.getBasicType());
140134
assert !StaticObject.isNull(result);
141135
return result;
@@ -158,6 +152,7 @@ static StaticObject toJVMCIInstanceType(ObjectKlass klass, Meta meta) {
158152
static StaticObject toJVMCIUnresolvedType(ByteSequence symbol, DirectCallNode createUnresolved, Meta meta) {
159153
assert Validation.validTypeDescriptor(symbol, true);
160154
assert (symbol.byteAt(0) == 'L' && symbol.byteAt(symbol.length() - 1) == ';') || symbol.byteAt(0) == '[' : symbol;
155+
meta.jvmci.UnresolvedJavaType.safeInitialize();
161156
return (StaticObject) createUnresolved.call(meta.toGuestString(symbol));
162157
}
163158

espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/substitutions/jvmci/Target_com_oracle_truffle_espresso_jvmci_meta_EspressoObjectConstant.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
import com.oracle.truffle.api.dsl.Specialization;
3030
import com.oracle.truffle.api.nodes.DirectCallNode;
3131
import com.oracle.truffle.espresso.meta.Meta;
32-
import com.oracle.truffle.espresso.nodes.bytecodes.InitCheck;
3332
import com.oracle.truffle.espresso.runtime.EspressoContext;
3433
import com.oracle.truffle.espresso.runtime.staticobject.StaticObject;
3534
import com.oracle.truffle.espresso.substitutions.EspressoSubstitutions;
@@ -53,12 +52,11 @@ static StaticObject doDefault(StaticObject self,
5352
@Bind("getContext()") EspressoContext context,
5453
@Cached("create(context.getMeta().jvmci.EspressoResolvedInstanceType_init.getCallTarget())") DirectCallNode objectTypeConstructor,
5554
@Cached("create(context.getMeta().jvmci.EspressoResolvedArrayType_init.getCallTarget())") DirectCallNode arrayTypeConstructor,
56-
@Cached("create(context.getMeta().jvmci.EspressoResolvedPrimitiveType_forBasicType.getCallTarget())") DirectCallNode forBasicType,
57-
@Cached InitCheck initCheck) {
55+
@Cached("create(context.getMeta().jvmci.EspressoResolvedPrimitiveType_forBasicType.getCallTarget())") DirectCallNode forBasicType) {
5856
assert context.getLanguage().isInternalJVMCIEnabled();
5957
Meta meta = context.getMeta();
6058
StaticObject object = (StaticObject) meta.jvmci.HIDDEN_OBJECT_CONSTANT.getHiddenObject(self);
61-
return toJVMCIObjectType(object.getKlass(), objectTypeConstructor, arrayTypeConstructor, forBasicType, initCheck, context, meta);
59+
return toJVMCIObjectType(object.getKlass(), objectTypeConstructor, arrayTypeConstructor, forBasicType, context, meta);
6260
}
6361
}
6462

espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/substitutions/jvmci/Target_com_oracle_truffle_espresso_jvmci_meta_EspressoResolvedJavaField.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@
3636
import com.oracle.truffle.espresso.impl.Field;
3737
import com.oracle.truffle.espresso.impl.Klass;
3838
import com.oracle.truffle.espresso.meta.Meta;
39-
import com.oracle.truffle.espresso.nodes.bytecodes.InitCheck;
4039
import com.oracle.truffle.espresso.runtime.EspressoContext;
4140
import com.oracle.truffle.espresso.runtime.staticobject.StaticObject;
4241
import com.oracle.truffle.espresso.substitutions.EspressoSubstitutions;
@@ -107,16 +106,16 @@ static StaticObject doDefault(StaticObject self, StaticObject unresolved,
107106
@Cached("create(context.getMeta().jvmci.EspressoResolvedInstanceType_init.getCallTarget())") DirectCallNode objectTypeConstructor,
108107
@Cached("create(context.getMeta().jvmci.EspressoResolvedArrayType_init.getCallTarget())") DirectCallNode arrayTypeConstructor,
109108
@Cached("create(context.getMeta().jvmci.EspressoResolvedPrimitiveType_forBasicType.getCallTarget())") DirectCallNode forBasicType,
110-
@Cached("create(context.getMeta().jvmci.UnresolvedJavaType_create.getCallTarget())") DirectCallNode createUnresolved,
111-
@Cached InitCheck initCheck) {
109+
@Cached("create(context.getMeta().jvmci.UnresolvedJavaType_create.getCallTarget())") DirectCallNode createUnresolved) {
112110
assert context.getLanguage().isInternalJVMCIEnabled();
113111
Meta meta = context.getMeta();
114112
Field field = (Field) meta.jvmci.HIDDEN_FIELD_MIRROR.getHiddenObject(self);
115113
Klass klass = findType(field.getType(), field.getDeclaringKlass(), false, meta);
116114
if (klass != null) {
117115
LOGGER.finer(() -> "ERJF.getType0 found " + klass);
118-
return toJVMCIType(klass, objectTypeConstructor, arrayTypeConstructor, forBasicType, initCheck, context, meta);
116+
return toJVMCIType(klass, objectTypeConstructor, arrayTypeConstructor, forBasicType, context, meta);
119117
} else if (StaticObject.isNull(unresolved)) {
118+
meta.jvmci.UnresolvedJavaType.safeInitialize();
120119
return (StaticObject) createUnresolved.call(meta.toGuestString(field.getType()));
121120
} else {
122121
assert field.getType().toString().equals(meta.toHostString(meta.jvmci.UnresolvedJavaType_name.getObject(unresolved)));

espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/substitutions/jvmci/Target_com_oracle_truffle_espresso_jvmci_meta_EspressoResolvedJavaMethod.java

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@
5454
import com.oracle.truffle.espresso.jvmci.JVMCIIndyData;
5555
import com.oracle.truffle.espresso.meta.EspressoError;
5656
import com.oracle.truffle.espresso.meta.Meta;
57-
import com.oracle.truffle.espresso.nodes.bytecodes.InitCheck;
5857
import com.oracle.truffle.espresso.runtime.EspressoContext;
5958
import com.oracle.truffle.espresso.runtime.staticobject.StaticObject;
6059
import com.oracle.truffle.espresso.substitutions.EspressoSubstitutions;
@@ -82,8 +81,7 @@ static StaticObject doDefault(StaticObject self,
8281
@Cached("create(context.getMeta().jvmci.EspressoResolvedInstanceType_init.getCallTarget())") DirectCallNode objectTypeConstructor,
8382
@Cached("create(context.getMeta().jvmci.EspressoResolvedArrayType_init.getCallTarget())") DirectCallNode arrayTypeConstructor,
8483
@Cached("create(context.getMeta().jvmci.EspressoResolvedPrimitiveType_forBasicType.getCallTarget())") DirectCallNode forBasicType,
85-
@Cached("create(context.getMeta().jvmci.UnresolvedJavaType_create.getCallTarget())") DirectCallNode createUnresolved,
86-
@Cached InitCheck initCheck) {
84+
@Cached("create(context.getMeta().jvmci.UnresolvedJavaType_create.getCallTarget())") DirectCallNode createUnresolved) {
8785
assert context.getLanguage().isInternalJVMCIEnabled();
8886
Meta meta = context.getMeta();
8987
Method method = (Method) meta.jvmci.HIDDEN_METHOD_MIRROR.getHiddenObject(self);
@@ -98,21 +96,21 @@ static StaticObject doDefault(StaticObject self,
9896
StaticObject guestLocals = meta.jvmci.Local.allocateReferenceArray(locals.length);
9997
StaticObject[] unwrappedGuestLocals = guestLocals.unwrap(meta.getLanguage());
10098
for (int i = 0; i < locals.length; i++) {
101-
unwrappedGuestLocals[i] = toJVMCILocal(locals[i], method.getDeclaringKlass(), localConstructor, objectTypeConstructor, arrayTypeConstructor, forBasicType, createUnresolved,
102-
initCheck, context, meta);
99+
unwrappedGuestLocals[i] = toJVMCILocal(locals[i], method.getDeclaringKlass(), localConstructor, objectTypeConstructor, arrayTypeConstructor, forBasicType, createUnresolved, context,
100+
meta);
103101
}
104102
StaticObject result = meta.jvmci.LocalVariableTable.allocateInstance(context);
105103
localVariableTableConstructor.call(result, guestLocals);
106104
return result;
107105
}
108106

109107
private static StaticObject toJVMCILocal(Local local, ObjectKlass declaringKlass, DirectCallNode localConstructor, DirectCallNode objectTypeConstructor, DirectCallNode arrayTypeConstructor,
110-
DirectCallNode forBasicType, DirectCallNode createUnresolved, InitCheck initCheck, EspressoContext context, Meta meta) {
108+
DirectCallNode forBasicType, DirectCallNode createUnresolved, EspressoContext context, Meta meta) {
111109
StaticObject result = meta.jvmci.Local.allocateInstance(context);
112110
Klass resolvedType = getResolvedType(local, declaringKlass, meta);
113111
StaticObject guestType;
114112
if (resolvedType != null) {
115-
guestType = toJVMCIType(resolvedType, objectTypeConstructor, arrayTypeConstructor, forBasicType, initCheck, context, meta);
113+
guestType = toJVMCIType(resolvedType, objectTypeConstructor, arrayTypeConstructor, forBasicType, context, meta);
116114
} else {
117115
guestType = toJVMCIUnresolvedType(local.getTypeOrDesc(), createUnresolved, meta);
118116
}

0 commit comments

Comments
 (0)