Skip to content

Commit 9270244

Browse files
committed
[GR-50900] Update to latest graal and workaround ECJ bugs
PullRequest: truffleruby/4136
2 parents 586f84b + 08ffe94 commit 9270244

File tree

16 files changed

+48
-100
lines changed

16 files changed

+48
-100
lines changed

ci/common.jsonnet

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,8 @@ local common_json = import "../common.json";
116116
"linux-jdk19": { packages+: { "devkit:gcc11.2.0-OL6.4+1": "==0" }},
117117
"linux-jdk20": { packages+: { "devkit:gcc11.2.0-OL6.4+1": "==0" }},
118118
"linux-jdk21": { packages+: { "devkit:gcc11.2.0-OL6.4+1": "==0" }},
119+
"linux-jdk-latest": { packages+: { "devkit:gcc11.2.0-OL6.4+1": "==0" }},
120+
"linux-jdkLatest": self["linux-jdk-latest"],
119121
},
120122

121123
# Dependencies

common.json

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"Jsonnet files should not include this file directly but use ci/common.jsonnet instead."
55
],
66

7-
"mx_version": "7.6.1",
7+
"mx_version": "7.7.3",
88

99
"COMMENT.jdks": "When adding or removing JDKs keep in sync with JDKs in ci/common.jsonnet",
1010
"jdks": {
@@ -44,13 +44,13 @@
4444
"labsjdk-ee-21Debug": {"name": "labsjdk", "version": "ee-21.0.1+11-jvmci-23.1-b26-debug", "platformspecific": true },
4545
"labsjdk-ee-21-llvm": {"name": "labsjdk", "version": "ee-21.0.1+11-jvmci-23.1-b26-sulong", "platformspecific": true },
4646

47-
"oraclejdk-latest": {"name": "jpg-jdk", "version": "23", "build_id": "5", "release": true, "platformspecific": true, "extrabundles": ["static-libs"]},
48-
"labsjdk-ce-latest": {"name": "labsjdk", "version": "ce-23+5-jvmci-b01", "platformspecific": true },
49-
"labsjdk-ce-latestDebug": {"name": "labsjdk", "version": "ce-23+5-jvmci-b01-debug", "platformspecific": true },
50-
"labsjdk-ce-latest-llvm": {"name": "labsjdk", "version": "ce-23+5-jvmci-b01-sulong", "platformspecific": true },
51-
"labsjdk-ee-latest": {"name": "labsjdk", "version": "ee-23+5-jvmci-b01", "platformspecific": true },
52-
"labsjdk-ee-latestDebug": {"name": "labsjdk", "version": "ee-23+5-jvmci-b01-debug", "platformspecific": true },
53-
"labsjdk-ee-latest-llvm": {"name": "labsjdk", "version": "ee-23+5-jvmci-b01-sulong", "platformspecific": true }
47+
"oraclejdk-latest": {"name": "jpg-jdk", "version": "23", "build_id": "6", "release": true, "platformspecific": true, "extrabundles": ["static-libs"]},
48+
"labsjdk-ce-latest": {"name": "labsjdk", "version": "ce-23+6-jvmci-b01", "platformspecific": true },
49+
"labsjdk-ce-latestDebug": {"name": "labsjdk", "version": "ce-23+6-jvmci-b01-debug", "platformspecific": true },
50+
"labsjdk-ce-latest-llvm": {"name": "labsjdk", "version": "ce-23+6-jvmci-b01-sulong", "platformspecific": true },
51+
"labsjdk-ee-latest": {"name": "labsjdk", "version": "ee-23+6-jvmci-b01", "platformspecific": true },
52+
"labsjdk-ee-latestDebug": {"name": "labsjdk", "version": "ee-23+6-jvmci-b01-debug", "platformspecific": true },
53+
"labsjdk-ee-latest-llvm": {"name": "labsjdk", "version": "ee-23+6-jvmci-b01-sulong", "platformspecific": true }
5454
},
5555

5656
"eclipse": {

mx.truffleruby/suite.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
{
2121
"name": "regex",
2222
"subdir": True,
23-
"version": "810578a31376cdc3574096fe267d957bb16039aa",
23+
"version": "3892951c221d9bed7680b7a9c084c289faf9ff99",
2424
"urls": [
2525
{"url": "https://github.com/oracle/graal.git", "kind": "git"},
2626
{"url": "https://curio.ssw.jku.at/nexus/content/repositories/snapshots", "kind": "binary"},
@@ -29,7 +29,7 @@
2929
{
3030
"name": "sulong",
3131
"subdir": True,
32-
"version": "810578a31376cdc3574096fe267d957bb16039aa",
32+
"version": "3892951c221d9bed7680b7a9c084c289faf9ff99",
3333
"urls": [
3434
{"url": "https://github.com/oracle/graal.git", "kind": "git"},
3535
{"url": "https://curio.ssw.jku.at/nexus/content/repositories/snapshots", "kind": "binary"},

src/main/java/org/truffleruby/core/array/ArrayNodes.java

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@
4545
import org.truffleruby.core.array.ArrayEachIteratorNode.ArrayElementConsumerNode;
4646
import org.truffleruby.core.array.ArrayIndexNodes.ReadNormalizedNode;
4747
import org.truffleruby.core.array.ArrayIndexNodes.ReadSliceNormalizedNode;
48-
import org.truffleruby.core.array.ArrayNodesFactory.ReplaceNodeFactory;
4948
import org.truffleruby.core.array.library.ArrayStoreLibrary;
5049
import org.truffleruby.core.array.library.NativeArrayStorage;
5150
import org.truffleruby.core.array.library.SharedArrayStorage;
@@ -64,7 +63,6 @@
6463
import org.truffleruby.core.kernel.KernelNodes;
6564
import org.truffleruby.core.kernel.KernelNodes.SameOrEqlNode;
6665
import org.truffleruby.core.kernel.KernelNodes.SameOrEqualNode;
67-
import org.truffleruby.core.kernel.KernelNodesFactory;
6866
import org.truffleruby.core.klass.RubyClass;
6967
import org.truffleruby.core.numeric.FixnumLowerNode;
7068
import org.truffleruby.core.proc.RubyProc;
@@ -1103,7 +1101,6 @@ static boolean include(RubyArray array, Object value,
11031101
public abstract static class InitializeNode extends CoreMethodArrayArgumentsNode {
11041102

11051103
@Child private DispatchNode toAryNode;
1106-
@Child private KernelNodes.RespondToNode respondToToAryNode;
11071104

11081105
protected abstract RubyArray executeInitialize(RubyArray array, Object size, Object fillingValue,
11091106
Object block);
@@ -1244,9 +1241,10 @@ RubyArray initializeFromArray(RubyArray array, RubyArray copy, NotProvided unuse
12441241
@Specialization(
12451242
guards = { "!isImplicitLong(object)", "wasProvided(object)", "!isRubyArray(object)" })
12461243
RubyArray initialize(RubyArray array, Object object, NotProvided unusedValue, Nil block,
1244+
@Cached KernelNodes.RespondToNode respondToNode,
12471245
@Cached @Shared ToIntNode toIntNode) {
12481246
RubyArray copy = null;
1249-
if (respondToToAry(object)) {
1247+
if (respondToNode.executeDoesRespondTo(object, coreSymbols().TO_ARY, true)) {
12501248
Object toAryResult = callToAry(object);
12511249
if (toAryResult instanceof RubyArray) {
12521250
copy = (RubyArray) toAryResult;
@@ -1261,14 +1259,6 @@ RubyArray initialize(RubyArray array, Object object, NotProvided unusedValue, Ni
12611259
}
12621260
}
12631261

1264-
public boolean respondToToAry(Object object) {
1265-
if (respondToToAryNode == null) {
1266-
CompilerDirectives.transferToInterpreterAndInvalidate();
1267-
respondToToAryNode = insert(KernelNodesFactory.RespondToNodeFactory.create());
1268-
}
1269-
return respondToToAryNode.executeDoesRespondTo(object, coreSymbols().TO_ARY, true);
1270-
}
1271-
12721262
protected Object callToAry(Object object) {
12731263
if (toAryNode == null) {
12741264
CompilerDirectives.transferToInterpreterAndInvalidate();
@@ -1786,7 +1776,7 @@ public abstract static class ReplaceNode extends CoreMethodNode {
17861776

17871777
@NeverDefault
17881778
public static ReplaceNode create() {
1789-
return ReplaceNodeFactory.create(null, null);
1779+
return ArrayNodesFactory.ReplaceNodeFactory.create(null, null);
17901780
}
17911781

17921782
public abstract RubyArray executeReplace(RubyArray array, RubyArray other);

src/main/java/org/truffleruby/core/basicobject/BasicObjectNodes.java

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
import org.truffleruby.annotations.Split;
2727
import org.truffleruby.builtins.CoreMethodArrayArgumentsNode;
2828
import org.truffleruby.builtins.CoreMethodNode;
29-
import org.truffleruby.core.basicobject.BasicObjectNodesFactory.InstanceExecNodeFactory;
3029
import org.truffleruby.core.cast.BooleanCastNode;
3130
import org.truffleruby.core.cast.NameToJavaStringNode;
3231
import org.truffleruby.core.cast.ToIntNode;
@@ -385,14 +384,8 @@ private static LexicalScope prependReceiverClassToScope(LexicalScope callerLexic
385384
@CoreMethod(names = "instance_exec", needsBlock = true, rest = true)
386385
public abstract static class InstanceExecNode extends CoreMethodArrayArgumentsNode {
387386

388-
public static InstanceExecNode create() {
389-
return InstanceExecNodeFactory.create(null);
390-
}
391-
392387
@Child private CallBlockNode callBlockNode = CallBlockNode.create();
393388

394-
abstract Object executeInstanceExec(VirtualFrame frame, Object self, Object[] args, RubyProc block);
395-
396389
@Specialization
397390
Object instanceExec(VirtualFrame frame, Object receiver, Object[] arguments, RubyProc block) {
398391
final DeclarationContext declarationContext = new DeclarationContext(

src/main/java/org/truffleruby/core/binding/BindingNodes.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@
5555
import com.oracle.truffle.api.frame.VirtualFrame;
5656
import com.oracle.truffle.api.source.SourceSection;
5757
import org.truffleruby.language.locals.WriteFrameSlotNode;
58-
import org.truffleruby.language.locals.WriteFrameSlotNodeGen;
5958
import org.truffleruby.parser.BlockDescriptorInfo;
6059
import org.truffleruby.parser.TranslatorEnvironment;
6160

@@ -333,7 +332,7 @@ static Object localVariableSetCached(RubyBinding binding, String name, Object va
333332
@Cached("name") String cachedName,
334333
@Cached("getFrameDescriptor(binding)") FrameDescriptor cachedFrameDescriptor,
335334
@Cached("findFrameSlotOrNull(name, binding.getFrame())") FrameSlotAndDepth cachedFrameSlot,
336-
@Cached("createWriteNode(cachedFrameSlot.slot)") WriteFrameSlotNode writeLocalVariableNode) {
335+
@Cached(parameters = "cachedFrameSlot.slot") WriteFrameSlotNode writeLocalVariableNode) {
337336
final MaterializedFrame frame = RubyArguments
338337
.getDeclarationFrame(binding.getFrame(), cachedFrameSlot.depth);
339338
writeLocalVariableNode.executeWrite(frame, value);
@@ -352,7 +351,7 @@ static Object localVariableSetNewCached(RubyBinding binding, String name, Object
352351
@Cached("getFrameDescriptor(binding)") FrameDescriptor cachedFrameDescriptor,
353352
@Cached("findFrameSlotOrNull(name, binding.getFrame())") FrameSlotAndDepth cachedFrameSlot,
354353
@Cached("newFrameDescriptor(cachedFrameDescriptor, name)") FrameDescriptor newDescriptor,
355-
@Cached("createWriteNode(NEW_VAR_INDEX)") WriteFrameSlotNode writeLocalVariableNode) {
354+
@Cached(parameters = "NEW_VAR_INDEX") WriteFrameSlotNode writeLocalVariableNode) {
356355
final MaterializedFrame frame = newFrame(binding, newDescriptor);
357356
writeLocalVariableNode.executeWrite(frame, value);
358357
return value;
@@ -387,10 +386,6 @@ static Object localVariableSetLastLine(Node node, RubyBinding binding, String na
387386
coreExceptions(node).nameError("Bad local variable name", binding, name, node));
388387
}
389388

390-
protected static WriteFrameSlotNode createWriteNode(int frameSlot) {
391-
return WriteFrameSlotNodeGen.create(frameSlot);
392-
}
393-
394389
protected int getCacheLimit() {
395390
return getLanguage().options.BINDING_LOCAL_VARIABLE_CACHE;
396391
}

src/main/java/org/truffleruby/core/hash/HashNodes.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,6 @@
2828
import org.truffleruby.core.array.ArrayBuilderNode.BuilderState;
2929
import org.truffleruby.core.array.ArrayHelpers;
3030
import org.truffleruby.core.array.RubyArray;
31-
import org.truffleruby.core.hash.HashNodesFactory.CopyHashAndSetRuby2KeywordsNodeGen;
32-
import org.truffleruby.core.hash.HashNodesFactory.InitializeCopyNodeFactory;
3331
import org.truffleruby.core.hash.library.EmptyHashStore;
3432
import org.truffleruby.core.hash.library.HashStoreLibrary;
3533
import org.truffleruby.core.hash.library.HashStoreLibrary.EachEntryCallback;
@@ -172,7 +170,7 @@ public abstract static class CopyHashAndSetRuby2KeywordsNode extends RubyBaseNod
172170

173171
@NeverDefault
174172
public static CopyHashAndSetRuby2KeywordsNode create() {
175-
return CopyHashAndSetRuby2KeywordsNodeGen.create();
173+
return HashNodesFactory.CopyHashAndSetRuby2KeywordsNodeGen.create();
176174
}
177175

178176
public abstract RubyHash execute(RubyHash self, boolean ruby2_keywords);
@@ -419,7 +417,7 @@ public abstract static class InitializeCopyNode extends CoreMethodArrayArguments
419417

420418
@NeverDefault
421419
public static InitializeCopyNode create() {
422-
return InitializeCopyNodeFactory.create(null);
420+
return HashNodesFactory.InitializeCopyNodeFactory.create(null);
423421
}
424422

425423
public abstract RubyHash execute(RubyHash self, RubyHash from);

src/main/java/org/truffleruby/core/kernel/KernelNodes.java

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,6 @@
8585
import org.truffleruby.core.support.TypeNodes;
8686
import org.truffleruby.core.support.TypeNodes.CheckFrozenNode;
8787
import org.truffleruby.core.support.TypeNodes.ObjectInstanceVariablesNode;
88-
import org.truffleruby.core.support.TypeNodesFactory.ObjectInstanceVariablesNodeFactory;
8988
import org.truffleruby.core.symbol.RubySymbol;
9089
import org.truffleruby.core.symbol.SymbolNodes;
9190
import org.truffleruby.core.thread.RubyThread;
@@ -126,7 +125,6 @@
126125
import org.truffleruby.language.objects.FreezeNode;
127126
import org.truffleruby.language.objects.IsANode;
128127
import org.truffleruby.language.objects.IsCopyableObjectNode;
129-
import org.truffleruby.language.objects.IsCopyableObjectNodeGen;
130128
import org.truffleruby.language.objects.IsFrozenNode;
131129
import org.truffleruby.language.objects.LazySingletonClassNode;
132130
import org.truffleruby.language.objects.LogicalClassNode;
@@ -534,10 +532,9 @@ RubyDynamicObject copy(RubyIntOrLongRange range,
534532
@Primitive(name = "kernel_clone") // "clone"
535533
public abstract static class CloneNode extends PrimitiveArrayArgumentsNode {
536534

537-
@Child IsCopyableObjectNode isCopyableObjectNode = IsCopyableObjectNodeGen.create();
538-
539535
@Specialization(guards = "isCopyableObjectNode.execute(object)")
540536
static RubyDynamicObject copyable(Object object, Object freeze,
537+
@Cached @Shared IsCopyableObjectNode isCopyableObjectNode,
541538
@Cached MetaClassNode metaClassNode,
542539
@Cached CopyNode copyNode,
543540
@Cached DispatchNode initializeCloneNode,
@@ -576,6 +573,7 @@ static RubyDynamicObject copyable(Object object, Object freeze,
576573

577574
@Specialization(guards = "!isCopyableObjectNode.execute(object)")
578575
Object notCopyable(Object object, Object freeze,
576+
@Cached @Shared IsCopyableObjectNode isCopyableObjectNode,
579577
@Cached InlinedBranchProfile cantUnfreezeErrorProfile) {
580578
if (forceNotFrozen(freeze)) {
581579
raiseCantUnfreezeError(cantUnfreezeErrorProfile, object);
@@ -1084,14 +1082,11 @@ private void removeField(RubyDynamicObject object, String name) {
10841082
@CoreMethod(names = "instance_variables")
10851083
public abstract static class InstanceVariablesNode extends CoreMethodArrayArgumentsNode {
10861084

1087-
@Child private ObjectInstanceVariablesNode instanceVariablesNode = ObjectInstanceVariablesNodeFactory
1088-
.create(null);
1089-
10901085
@Specialization
1091-
RubyArray instanceVariables(Object self) {
1086+
RubyArray instanceVariables(Object self,
1087+
@Cached ObjectInstanceVariablesNode instanceVariablesNode) {
10921088
return instanceVariablesNode.executeGetIVars(self);
10931089
}
1094-
10951090
}
10961091

10971092
@Primitive(name = "any_instance_variable?")

src/main/java/org/truffleruby/core/kernel/TruffleKernelNodes.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
import org.truffleruby.builtins.PrimitiveArrayArgumentsNode;
2828
import org.truffleruby.core.basicobject.RubyBasicObject;
2929
import org.truffleruby.core.encoding.Encodings;
30-
import org.truffleruby.core.kernel.TruffleKernelNodesFactory.GetSpecialVariableStorageNodeGen;
3130
import org.truffleruby.core.module.RubyModule;
3231
import org.truffleruby.core.proc.RubyProc;
3332
import org.truffleruby.core.symbol.RubySymbol;
@@ -213,15 +212,15 @@ public abstract static class GetSpecialVariableStorage extends RubyBaseNode {
213212

214213
@NeverDefault
215214
public static GetSpecialVariableStorage create() {
216-
return GetSpecialVariableStorageNodeGen.create();
215+
return TruffleKernelNodesFactory.GetSpecialVariableStorageNodeGen.create();
217216
}
218217

219218
public final SpecialVariableStorage executeCached(Frame frame) {
220219
return execute(frame, this);
221220
}
222221

223222
public static SpecialVariableStorage executeUncached(Frame frame) {
224-
return GetSpecialVariableStorageNodeGen.getUncached().execute(frame, null);
223+
return TruffleKernelNodesFactory.GetSpecialVariableStorageNodeGen.getUncached().execute(frame, null);
225224
}
226225

227226
public abstract SpecialVariableStorage execute(Frame frame, Node node);
@@ -367,10 +366,6 @@ public Object shareSlow(MaterializedFrame aFrame, SpecialVariableStorage storage
367366
// TODO: should invalidate here?
368367
return nil;
369368
}
370-
371-
public static GetSpecialVariableStorage create() {
372-
return GetSpecialVariableStorageNodeGen.create();
373-
}
374369
}
375370

376371
@Primitive(name = "regexp_last_match_set")

src/main/java/org/truffleruby/core/klass/ClassNodes.java

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,8 @@
3030
import org.truffleruby.language.control.RaiseException;
3131
import org.truffleruby.language.dispatch.DispatchNode;
3232
import org.truffleruby.language.objects.InitializeClassNode;
33-
import org.truffleruby.language.objects.InitializeClassNodeGen;
3433
import org.truffleruby.language.objects.shared.SharedObjects;
3534

36-
import com.oracle.truffle.api.CompilerDirectives;
3735
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
3836
import com.oracle.truffle.api.dsl.Cached;
3937
import com.oracle.truffle.api.dsl.Specialization;
@@ -216,11 +214,11 @@ private static RubyClass getClassClass(RubyClass rubyClass) {
216214
@Primitive(name = "class_new")
217215
public abstract static class NewClassNode extends PrimitiveArrayArgumentsNode {
218216

219-
@Child private InitializeClassNode initializeClassNode;
220217
private final BranchProfile errorProfile = BranchProfile.create();
221218

222219
@Specialization
223-
RubyClass newClass(RubyClass superclass, boolean callInherited, Object maybeBlock) {
220+
RubyClass newClass(RubyClass superclass, boolean callInherited, Object maybeBlock,
221+
@Cached InitializeClassNode initializeClassNode) {
224222
if (superclass.isSingleton) {
225223
errorProfile.enter();
226224
throw new RaiseException(getContext(), coreExceptions().typeErrorSubclassSingletonClass(this));
@@ -240,11 +238,6 @@ RubyClass newClass(RubyClass superclass, boolean callInherited, Object maybeBloc
240238
null,
241239
superclass);
242240

243-
if (initializeClassNode == null) {
244-
CompilerDirectives.transferToInterpreterAndInvalidate();
245-
initializeClassNode = insert(InitializeClassNodeGen.create());
246-
}
247-
248241
initializeClassNode.executeInitialize(newRubyClass, superclass, callInherited, maybeBlock);
249242

250243
return newRubyClass;

0 commit comments

Comments
 (0)