Skip to content

Commit 153f9ad

Browse files
horakivoeregon
authored andcommitted
[GR-17457] Convert nodes to DSL inlinable - part 2
PullRequest: truffleruby/4028
2 parents 6642143 + 3f285f1 commit 153f9ad

32 files changed

+241
-236
lines changed

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

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -138,9 +138,10 @@ public abstract static class AddNode extends CoreMethodArrayArgumentsNode {
138138

139139
@Specialization(
140140
limit = "storageStrategyLimit()")
141-
RubyArray addGeneralize(RubyArray a, Object bObject,
141+
static RubyArray addGeneralize(RubyArray a, Object bObject,
142142
@Cached ToAryNode toAryNode,
143-
@Bind("toAryNode.execute(bObject)") RubyArray b,
143+
@Bind("this") Node node,
144+
@Bind("toAryNode.execute(node, bObject)") RubyArray b,
144145
@Bind("a.getStore()") Object aStore,
145146
@Bind("b.getStore()") Object bStore,
146147
@CachedLibrary("aStore") ArrayStoreLibrary as,
@@ -153,7 +154,7 @@ RubyArray addGeneralize(RubyArray a, Object bObject,
153154
Object newStore = as.unsharedAllocateForNewStore(aStore, bStore, combinedSize);
154155
as.copyContents(aStore, 0, newStore, 0, aSize);
155156
bs.copyContents(bStore, 0, newStore, aSize, bSize);
156-
return createArray(newStore, combinedSize);
157+
return createArray(node, newStore, combinedSize);
157158
}
158159

159160
}
@@ -595,7 +596,7 @@ RubyArray concatZero(RubyArray array, NotProvided first, Object[] rest) {
595596
RubyArray concatOne(RubyArray array, Object first, Object[] rest,
596597
@Cached @Shared ToAryNode toAryNode,
597598
@Cached @Shared ArrayAppendManyNode appendManyNode) {
598-
appendManyNode.executeAppendMany(array, toAryNode.execute(first));
599+
appendManyNode.executeAppendMany(array, toAryNode.execute(this, first));
599600
return array;
600601
}
601602

@@ -615,11 +616,11 @@ RubyArray concatMany(RubyArray array, Object first, Object[] rest,
615616
@Cached @Shared ConditionProfile selfArgProfile) {
616617
int size = array.size;
617618
RubyArray copy = createArray(cowNode.execute(array, 0, size), size);
618-
RubyArray result = appendManyNode.executeAppendMany(array, toAryNode.execute(first));
619+
RubyArray result = appendManyNode.executeAppendMany(array, toAryNode.execute(this, first));
619620
for (int i = 0; i < cachedLength; ++i) {
620621
final RubyArray argOrCopy = selfArgProfile.profile(rest[i] == array)
621622
? copy
622-
: toAryNode.execute(rest[i]);
623+
: toAryNode.execute(this, rest[i]);
623624
result = appendManyNode.executeAppendMany(array, argOrCopy);
624625
}
625626
return result;
@@ -638,15 +639,15 @@ RubyArray concatManyGeneral(RubyArray array, Object first, Object[] rest,
638639
final int size = array.size;
639640
Object store = cowNode.execute(array, 0, size);
640641

641-
RubyArray result = appendManyNode.executeAppendMany(array, toAryNode.execute(first));
642+
RubyArray result = appendManyNode.executeAppendMany(array, toAryNode.execute(this, first));
642643
int i = 0;
643644
try {
644645
for (; loopProfile.inject(i < rest.length); i++) {
645646
Object arg = rest[i];
646647
if (selfArgProfile.profile(arg == array)) {
647648
result = appendManyNode.executeAppendMany(array, createArray(store, size));
648649
} else {
649-
result = appendManyNode.executeAppendMany(array, toAryNode.execute(arg));
650+
result = appendManyNode.executeAppendMany(array, toAryNode.execute(this, arg));
650651
}
651652
TruffleSafepoint.poll(this);
652653
}
@@ -1286,7 +1287,7 @@ public abstract static class InitializeCopyNode extends CoreMethodArrayArguments
12861287
RubyArray initializeCopy(RubyArray self, Object fromObject,
12871288
@Cached ToAryNode toAryNode,
12881289
@Cached ReplaceNode replaceNode) {
1289-
final var from = toAryNode.execute(fromObject);
1290+
final var from = toAryNode.execute(this, fromObject);
12901291
if (self == from) {
12911292
return self;
12921293
}
@@ -1797,7 +1798,7 @@ RubyArray replace(RubyArray array, Object otherObject,
17971798
@Cached IsSharedNode isSharedNode,
17981799
@Cached ConditionProfile sharedProfile,
17991800
@CachedLibrary(limit = "2") ArrayStoreLibrary stores) {
1800-
final var other = toAryNode.execute(otherObject);
1801+
final var other = toAryNode.execute(this, otherObject);
18011802
final int size = other.size;
18021803
Object store = cowNode.execute(other, 0, size);
18031804
if (sharedProfile.profile(isSharedNode.executeIsShared(this, array))) {

src/main/java/org/truffleruby/core/cast/ToAryNode.java

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,32 +9,35 @@
99
*/
1010
package org.truffleruby.core.cast;
1111

12+
import com.oracle.truffle.api.dsl.GenerateCached;
13+
import com.oracle.truffle.api.dsl.GenerateInline;
14+
import com.oracle.truffle.api.nodes.Node;
1215
import org.truffleruby.core.array.RubyArray;
1316
import org.truffleruby.language.RubyBaseNode;
1417

1518
import com.oracle.truffle.api.dsl.Cached;
1619
import com.oracle.truffle.api.dsl.Specialization;
1720
import org.truffleruby.language.dispatch.DispatchNode;
1821

22+
@GenerateCached(false)
23+
@GenerateInline
1924
public abstract class ToAryNode extends RubyBaseNode {
2025

21-
22-
public abstract RubyArray execute(Object object);
23-
26+
public abstract RubyArray execute(Node node, Object object);
2427

2528
@Specialization
26-
RubyArray coerceRubyArray(RubyArray array) {
29+
static RubyArray coerceRubyArray(RubyArray array) {
2730
return array;
2831
}
2932

3033
@Specialization(guards = "!isRubyArray(object)")
31-
RubyArray coerceObject(Object object,
32-
@Cached DispatchNode toAryNode) {
34+
static RubyArray coerceObject(Node node, Object object,
35+
@Cached(inline = false) DispatchNode toAryNode) {
3336
return (RubyArray) toAryNode.call(
34-
coreLibrary().truffleTypeModule,
37+
coreLibrary(node).truffleTypeModule,
3538
"rb_convert_type",
3639
object,
37-
coreLibrary().arrayClass,
38-
coreSymbols().TO_ARY);
40+
coreLibrary(node).arrayClass,
41+
coreSymbols(node).TO_ARY);
3942
}
4043
}

src/main/java/org/truffleruby/core/cast/ToCallTargetNode.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@
99
*/
1010
package org.truffleruby.core.cast;
1111

12+
import com.oracle.truffle.api.dsl.GenerateCached;
13+
import com.oracle.truffle.api.dsl.GenerateInline;
14+
import com.oracle.truffle.api.nodes.Node;
1215
import org.truffleruby.core.method.RubyMethod;
1316
import org.truffleruby.core.method.RubyUnboundMethod;
1417
import org.truffleruby.core.proc.RubyProc;
@@ -17,22 +20,24 @@
1720
import com.oracle.truffle.api.RootCallTarget;
1821
import com.oracle.truffle.api.dsl.Specialization;
1922

23+
@GenerateInline
24+
@GenerateCached(false)
2025
public abstract class ToCallTargetNode extends RubyBaseNode {
2126

22-
public abstract RootCallTarget execute(Object executable);
27+
public abstract RootCallTarget execute(Node node, Object executable);
2328

2429
@Specialization
25-
RootCallTarget boundMethod(RubyMethod method) {
30+
static RootCallTarget boundMethod(RubyMethod method) {
2631
return method.method.getCallTarget();
2732
}
2833

2934
@Specialization
30-
RootCallTarget unboundMethod(RubyUnboundMethod method) {
35+
static RootCallTarget unboundMethod(RubyUnboundMethod method) {
3136
return method.method.getCallTarget();
3237
}
3338

3439
@Specialization
35-
RootCallTarget proc(RubyProc proc) {
40+
static RootCallTarget proc(RubyProc proc) {
3641
return proc.callTarget;
3742
}
3843

src/main/java/org/truffleruby/core/cast/ToPathNode.java

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@
99
*/
1010
package org.truffleruby.core.cast;
1111

12+
import com.oracle.truffle.api.dsl.GenerateCached;
13+
import com.oracle.truffle.api.dsl.GenerateInline;
14+
import com.oracle.truffle.api.nodes.Node;
1215
import org.truffleruby.core.string.RubyString;
1316
import org.truffleruby.core.string.ImmutableRubyString;
1417
import org.truffleruby.language.RubyBaseNode;
@@ -17,23 +20,25 @@
1720
import com.oracle.truffle.api.dsl.Cached;
1821
import com.oracle.truffle.api.dsl.Specialization;
1922

23+
@GenerateCached(false)
24+
@GenerateInline
2025
public abstract class ToPathNode extends RubyBaseNode {
2126

22-
public abstract Object execute(Object value);
27+
public abstract Object execute(Node node, Object value);
2328

2429
@Specialization
25-
RubyString coerceRubyString(RubyString path) {
30+
static RubyString coerceRubyString(RubyString path) {
2631
return path;
2732
}
2833

2934
@Specialization
30-
ImmutableRubyString coerceImmutableRubyString(ImmutableRubyString path) {
35+
static ImmutableRubyString coerceImmutableRubyString(ImmutableRubyString path) {
3136
return path;
3237
}
3338

3439
@Specialization(guards = "isNotRubyString(object)")
35-
RubyString coerceObject(Object object,
36-
@Cached DispatchNode toPathNode) {
37-
return (RubyString) toPathNode.call(coreLibrary().truffleTypeModule, "coerce_to_path", object);
40+
static RubyString coerceObject(Node node, Object object,
41+
@Cached(inline = false) DispatchNode toPathNode) {
42+
return (RubyString) toPathNode.call(coreLibrary(node).truffleTypeModule, "coerce_to_path", object);
3843
}
3944
}

src/main/java/org/truffleruby/core/encoding/EncodingNodes.java

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -520,28 +520,31 @@ boolean isUnicode(RubyEncoding encoding) {
520520
public abstract static class GetActualEncodingPrimitiveNode extends PrimitiveArrayArgumentsNode {
521521

522522
@Specialization(guards = "libString.isRubyString(string)", limit = "1")
523-
RubyEncoding getActualEncoding(Object string,
523+
static RubyEncoding getActualEncoding(Object string,
524524
@Cached GetActualEncodingNode getActualEncodingNode,
525-
@Cached RubyStringLibrary libString) {
526-
return getActualEncodingNode.execute(libString.getTString(string), libString.getEncoding(string));
525+
@Cached RubyStringLibrary libString,
526+
@Bind("this") Node node) {
527+
return getActualEncodingNode.execute(node, libString.getTString(string), libString.getEncoding(string));
527528
}
528529

529530
}
530531

531532
// MRI: get_actual_encoding
533+
@GenerateInline
534+
@GenerateCached(false)
532535
public abstract static class GetActualEncodingNode extends RubyBaseNode {
533536

534-
public abstract RubyEncoding execute(AbstractTruffleString tstring, RubyEncoding encoding);
537+
public abstract RubyEncoding execute(Node node, AbstractTruffleString tstring, RubyEncoding encoding);
535538

536539
@Specialization(guards = "!encoding.isDummy")
537-
RubyEncoding getActualEncoding(AbstractTruffleString tstring, RubyEncoding encoding) {
540+
static RubyEncoding getActualEncoding(AbstractTruffleString tstring, RubyEncoding encoding) {
538541
return encoding;
539542
}
540543

541544
@TruffleBoundary
542545
@Specialization(guards = "encoding.isDummy")
543-
RubyEncoding getActualEncodingDummy(AbstractTruffleString tstring, RubyEncoding encoding,
544-
@Cached TruffleString.ReadByteNode readByteNode) {
546+
static RubyEncoding getActualEncodingDummy(AbstractTruffleString tstring, RubyEncoding encoding,
547+
@Cached(inline = false) TruffleString.ReadByteNode readByteNode) {
545548
if (encoding.isUnicode) {
546549
var enc = encoding.tencoding;
547550
var byteLength = tstring.byteLength(enc);

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

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,10 @@
1010
package org.truffleruby.core.hash;
1111

1212
import com.oracle.truffle.api.dsl.Cached;
13+
import com.oracle.truffle.api.dsl.GenerateCached;
14+
import com.oracle.truffle.api.dsl.GenerateInline;
1315
import com.oracle.truffle.api.dsl.GenerateUncached;
16+
import com.oracle.truffle.api.nodes.Node;
1417
import org.truffleruby.core.string.RubyString;
1518
import org.truffleruby.core.string.ImmutableRubyString;
1619
import org.truffleruby.language.RubyBaseNode;
@@ -19,35 +22,37 @@
1922
import com.oracle.truffle.api.dsl.Specialization;
2023

2124
@GenerateUncached
25+
@GenerateInline
26+
@GenerateCached(false)
2227
public abstract class FreezeHashKeyIfNeededNode extends RubyBaseNode {
2328

24-
public abstract Object executeFreezeIfNeeded(Object key, boolean compareByIdentity);
29+
public abstract Object executeFreezeIfNeeded(Node node, Object key, boolean compareByIdentity);
2530

2631
@Specialization
27-
Object immutable(ImmutableRubyString string, boolean compareByIdentity) {
32+
static Object immutable(ImmutableRubyString string, boolean compareByIdentity) {
2833
return string;
2934
}
3035

3136
@Specialization(guards = "string.isFrozen()")
32-
Object alreadyFrozen(RubyString string, boolean compareByIdentity) {
37+
static Object alreadyFrozen(RubyString string, boolean compareByIdentity) {
3338
return string;
3439
}
3540

3641
@Specialization(guards = { "!string.isFrozen()", "!compareByIdentity" })
37-
Object dupAndFreeze(RubyString string, boolean compareByIdentity,
38-
@Cached DispatchNode dupNode) {
42+
static Object dupAndFreeze(RubyString string, boolean compareByIdentity,
43+
@Cached(inline = false) DispatchNode dupNode) {
3944
final RubyString copy = (RubyString) dupNode.call(string, "dup");
4045
copy.freeze();
4146
return copy;
4247
}
4348

4449
@Specialization(guards = { "!string.isFrozen()", "compareByIdentity" })
45-
Object compareByIdentity(RubyString string, boolean compareByIdentity) {
50+
static Object compareByIdentity(RubyString string, boolean compareByIdentity) {
4651
return string;
4752
}
4853

4954
@Specialization(guards = "isNotRubyString(value)")
50-
Object passThrough(Object value, boolean compareByIdentity) {
55+
static Object passThrough(Object value, boolean compareByIdentity) {
5156
return value;
5257
}
5358
}

src/main/java/org/truffleruby/core/hash/library/BucketsHashStore.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@ protected boolean set(RubyHash hash, Object key, Object value, boolean byIdentit
246246
@Bind("$node") Node node) {
247247
assert verify(hash);
248248

249-
final Object key2 = freezeHashKeyIfNeeded.executeFreezeIfNeeded(key, byIdentity);
249+
final Object key2 = freezeHashKeyIfNeeded.executeFreezeIfNeeded(node, key, byIdentity);
250250

251251
propagateSharingKey.execute(node, hash, key2);
252252
propagateSharingValue.execute(node, hash, value);

src/main/java/org/truffleruby/core/hash/library/HashStoreLibrary.java

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

1212
import com.oracle.truffle.api.CompilerAsserts;
1313
import com.oracle.truffle.api.dsl.Cached;
14+
import com.oracle.truffle.api.dsl.GenerateInline;
1415
import com.oracle.truffle.api.dsl.GenerateUncached;
1516
import com.oracle.truffle.api.dsl.Specialization;
1617
import com.oracle.truffle.api.frame.Frame;
@@ -118,6 +119,7 @@ public interface EachEntryCallback {
118119
/** Call the block with an key-value entry. If the block has > 1 arity, passes the key and the value as arguments,
119120
* otherwise passes an array containing the key and the value as single argument. */
120121
@GenerateUncached
122+
@GenerateInline(false)
121123
public abstract static class YieldPairNode extends RubyBaseNode {
122124

123125
public static YieldPairNode create() {

src/main/java/org/truffleruby/core/hash/library/PackedHashStoreLibrary.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ static boolean setFirst(Object[] store, RubyHash hash, Object key, Object value,
177177
@Cached @Shared PropagateSharingNode propagateSharingValue,
178178
@Bind("this") Node node) {
179179

180-
final Object key2 = freezeHashKeyIfNeeded.executeFreezeIfNeeded(key, byIdentity);
180+
final Object key2 = freezeHashKeyIfNeeded.executeFreezeIfNeeded(node, key, byIdentity);
181181
propagateSharingKey.execute(node, hash, key2);
182182
propagateSharingValue.execute(node, hash, value);
183183
setHashedKeyValue(store, 0, hashNode.execute(key2, byIdentity), key2, value);
@@ -199,7 +199,7 @@ static boolean set(Object[] store, RubyHash hash, Object key, Object value, bool
199199

200200
assert verify(store, hash);
201201
final int size = hash.size;
202-
final Object key2 = freezeHashKeyIfNeeded.executeFreezeIfNeeded(key, byIdentity);
202+
final Object key2 = freezeHashKeyIfNeeded.executeFreezeIfNeeded(node, key, byIdentity);
203203
final int hashed = hashNode.execute(key2, byIdentity);
204204
propagateSharingKey.execute(node, hash, key2);
205205
propagateSharingValue.execute(node, hash, value);
@@ -499,7 +499,7 @@ Object doHash(VirtualFrame frame,
499499

500500
for (int n = 0; n < keyValues.length / 2; n++) {
501501
Object key = keyValues[n * 2].execute(frame);
502-
key = freezeHashKeyIfNeededNode.executeFreezeIfNeeded(key, false);
502+
key = freezeHashKeyIfNeededNode.executeFreezeIfNeeded(this, key, false);
503503

504504
final int hashed = hash(key);
505505

0 commit comments

Comments
 (0)