Skip to content

Commit 7a64ba9

Browse files
[GR-54923] Improve partial evaluation in espresso.
PullRequest: graal/18061
2 parents bf6df1d + 6c71e4f commit 7a64ba9

File tree

15 files changed

+955
-174
lines changed

15 files changed

+955
-174
lines changed

espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/bytecode/Bytecodes.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,9 @@ public final class Bytecodes {
259259
// Espresso quickened bytecodes.
260260
public static final int QUICK = 203; // 0xCB
261261
public static final int SLIM_QUICK = 204; // 0xCC
262+
// Espresso special bytecodes.
263+
public static final int RETURN_VALUE = 205; // 0xCD
264+
public static final int THROW_VALUE = 206; // 0xCE
262265

263266
public static final int ILLEGAL = 255;
264267
public static final int END = 256;

espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/classfile/constantpool/MemberRefConstant.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424

2525
import java.nio.ByteBuffer;
2626

27+
import com.oracle.truffle.api.CompilerAsserts;
2728
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
2829
import com.oracle.truffle.espresso.classfile.ConstantPool;
2930
import com.oracle.truffle.espresso.classfile.RuntimeConstantPool;
@@ -170,6 +171,7 @@ static boolean checkAccess(ObjectKlass accessingKlass, Klass resolvedKlass, Memb
170171
}
171172

172173
if (accessingKlass.getHostClass() != null) {
174+
CompilerAsserts.partialEvaluationConstant(accessingKlass);
173175
return checkAccess(accessingKlass.getHostClass(), resolvedKlass, member);
174176
}
175177
return false;

espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/impl/Klass.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1447,6 +1447,7 @@ public final Field lookupField(Symbol<Name> fieldName, Symbol<Type> fieldType, L
14471447
}
14481448
}
14491449

1450+
CompilerAsserts.partialEvaluationConstant(this);
14501451
if (getSuperKlass() != null) {
14511452
return getSuperKlass().lookupField(fieldName, fieldType, mode);
14521453
}

espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/impl/ObjectKlass.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1063,7 +1063,7 @@ public Method itableLookup(Klass interfKlass, int methodIndex) {
10631063
assert methodIndex >= 0 : "Undeclared interface method";
10641064
int itableIndex = fastLookup(interfKlass, getiKlassTable());
10651065
if (itableIndex < 0) {
1066-
Meta meta = getMeta();
1066+
Meta meta = interfKlass.getMeta();
10671067
throw meta.throwExceptionWithMessage(meta.java_lang_IncompatibleClassChangeError, "Class %s does not implement interface %s", getName(), interfKlass.getName());
10681068
}
10691069
return getItable()[itableIndex][methodIndex].getMethod();
@@ -1200,6 +1200,7 @@ public Method lookupMethod(Symbol<Name> methodName, Symbol<Signature> signature,
12001200
method = lookupPolysigMethod(methodName, signature, lookupMode);
12011201
}
12021202
if (method == null && getSuperKlass() != null) {
1203+
CompilerAsserts.partialEvaluationConstant(this);
12031204
method = getSuperKlass().lookupMethod(methodName, signature, lookupMode);
12041205
}
12051206
return method;

espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/jni/JniEnv.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -441,6 +441,7 @@ public long sizeMax() {
441441
* @throws OutOfMemoryError: if the system runs out of memory.
442442
*/
443443
@JniImpl
444+
@TruffleBoundary
444445
public @Handle(Field.class) long GetFieldID(@JavaType(Class.class) StaticObject clazz, @Pointer TruffleObject namePtr, @Pointer TruffleObject typePtr) {
445446
String name = NativeUtils.interopPointerToString(namePtr);
446447
String type = NativeUtils.interopPointerToString(typePtr);
@@ -485,6 +486,7 @@ public long sizeMax() {
485486
* @throws OutOfMemoryError if the system runs out of memory.
486487
*/
487488
@JniImpl
489+
@TruffleBoundary
488490
public @Handle(Field.class) long GetStaticFieldID(@JavaType(Class.class) StaticObject clazz, @Pointer TruffleObject namePtr, @Pointer TruffleObject typePtr) {
489491
String name = NativeUtils.interopPointerToString(namePtr);
490492
String type = NativeUtils.interopPointerToString(typePtr);
@@ -529,6 +531,7 @@ public long sizeMax() {
529531
* @throws OutOfMemoryError if the system runs out of memory.
530532
*/
531533
@JniImpl
534+
@TruffleBoundary
532535
public @Handle(Method.class) long GetMethodID(@JavaType(Class.class) StaticObject clazz, @Pointer TruffleObject namePtr, @Pointer TruffleObject signaturePtr) {
533536
String name = NativeUtils.interopPointerToString(namePtr);
534537
String signature = NativeUtils.interopPointerToString(signaturePtr);
@@ -569,6 +572,7 @@ public long sizeMax() {
569572
* @throws OutOfMemoryError if the system runs out of memory.
570573
*/
571574
@JniImpl
575+
@TruffleBoundary
572576
public @Handle(Method.class) long GetStaticMethodID(@JavaType(Class.class) StaticObject clazz, @Pointer TruffleObject namePtr, @Pointer TruffleObject signaturePtr) {
573577
String name = NativeUtils.interopPointerToString(namePtr);
574578
String signature = NativeUtils.interopPointerToString(signaturePtr);

espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/nodes/BytecodeNode.java

Lines changed: 105 additions & 34 deletions
Large diffs are not rendered by default.

espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/nodes/ContinuableMethodWithBytecode.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,4 +116,9 @@ static boolean isLastRecord(HostFrameRecord records) {
116116
return records == null;
117117
}
118118
}
119+
120+
@Override
121+
public String toString() {
122+
return super.toString() + "-Cont@" + bci;
123+
}
119124
}

espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/nodes/EspressoFrame.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,8 @@ private EspressoFrame() {
5858
private static final int VALUES_START = 1;
5959

6060
public static FrameDescriptor createFrameDescriptor(int locals, int stack) {
61-
int slotCount = locals + stack;
61+
// at least one stack slot for the return / exception value
62+
int slotCount = locals + Math.max(stack, 1);
6263
FrameDescriptor.Builder builder = FrameDescriptor.newBuilder(slotCount + VALUES_START);
6364
int bciSlot = builder.addSlot(FrameSlotKind.Static, null, null); // BCI
6465
assert bciSlot == BCI_SLOT;

espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/nodes/EspressoInstrumentableRootNode.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,4 +54,7 @@ public abstract class EspressoInstrumentableRootNode extends EspressoInstrumenta
5454
public WrapperNode createWrapper(ProbeNode probeNode) {
5555
return new EspressoInstrumentableRootNodeWrapper(this, probeNode);
5656
}
57+
58+
@Override
59+
public abstract String toString();
5760
}

espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/nodes/EspressoInstrumentableRootNodeImpl.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,4 +96,9 @@ public boolean hasTag(Class<? extends Tag> tag) {
9696
}
9797
return false;
9898
}
99+
100+
@Override
101+
public String toString() {
102+
return methodVersion.getDeclaringKlass().getType() + "." + methodVersion.getName() + methodVersion.getRawSignature();
103+
}
99104
}

0 commit comments

Comments
 (0)