Skip to content

Commit e9d8032

Browse files
authored
Various code improvements (#225)
2 parents f97f168 + b37e33c commit e9d8032

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+118
-106
lines changed

.gitlab-ci.yml

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,12 @@ variables:
2525
mx sforceimport
2626
mx --env libgraal build
2727

28+
ensure_labsjdk: &ENSURE_LABSJDK_AND_GRAAL_VERSION |
29+
./som --setup labsjdk
30+
mx sforceimport
31+
rm libs/jvmci || true
32+
./som --setup labsjdk
33+
2834
before_script:
2935
- (cd core-lib && git remote add smarr https://github.com/smarr/SOM.git || true; git fetch --all)
3036
- git submodule update --init
@@ -52,10 +58,8 @@ test:
5258
stage: build-and-test
5359
tags: [yuria4]
5460
script:
55-
- ./som --setup labsjdk
56-
- mx sforceimport
57-
- rm libs/jvmci || true
58-
- ./som --setup labsjdk
61+
- *ENSURE_LABSJDK_AND_GRAAL_VERSION
62+
5963
- mx build
6064
- mx tests-junit
6165
- mx tests-som
@@ -73,10 +77,8 @@ build:native-interp-ast:
7377
stage: build-and-test
7478
tags: [yuria2]
7579
script:
76-
- ./som --setup labsjdk
77-
- mx sforceimport
78-
- rm libs/jvmci || true
79-
- ./som --setup labsjdk
80+
- *ENSURE_LABSJDK_AND_GRAAL_VERSION
81+
8082
- mx build
8183
- mx build-native --no-jit -t AST -bn
8284
- ./som-native-interp-ast -cp Smalltalk TestSuite/TestHarness.som
@@ -98,10 +100,8 @@ build:native-interp-bc:
98100
stage: build-and-test
99101
tags: [yuria3]
100102
script:
101-
- ./som --setup labsjdk
102-
- mx sforceimport
103-
- rm libs/jvmci || true
104-
- ./som --setup labsjdk
103+
- *ENSURE_LABSJDK_AND_GRAAL_VERSION
104+
105105
- mx build
106106
- mx build-native --no-jit -t BC -bn
107107
- ./som-native-interp-bc -cp Smalltalk TestSuite/TestHarness.som
@@ -125,10 +125,7 @@ build:aarch64-test-and-rebench:
125125
- pmset -g live
126126
- pmset -g systemstate
127127

128-
- ./som --setup labsjdk
129-
- mx sforceimport
130-
- rm libs/jvmci || true
131-
- ./som --setup labsjdk
128+
- *ENSURE_LABSJDK_AND_GRAAL_VERSION
132129

133130
- mx build
134131
- mx --env libgraal build

mx.trufflesom/suite.py

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -79,13 +79,11 @@
7979
"exports": [
8080
"trufflesom.* to org.graalvm.truffle",
8181
],
82-
"requires": ["jdk.unsupported"], # sun.misc.Unsafe
83-
"requiresConcealed": {
84-
"org.graalvm.truffle": [
85-
"com.oracle.truffle.api",
86-
"com.oracle.truffle.api.instrumentation",
87-
],
88-
},
82+
"requires": [
83+
"jdk.unsupported",
84+
"org.graalvm.collections",
85+
"org.graalvm.polyglot",
86+
],
8987
},
9088
"dependencies": ["trufflesom"],
9189
"distDependencies": [

som

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,10 @@ TWEAK_INLINING = ['-Dpolyglot.engine.CompilationThreshold=191',
304304
'-Dpolyglot.engine.InliningMaxCallerSize=10000',
305305
'-Dpolyglot.engine.SplittingMaxCalleeSize=100000']
306306

307-
JAVA_ARGS = ['-server', '-XX:+UseParallelGC']
307+
JAVA_ARGS = [
308+
'-server', '-XX:+UseParallelGC',
309+
'--enable-native-access=org.graalvm.truffle'
310+
]
308311

309312
##
310313
## Processing Parameters and Assembling Command Line

src/trufflesom/src/trufflesom/interpreter/nodes/ContextualNode.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@
2121
*/
2222
package trufflesom.interpreter.nodes;
2323

24+
import com.oracle.truffle.api.CompilerAsserts;
25+
import com.oracle.truffle.api.CompilerDirectives;
26+
import com.oracle.truffle.api.HostCompilerDirectives.InliningCutoff;
2427
import com.oracle.truffle.api.frame.MaterializedFrame;
2528
import com.oracle.truffle.api.frame.VirtualFrame;
2629
import com.oracle.truffle.api.nodes.ExplodeLoop;
@@ -47,8 +50,16 @@ public final boolean accessesOuterContext() {
4750
return contextLevel > 0;
4851
}
4952

50-
@ExplodeLoop
5153
protected final MaterializedFrame determineContext(final VirtualFrame frame) {
54+
return determineContext(frame, contextLevel);
55+
}
56+
57+
@ExplodeLoop
58+
@InliningCutoff
59+
public static final MaterializedFrame determineContext(final VirtualFrame frame,
60+
final int contextLevel) {
61+
CompilerAsserts.partialEvaluationConstant(contextLevel);
62+
5263
SBlock self = (SBlock) frame.getArguments()[0];
5364
int i = contextLevel - 1;
5465

src/trufflesom/src/trufflesom/interpreter/nodes/bc/BytecodeLoopNode.java

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@
8080
import static trufflesom.interpreter.bc.Bytecodes.SUPER_SEND;
8181
import static trufflesom.interpreter.bc.Bytecodes.getBytecodeLength;
8282
import static trufflesom.interpreter.bc.Bytecodes.getBytecodeName;
83+
import static trufflesom.interpreter.nodes.ContextualNode.determineContext;
8384

8485
import java.util.ArrayList;
8586
import java.util.Arrays;
@@ -233,23 +234,6 @@ private static VirtualFrame determineOuterContext(final VirtualFrame frame) {
233234
}
234235
}
235236

236-
@ExplodeLoop
237-
@InliningCutoff
238-
private static MaterializedFrame determineContext(final VirtualFrame frame,
239-
final int contextLevel) {
240-
SBlock self = (SBlock) frame.getArguments()[0];
241-
int i = contextLevel - 1;
242-
243-
while (i > 0) {
244-
self = (SBlock) self.getOuterSelf();
245-
i--;
246-
}
247-
248-
// Graal needs help here to see that this is always a MaterializedFrame
249-
// so, we record explicitly a class profile
250-
return frameType.profile(self.getContext());
251-
}
252-
253237
@InliningCutoff
254238
private AbstractReadFieldNode createRead(final int bytecodeIndex, final int fieldIndex) {
255239
CompilerDirectives.transferToInterpreterAndInvalidate();
Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package trufflesom.interpreter.nodes.nary;
22

33
import com.oracle.truffle.api.CompilerDirectives;
4+
import com.oracle.truffle.api.dsl.Bind;
45
import com.oracle.truffle.api.dsl.Fallback;
56
import com.oracle.truffle.api.frame.VirtualFrame;
67

8+
import com.oracle.truffle.api.nodes.Node;
79
import trufflesom.vmobjects.SSymbol;
810

911

@@ -12,10 +14,11 @@ public abstract class BinaryMsgExprNode extends BinaryExpressionNode {
1214
public abstract SSymbol getSelector();
1315

1416
@Fallback
15-
public final Object makeGenericSend(final VirtualFrame frame,
16-
final Object receiver, final Object argument) {
17+
public static final Object makeGenericSend(final VirtualFrame frame,
18+
final Object receiver, final Object argument, @Bind Node s) {
1719
CompilerDirectives.transferToInterpreterAndInvalidate();
18-
return makeGenericSend(getSelector()).doPreEvaluated(frame,
20+
BinaryMsgExprNode self = (BinaryMsgExprNode) s;
21+
return self.makeGenericSend(self.getSelector()).doPreEvaluated(frame,
1922
new Object[] {receiver, argument});
2023
}
2124
}
Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,24 @@
11
package trufflesom.interpreter.nodes.nary;
22

33
import com.oracle.truffle.api.CompilerDirectives;
4+
import com.oracle.truffle.api.dsl.Bind;
45
import com.oracle.truffle.api.dsl.Fallback;
56
import com.oracle.truffle.api.frame.VirtualFrame;
67

8+
import com.oracle.truffle.api.nodes.Node;
79
import trufflesom.vmobjects.SSymbol;
810

911

1012
public abstract class QuaternaryMsgExprNode extends QuaternaryExpressionNode {
1113
public abstract SSymbol getSelector();
1214

1315
@Fallback
14-
public final Object makeGenericSend(final VirtualFrame frame,
15-
final Object receiver, final Object arg1, final Object arg2, final Object arg3) {
16+
public static final Object makeGenericSend(final VirtualFrame frame,
17+
final Object receiver, final Object arg1, final Object arg2, final Object arg3,
18+
@Bind Node s) {
1619
CompilerDirectives.transferToInterpreterAndInvalidate();
17-
return makeGenericSend(getSelector()).doPreEvaluated(frame,
20+
QuaternaryMsgExprNode self = (QuaternaryMsgExprNode) s;
21+
return self.makeGenericSend(self.getSelector()).doPreEvaluated(frame,
1822
new Object[] {receiver, arg1, arg2, arg3});
1923
}
2024
}
Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package trufflesom.interpreter.nodes.nary;
22

33
import com.oracle.truffle.api.CompilerDirectives;
4+
import com.oracle.truffle.api.dsl.Bind;
45
import com.oracle.truffle.api.dsl.Fallback;
56
import com.oracle.truffle.api.frame.VirtualFrame;
67

8+
import com.oracle.truffle.api.nodes.Node;
79
import trufflesom.vmobjects.SSymbol;
810

911

@@ -12,10 +14,11 @@ public abstract class TernaryMsgExprNode extends TernaryExpressionNode {
1214
public abstract SSymbol getSelector();
1315

1416
@Fallback
15-
public final Object makeGenericSend(final VirtualFrame frame,
16-
final Object receiver, final Object arg1, final Object arg2) {
17+
public static final Object makeGenericSend(final VirtualFrame frame,
18+
final Object receiver, final Object arg1, final Object arg2, @Bind Node s) {
1719
CompilerDirectives.transferToInterpreterAndInvalidate();
18-
return makeGenericSend(getSelector()).doPreEvaluated(frame,
20+
TernaryMsgExprNode self = (TernaryMsgExprNode) s;
21+
return self.makeGenericSend(self.getSelector()).doPreEvaluated(frame,
1922
new Object[] {receiver, arg1, arg2});
2023
}
2124
}
Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,23 @@
11
package trufflesom.interpreter.nodes.nary;
22

33
import com.oracle.truffle.api.CompilerDirectives;
4+
import com.oracle.truffle.api.dsl.Bind;
45
import com.oracle.truffle.api.dsl.Fallback;
56
import com.oracle.truffle.api.frame.VirtualFrame;
67

8+
import com.oracle.truffle.api.nodes.Node;
79
import trufflesom.vmobjects.SSymbol;
810

911

1012
public abstract class UnaryMsgExprNode extends UnaryExpressionNode {
1113
public abstract SSymbol getSelector();
1214

1315
@Fallback
14-
public final Object makeGenericSend(final VirtualFrame frame, final Object receiver) {
16+
public static final Object makeGenericSend(final VirtualFrame frame, final Object receiver,
17+
@Bind Node s) {
1518
CompilerDirectives.transferToInterpreterAndInvalidate();
16-
return makeGenericSend(getSelector()).doPreEvaluated(frame, new Object[] {receiver});
19+
UnaryMsgExprNode self = (UnaryMsgExprNode) s;
20+
return self.makeGenericSend(self.getSelector()).doPreEvaluated(frame,
21+
new Object[] {receiver});
1722
}
1823
}

src/trufflesom/src/trufflesom/interpreter/nodes/specialized/AndBoolMessageNode.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public static final boolean doAnd(final boolean receiver, final boolean argument
1616
}
1717

1818
@Override
19-
public SSymbol getSelector() {
19+
public final SSymbol getSelector() {
2020
if (getSourceChar(0) == '&') {
2121
return SymbolTable.symbolFor("&&");
2222
}

src/trufflesom/src/trufflesom/interpreter/nodes/specialized/AndMessageNode.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ public final boolean doAnd(final boolean receiver, final SBlock argument) {
8484
}
8585

8686
@Override
87-
public SSymbol getSelector() {
87+
public final SSymbol getSelector() {
8888
if (getSourceChar(0) == '&') {
8989
return SymbolTable.symbolFor("&&");
9090
}

src/trufflesom/src/trufflesom/interpreter/nodes/specialized/IfMessageNode.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public IfTrueMessageNode() {
3131
}
3232

3333
@Override
34-
public SSymbol getSelector() {
34+
public final SSymbol getSelector() {
3535
return SymbolTable.symbolFor("ifTrue:");
3636
}
3737
}
@@ -44,7 +44,7 @@ public IfFalseMessageNode() {
4444
}
4545

4646
@Override
47-
public SSymbol getSelector() {
47+
public final SSymbol getSelector() {
4848
return SymbolTable.symbolFor("ifFalse:");
4949
}
5050
}
@@ -66,7 +66,7 @@ public final Object cachedBlock(final boolean rcvr, final SBlock arg,
6666
@SuppressWarnings("unused") @Cached("arg.getMethod()") final SInvokable method,
6767
@Cached("create(method.getCallTarget())") final DirectCallNode callTarget,
6868
@Shared("all") @Cached final InlinedCountingConditionProfile condProf,
69-
@Bind("this") final Node node) {
69+
@Bind final Node node) {
7070
if (condProf.profile(node, rcvr == expected)) {
7171
return callTarget.call(new Object[] {arg});
7272
} else {
@@ -78,7 +78,7 @@ public final Object cachedBlock(final boolean rcvr, final SBlock arg,
7878
public final Object fallback(final boolean rcvr, final SBlock arg,
7979
@Cached final IndirectCallNode callNode,
8080
@Shared("all") @Cached final InlinedCountingConditionProfile condProf,
81-
@Bind("this") final Node node) {
81+
@Bind final Node node) {
8282
if (condProf.profile(node, rcvr == expected)) {
8383
return callNode.call(arg.getMethod().getCallTarget(), new Object[] {arg});
8484
} else {
@@ -91,10 +91,10 @@ protected static final boolean notABlock(final Object arg) {
9191
}
9292

9393
@Specialization(guards = {"notABlock(arg)"})
94-
public final Object literal(final boolean rcvr, final Object arg,
94+
public static final Object literal(final boolean rcvr, final Object arg,
9595
@Shared("all") @Cached final InlinedCountingConditionProfile condProf,
96-
@Bind("this") final Node node) {
97-
if (condProf.profile(node, rcvr == expected)) {
96+
@Bind final Node node) {
97+
if (condProf.profile(node, rcvr == ((IfMessageNode) node).expected)) {
9898
return arg;
9999
} else {
100100
return Nil.nilObject;

0 commit comments

Comments
 (0)