Search in sources :

Example 1 with TruffleOptionsOverrideScope

use of org.graalvm.compiler.truffle.common.TruffleCompilerOptions.TruffleOptionsOverrideScope in project graal by oracle.

the class OptimizedCallTargetTest method testCompileOnly2.

@Test
public void testCompileOnly2() {
    final int compilationThreshold = TruffleCompilerOptions.getValue(TruffleCompilationThreshold);
    // test single exclude
    try (TruffleOptionsOverrideScope scope = TruffleCompilerOptions.overrideOptions(TruffleCompileOnly, "~foobar")) {
        OptimizedCallTarget target = (OptimizedCallTarget) runtime.createCallTarget(new NamedRootNode("foobar"));
        for (int i = 0; i < compilationThreshold; i++) {
            assertNotCompiled(target);
            target.call();
        }
        assertNotCompiled(target);
        target = (OptimizedCallTarget) runtime.createCallTarget(new NamedRootNode("baz"));
        for (int i = 0; i < compilationThreshold; i++) {
            assertNotCompiled(target);
            target.call();
        }
        assertCompiled(target);
    }
}
Also used : TruffleOptionsOverrideScope(org.graalvm.compiler.truffle.common.TruffleCompilerOptions.TruffleOptionsOverrideScope) OptimizedCallTarget(org.graalvm.compiler.truffle.runtime.OptimizedCallTarget) Test(org.junit.Test)

Example 2 with TruffleOptionsOverrideScope

use of org.graalvm.compiler.truffle.common.TruffleCompilerOptions.TruffleOptionsOverrideScope in project graal by oracle.

the class OptimizedCallTargetTest method testCompileOnly3.

@Test
public void testCompileOnly3() {
    final int compilationThreshold = TruffleCompilerOptions.getValue(TruffleCompilationThreshold);
    // test two includes/excludes
    try (TruffleOptionsOverrideScope scope = TruffleCompilerOptions.overrideOptions(TruffleCompileOnly, "foo,baz")) {
        OptimizedCallTarget target = (OptimizedCallTarget) runtime.createCallTarget(new NamedRootNode("foobar"));
        for (int i = 0; i < compilationThreshold; i++) {
            assertNotCompiled(target);
            target.call();
        }
        assertCompiled(target);
        target = (OptimizedCallTarget) runtime.createCallTarget(new NamedRootNode("baz"));
        for (int i = 0; i < compilationThreshold; i++) {
            assertNotCompiled(target);
            target.call();
        }
        assertCompiled(target);
    }
}
Also used : TruffleOptionsOverrideScope(org.graalvm.compiler.truffle.common.TruffleCompilerOptions.TruffleOptionsOverrideScope) OptimizedCallTarget(org.graalvm.compiler.truffle.runtime.OptimizedCallTarget) Test(org.junit.Test)

Example 3 with TruffleOptionsOverrideScope

use of org.graalvm.compiler.truffle.common.TruffleCompilerOptions.TruffleOptionsOverrideScope in project graal by oracle.

the class OptimizedCallTargetTest method testCompileOnly5.

@Test
public void testCompileOnly5() {
    // OSR should trigger if compile-only with excludes
    try (TruffleOptionsOverrideScope scope = TruffleCompilerOptions.overrideOptions(TruffleCompileOnly, "~foobar")) {
        final OSRRepeatingNode repeating = new OSRRepeatingNode(TruffleCompilerOptions.getValue(TruffleOSRCompilationThreshold));
        final LoopNode loop = runtime.createLoopNode(repeating);
        OptimizedCallTarget target = (OptimizedCallTarget) runtime.createCallTarget(new NamedRootNode("foobar") {

            @Child
            LoopNode loopChild = loop;

            @Override
            public Object execute(VirtualFrame frame) {
                loopChild.executeLoop(frame);
                return super.execute(frame);
            }
        });
        target.call();
        OptimizedCallTarget osrTarget = findOSRTarget(loop);
        assertCompiled(osrTarget);
    }
}
Also used : LoopNode(com.oracle.truffle.api.nodes.LoopNode) OptimizedOSRLoopNode(org.graalvm.compiler.truffle.runtime.OptimizedOSRLoopNode) VirtualFrame(com.oracle.truffle.api.frame.VirtualFrame) TruffleOptionsOverrideScope(org.graalvm.compiler.truffle.common.TruffleCompilerOptions.TruffleOptionsOverrideScope) OptimizedCallTarget(org.graalvm.compiler.truffle.runtime.OptimizedCallTarget) Test(org.junit.Test)

Example 4 with TruffleOptionsOverrideScope

use of org.graalvm.compiler.truffle.common.TruffleCompilerOptions.TruffleOptionsOverrideScope in project graal by oracle.

the class OptimizedCallTargetTest method testRewriteAssumption.

@Test
public void testRewriteAssumption() {
    String testName = "testRewriteAssumption";
    assertTrue("test only works with inlining enabled", TruffleCompilerOptions.getValue(TruffleFunctionInlining));
    try (TruffleOptionsOverrideScope s = TruffleCompilerOptions.overrideOptions(TruffleCompilerOptions.TruffleCompilationThreshold, 20)) {
        final int compilationThreshold = TruffleCompilerOptions.getValue(TruffleCompilationThreshold);
        assertTrue(compilationThreshold >= 2);
        OptimizedCallTarget innermostCallTarget = (OptimizedCallTarget) runtime.createCallTarget(new RootTestNode(new FrameDescriptor(), testName + 0, new AbstractTestNode() {

            @Child
            private AbstractTestNode child = new ConstantTestNode(42);

            @Child
            private AbstractTestNode dummy = new ConstantTestNode(17);

            @Override
            public int execute(VirtualFrame frame) {
                int k = (int) frame.getArguments()[0];
                if (k > compilationThreshold) {
                    CompilerDirectives.transferToInterpreter();
                    dummy.replace(new ConstantTestNode(k));
                }
                return child.execute(frame);
            }
        }));
        OptimizedCallTarget ct = innermostCallTarget;
        ct = (OptimizedCallTarget) runtime.createCallTarget(new RootTestNode(new FrameDescriptor(), testName + 1, new CallTestNode(ct)));
        ct = (OptimizedCallTarget) runtime.createCallTarget(new RootTestNode(new FrameDescriptor(), testName + 2, new CallTestNode(ct)));
        final OptimizedCallTarget outermostCallTarget = ct;
        assertNull("assumption is initially null", getRewriteAssumption(innermostCallTarget));
        IntStream.range(0, compilationThreshold / 2).parallel().forEach(k -> {
            assertEquals(42, outermostCallTarget.call(k));
            assertNull("assumption stays null in the interpreter", getRewriteAssumption(innermostCallTarget));
        });
        outermostCallTarget.compile();
        assertCompiled(outermostCallTarget);
        Assumption firstRewriteAssumption = getRewriteAssumption(innermostCallTarget);
        assertNotNull("assumption must not be null after compilation", firstRewriteAssumption);
        assertTrue(firstRewriteAssumption.isValid());
        List<Assumption> rewriteAssumptions = IntStream.range(0, 2 * compilationThreshold).parallel().mapToObj(k -> {
            assertEquals(42, outermostCallTarget.call(k));
            Assumption rewriteAssumptionAfter = getRewriteAssumption(innermostCallTarget);
            assertNotNull("assumption must not be null after compilation", rewriteAssumptionAfter);
            return rewriteAssumptionAfter;
        }).collect(Collectors.toList());
        Assumption finalRewriteAssumption = getRewriteAssumption(innermostCallTarget);
        assertNotNull("assumption must not be null after compilation", finalRewriteAssumption);
        assertNotSame(firstRewriteAssumption, finalRewriteAssumption);
        assertFalse(firstRewriteAssumption.isValid());
        assertTrue(finalRewriteAssumption.isValid());
        assertFalse(rewriteAssumptions.stream().filter(a -> a != finalRewriteAssumption).anyMatch(Assumption::isValid));
    }
}
Also used : FrameDescriptor(com.oracle.truffle.api.frame.FrameDescriptor) IntStream(java.util.stream.IntStream) AbstractTestNode(org.graalvm.compiler.truffle.test.nodes.AbstractTestNode) DirectCallNode(com.oracle.truffle.api.nodes.DirectCallNode) ConstantTestNode(org.graalvm.compiler.truffle.test.nodes.ConstantTestNode) Assert.assertNotSame(org.junit.Assert.assertNotSame) TruffleCompileOnly(org.graalvm.compiler.truffle.common.TruffleCompilerOptions.TruffleCompileOnly) TruffleOptionsOverrideScope(org.graalvm.compiler.truffle.common.TruffleCompilerOptions.TruffleOptionsOverrideScope) FrameDescriptor(com.oracle.truffle.api.frame.FrameDescriptor) CompilerDirectives(com.oracle.truffle.api.CompilerDirectives) RootTestNode(org.graalvm.compiler.truffle.test.nodes.RootTestNode) LoopNode(com.oracle.truffle.api.nodes.LoopNode) RootNode(com.oracle.truffle.api.nodes.RootNode) TruffleReplaceReprofileCount(org.graalvm.compiler.truffle.common.TruffleCompilerOptions.TruffleReplaceReprofileCount) TruffleOSRCompilationThreshold(org.graalvm.compiler.truffle.common.TruffleCompilerOptions.TruffleOSRCompilationThreshold) RepeatingNode(com.oracle.truffle.api.nodes.RepeatingNode) Node(com.oracle.truffle.api.nodes.Node) TruffleFunctionInlining(org.graalvm.compiler.truffle.common.TruffleCompilerOptions.TruffleFunctionInlining) Assert.assertNotNull(org.junit.Assert.assertNotNull) Assert.assertTrue(org.junit.Assert.assertTrue) Assumption(com.oracle.truffle.api.Assumption) Test(org.junit.Test) VirtualFrame(com.oracle.truffle.api.frame.VirtualFrame) OptimizedCallTarget(org.graalvm.compiler.truffle.runtime.OptimizedCallTarget) CallTarget(com.oracle.truffle.api.CallTarget) Field(java.lang.reflect.Field) Collectors(java.util.stream.Collectors) GraalTruffleRuntime(org.graalvm.compiler.truffle.runtime.GraalTruffleRuntime) List(java.util.List) Assert.assertNull(org.junit.Assert.assertNull) Ignore(org.junit.Ignore) Assert.assertFalse(org.junit.Assert.assertFalse) OptimizedOSRLoopNode(org.graalvm.compiler.truffle.runtime.OptimizedOSRLoopNode) TruffleCompilerOptions(org.graalvm.compiler.truffle.common.TruffleCompilerOptions) Truffle(com.oracle.truffle.api.Truffle) TruffleCompilationThreshold(org.graalvm.compiler.truffle.common.TruffleCompilerOptions.TruffleCompilationThreshold) Assert(org.junit.Assert) Assert.assertEquals(org.junit.Assert.assertEquals) Util(org.graalvm.compiler.core.common.util.Util) AbstractTestNode(org.graalvm.compiler.truffle.test.nodes.AbstractTestNode) OptimizedCallTarget(org.graalvm.compiler.truffle.runtime.OptimizedCallTarget) Assumption(com.oracle.truffle.api.Assumption) VirtualFrame(com.oracle.truffle.api.frame.VirtualFrame) ConstantTestNode(org.graalvm.compiler.truffle.test.nodes.ConstantTestNode) TruffleOptionsOverrideScope(org.graalvm.compiler.truffle.common.TruffleCompilerOptions.TruffleOptionsOverrideScope) RootTestNode(org.graalvm.compiler.truffle.test.nodes.RootTestNode) Test(org.junit.Test)

Example 5 with TruffleOptionsOverrideScope

use of org.graalvm.compiler.truffle.common.TruffleCompilerOptions.TruffleOptionsOverrideScope in project graal by oracle.

the class GraalTruffleRuntime method submitForCompilation.

@SuppressWarnings("try")
public CancellableCompileTask submitForCompilation(OptimizedCallTarget optimizedCallTarget) {
    BackgroundCompileQueue l = getCompileQueue();
    final WeakReference<OptimizedCallTarget> weakCallTarget = new WeakReference<>(optimizedCallTarget);
    final OptionValues optionOverrides = TruffleCompilerOptions.getCurrentOptionOverrides();
    CancellableCompileTask cancellable = new CancellableCompileTask();
    cancellable.setFuture(l.compileQueue.submit(new Runnable() {

        @Override
        public void run() {
            OptimizedCallTarget callTarget = weakCallTarget.get();
            if (callTarget != null) {
                try (TruffleOptionsOverrideScope scope = optionOverrides != null ? overrideOptions(optionOverrides.getMap()) : null) {
                    OptionValues options = TruffleCompilerOptions.getOptions();
                    doCompile(options, callTarget, cancellable);
                } finally {
                    callTarget.resetCompilationTask();
                }
            }
        }
    }));
    // task and future must never diverge from each other
    assert cancellable.future != null;
    return cancellable;
}
Also used : OptionValues(org.graalvm.compiler.options.OptionValues) WeakReference(java.lang.ref.WeakReference) TruffleOptionsOverrideScope(org.graalvm.compiler.truffle.common.TruffleCompilerOptions.TruffleOptionsOverrideScope)

Aggregations

TruffleOptionsOverrideScope (org.graalvm.compiler.truffle.common.TruffleCompilerOptions.TruffleOptionsOverrideScope)11 OptimizedCallTarget (org.graalvm.compiler.truffle.runtime.OptimizedCallTarget)8 Test (org.junit.Test)8 VirtualFrame (com.oracle.truffle.api.frame.VirtualFrame)3 LoopNode (com.oracle.truffle.api.nodes.LoopNode)3 OptimizedOSRLoopNode (org.graalvm.compiler.truffle.runtime.OptimizedOSRLoopNode)3 StructuredGraph (org.graalvm.compiler.nodes.StructuredGraph)2 OptionValues (org.graalvm.compiler.options.OptionValues)2 GraalTruffleRuntime (org.graalvm.compiler.truffle.runtime.GraalTruffleRuntime)2 Ignore (org.junit.Ignore)2 Assumption (com.oracle.truffle.api.Assumption)1 CallTarget (com.oracle.truffle.api.CallTarget)1 CompilerDirectives (com.oracle.truffle.api.CompilerDirectives)1 Truffle (com.oracle.truffle.api.Truffle)1 Specialization (com.oracle.truffle.api.dsl.Specialization)1 FrameDescriptor (com.oracle.truffle.api.frame.FrameDescriptor)1 DirectCallNode (com.oracle.truffle.api.nodes.DirectCallNode)1 Node (com.oracle.truffle.api.nodes.Node)1 RepeatingNode (com.oracle.truffle.api.nodes.RepeatingNode)1 RootNode (com.oracle.truffle.api.nodes.RootNode)1