Skip to content

Commit 4af6eab

Browse files
committed
Make bytecode node compilation final
1 parent 586741f commit 4af6eab

File tree

1 file changed

+9
-17
lines changed

1 file changed

+9
-17
lines changed

truffle/src/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/bytecode/generator/BytecodeDSLNodeFactory.java

Lines changed: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ public CodeTypeElement create() {
221221
this.abstractBytecodeNode = bytecodeNodeGen.add(new AbstractBytecodeNodeFactory().create());
222222

223223
CodeVariableElement bytecodeNode = new CodeVariableElement(Set.of(PRIVATE, VOLATILE), abstractBytecodeNode.asType(), "bytecode");
224-
bytecodeNodeGen.add(bytecodeNode);
224+
bytecodeNodeGen.add(compFinal(bytecodeNode));
225225
bytecodeNodeGen.add(new CodeVariableElement(Set.of(PRIVATE, FINAL), bytecodeNodesImpl.asType(), "nodes"));
226226
bytecodeNodeGen.add(new CodeVariableElement(Set.of(PRIVATE, FINAL), context.getType(int.class), "numLocals"));
227227
bytecodeNodeGen.add(new CodeVariableElement(Set.of(PRIVATE, FINAL), context.getType(int.class), "numNodes"));
@@ -830,7 +830,7 @@ private CodeExecutableElement createContinueAt() {
830830
b.statement("break");
831831
b.end().startElseBlock();
832832
b.lineComment("Bytecode or tier changed");
833-
b.tree(createTransferToInterpreterAndInvalidate("this"));
833+
b.tree(GeneratorUtils.createTransferToInterpreterAndInvalidate());
834834
b.statement("bc = this.bytecode");
835835
b.end();
836836
b.end();
@@ -1258,6 +1258,7 @@ private CodeExecutableElement createGetBytecodeNode() {
12581258
private CodeExecutableElement createTransitionToCached() {
12591259
CodeExecutableElement ex = new CodeExecutableElement(Set.of(PRIVATE), context.getType(void.class), "transitionToCached");
12601260
CodeTreeBuilder b = ex.createBuilder();
1261+
b.tree(GeneratorUtils.createTransferToInterpreterAndInvalidate());
12611262
b.declaration(abstractBytecodeNode.asType(), "oldBytecode");
12621263
b.declaration(abstractBytecodeNode.asType(), "newBytecode");
12631264
b.startDoBlock();
@@ -1275,6 +1276,7 @@ private CodeExecutableElement createAddSource() {
12751276
CodeExecutableElement ex = new CodeExecutableElement(Set.of(PRIVATE), context.getType(void.class), "addSource");
12761277
ex.addParameter(new CodeVariableElement(arrayOf(type(int.class)), "sourceInfo"));
12771278
CodeTreeBuilder b = ex.createBuilder();
1279+
b.tree(GeneratorUtils.createTransferToInterpreterAndInvalidate());
12781280
b.declaration(abstractBytecodeNode.asType(), "oldBytecode");
12791281
b.declaration(abstractBytecodeNode.asType(), "newBytecode");
12801282
b.startDoBlock();
@@ -5417,7 +5419,7 @@ private List<CodeExecutableElement> createContinueAt() {
54175419
case BRANCH_BACKWARD:
54185420
if (tier.isUncached()) {
54195421
b.startIf().string("--uncachedExecuteCount <= 0").end().startBlock();
5420-
b.tree(createTransferToInterpreterAndInvalidate("$root"));
5422+
b.tree(GeneratorUtils.createTransferToInterpreterAndInvalidate());
54215423
b.statement("$root.transitionToCached()");
54225424
b.statement("return (sp << 16) | " + readBc("bci + 1"));
54235425
b.end();
@@ -5550,7 +5552,7 @@ private List<CodeExecutableElement> createContinueAt() {
55505552
b.end(); // set frame
55515553
b.end(); // statement
55525554
b.end().startCatchBlock(types.UnexpectedResultException, "e"); // try
5553-
b.tree(createTransferToInterpreterAndInvalidate("$root"));
5555+
b.tree(GeneratorUtils.createTransferToInterpreterAndInvalidate());
55545556
emitQuickening(b, "this", "bc", "bci", null,
55555557
b.create().tree(createInstructionConstant(instr.getQuickeningRoot())).build());
55565558
b.startStatement();
@@ -5892,7 +5894,7 @@ private List<CodeExecutableElement> createContinueAt() {
58925894
b.statement("ex = ate");
58935895
b.end().startCatchBlock(throwable, "e");
58945896
b.startTryBlock();
5895-
b.tree(createTransferToInterpreterAndInvalidate("$root"));
5897+
b.tree(GeneratorUtils.createTransferToInterpreterAndInvalidate());
58965898
b.startThrow().string("sneakyThrow(");
58975899
if (model.interceptInternalException != null) {
58985900
b.startCall("$root", model.interceptInternalException).string("e").string("bci").end();
@@ -5911,7 +5913,7 @@ private List<CodeExecutableElement> createContinueAt() {
59115913
// @formatter:off
59125914
b.startElseBlock();
59135915
b.startTryBlock();
5914-
b.tree(createTransferToInterpreterAndInvalidate("$root"));
5916+
b.tree(GeneratorUtils.createTransferToInterpreterAndInvalidate());
59155917
if (model.interceptInternalException != null) {
59165918
if (model.interceptControlFlowException == null) {
59175919
// If there was no handler, we need to ensure throwable is not a ControlFlowException
@@ -7067,7 +7069,7 @@ private static void emitReturnTopOfStack(CodeTreeBuilder b) {
70677069
private void emitBeforeReturnProfiling(CodeTreeBuilder b) {
70687070
if (tier.isUncached()) {
70697071
b.startIf().string("--uncachedExecuteCount <= 0").end().startBlock();
7070-
b.tree(createTransferToInterpreterAndInvalidate("$this"));
7072+
b.tree(GeneratorUtils.createTransferToInterpreterAndInvalidate());
70717073
b.statement("this.getRoot().transitionToCached()");
70727074
b.end().startElseBlock();
70737075
b.statement("this.uncachedExecuteCount_ = uncachedExecuteCount");
@@ -7449,16 +7451,6 @@ private CodeVariableElement compFinal(int dims, CodeVariableElement fld) {
74497451
return fld;
74507452
}
74517453

7452-
private CodeTree createTransferToInterpreterAndInvalidate(String root) {
7453-
if (model.templateType.getSimpleName().toString().equals("BoxingOperations")) {
7454-
CodeTreeBuilder b = CodeTreeBuilder.createBuilder();
7455-
b.statement(root + ".transferToInterpreterAndInvalidate()");
7456-
return b.build();
7457-
} else {
7458-
return GeneratorUtils.createTransferToInterpreterAndInvalidate();
7459-
}
7460-
}
7461-
74627454
private void emitFence(CodeTreeBuilder b) {
74637455
b.startStatement().startStaticCall(context.getType(VarHandle.class), "storeStoreFence").end(2);
74647456
}

0 commit comments

Comments
 (0)