Skip to content

Commit 5603e8b

Browse files
committed
[GR-18163] Skip specs for inline cache when --engine.Splitting=false
PullRequest: truffleruby/4293
2 parents ca9cfa9 + 7d837fa commit 5603e8b

File tree

3 files changed

+25
-1
lines changed

3 files changed

+25
-1
lines changed

spec/truffle/regexp/inline_caching_spec.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@
1313
# This test requires splitting (--engine.Splitting) which is only available with the OptimizedTruffleRuntime.
1414
# It fails under --experimental-engine-caching because CallInternalMethodNode does not have cached specializations for
1515
# !isSingleContext() and so ends up using an IndirectCallNode which prevents splitting.
16-
guard -> { TruffleRuby.jit? && !Truffle::Boot.get_option('experimental-engine-caching') && Truffle::Boot.get_option("default-cache") != 0 } do
16+
guard -> { Primitive.vm_splitting_enabled? &&
17+
!Truffle::Boot.get_option('experimental-engine-caching') &&
18+
Truffle::Boot.get_option("default-cache") != 0 } do
1719
describe "Inline caching for dynamically-created Regexp works for" do
1820
before :each do
1921
@performance_warnings, Warning[:performance] = Warning[:performance], true

src/main/java/org/truffleruby/core/CoreLibrary.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import java.util.concurrent.ConcurrentMap;
2424

2525
import com.oracle.truffle.api.RootCallTarget;
26+
import com.oracle.truffle.api.nodes.DirectCallNode;
2627
import org.graalvm.shadowed.org.jcodings.transcode.EConvFlags;
2728
import org.truffleruby.RubyContext;
2829
import org.truffleruby.RubyLanguage;
@@ -253,6 +254,8 @@ public final class CoreLibrary {
253254
* using require_relative and the patch location is not enough to find the correct file. */
254255
private final ConcurrentMap<String, String> originalRequires;
255256

257+
private DirectCallNode callNodeToCheckSplittingEnabled;
258+
256259
@TruffleBoundary
257260
private static SourceSection initCoreSourceSection() {
258261
final Source.SourceBuilder builder = Source.newBuilder(TruffleRuby.LANGUAGE_ID, "", "(core)");
@@ -933,6 +936,15 @@ public boolean isTruffleBootMainMethod(SharedMethodInfo info) {
933936
return info == truffleBootMainInfo;
934937
}
935938

939+
public boolean isSplittingEnabled() {
940+
if (callNodeToCheckSplittingEnabled == null) {
941+
callNodeToCheckSplittingEnabled = DirectCallNode.create(getMethod(arrayClass, "[]").getCallTarget());
942+
callNodeToCheckSplittingEnabled.cloneCallTarget();
943+
}
944+
945+
return callNodeToCheckSplittingEnabled.isCallTargetCloned();
946+
}
947+
936948
private static final String POST_BOOT_FILE = "/post-boot/post-boot.rb";
937949

938950
public static final String[] CORE_FILES = {

src/main/java/org/truffleruby/core/VMPrimitiveNodes.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -674,4 +674,14 @@ boolean singleContext() {
674674
}
675675
}
676676

677+
@Primitive(name = "vm_splitting_enabled?")
678+
public abstract static class VMSplittingEnabledNode extends PrimitiveArrayArgumentsNode {
679+
680+
@TruffleBoundary
681+
@Specialization
682+
boolean isSplittingEnabled() {
683+
return getContext().getCoreLibrary().isSplittingEnabled();
684+
}
685+
}
686+
677687
}

0 commit comments

Comments
 (0)