Mercurial > hg > truffle
changeset 17405:04d6bb76cfb3
Truffle: update callUntilOptimized to wait for the compilation and call it once optimized.
author | Christian Humer <christian.humer@gmail.com> |
---|---|
date | Thu, 09 Oct 2014 17:25:59 +0200 |
parents | b725292b8a11 |
children | 1615d78a9d35 |
files | graal/com.oracle.graal.truffle.test/sl/TestInliningMaxCallerSize.sl graal/com.oracle.graal.truffle.test/sl/TestInliningRecursive1.sl graal/com.oracle.graal.truffle.test/sl/TestInliningRecursive2.sl graal/com.oracle.graal.truffle.test/sl/TestSlowPath01.sl graal/com.oracle.graal.truffle.test/src/com/oracle/graal/truffle/test/builtins/SLCallUntilOptimizedBuiltin.java |
diffstat | 5 files changed, 26 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.truffle.test/sl/TestInliningMaxCallerSize.sl Thu Oct 09 17:25:59 2014 +0200 +++ b/graal/com.oracle.graal.truffle.test/sl/TestInliningMaxCallerSize.sl Thu Oct 09 17:25:59 2014 +0200 @@ -20,10 +20,10 @@ function main() { originalMaxCallerSize = getOption("TruffleInliningMaxCallerSize"); setOption("TruffleInliningMaxCallerSize", 20); - waitForOptimization(callUntilOptimized(test1)); + callUntilOptimized(test1); assertTrue(isInlined(test1, test1, inlinableFunction), "inlinableFunction is not inlined"); - waitForOptimization(callUntilOptimized(test2)); + callUntilOptimized(test2); assertFalse(isInlined(test2, test2, notInlinableFunction), "notInlinableFunction is inlined"); setOption("TruffleInliningMaxCallerSize", originalMaxCallerSize); }
--- a/graal/com.oracle.graal.truffle.test/sl/TestInliningRecursive1.sl Thu Oct 09 17:25:59 2014 +0200 +++ b/graal/com.oracle.graal.truffle.test/sl/TestInliningRecursive1.sl Thu Oct 09 17:25:59 2014 +0200 @@ -19,7 +19,7 @@ } function main() { - waitForOptimization(callUntilOptimized(test)); + callUntilOptimized(test); assertTrue(isInlined(test, test, fib), "fib is not inlined"); assertFalse(isInlined(test, fib, fib), "fib -> fib is not inlined"); }
--- a/graal/com.oracle.graal.truffle.test/sl/TestInliningRecursive2.sl Thu Oct 09 17:25:59 2014 +0200 +++ b/graal/com.oracle.graal.truffle.test/sl/TestInliningRecursive2.sl Thu Oct 09 17:25:59 2014 +0200 @@ -27,7 +27,7 @@ } function main() { - waitForOptimization(callUntilOptimized(test)); + callUntilOptimized(test); assertTrue(isInlined(test, test, fib), "not inlined: test -> fib"); assertTrue(isInlined(test, fib, call), "not inlined: fib -> call");
--- a/graal/com.oracle.graal.truffle.test/sl/TestSlowPath01.sl Thu Oct 09 17:25:59 2014 +0200 +++ b/graal/com.oracle.graal.truffle.test/sl/TestSlowPath01.sl Thu Oct 09 17:25:59 2014 +0200 @@ -6,6 +6,6 @@ testSlowPath01(); } function main() { - waitForOptimization(callUntilOptimized(test1)); + callUntilOptimized(test1); assertTrue(isOptimized(test1), "inlinableFunction must be compiled properly"); }
--- a/graal/com.oracle.graal.truffle.test/src/com/oracle/graal/truffle/test/builtins/SLCallUntilOptimizedBuiltin.java Thu Oct 09 17:25:59 2014 +0200 +++ b/graal/com.oracle.graal.truffle.test/src/com/oracle/graal/truffle/test/builtins/SLCallUntilOptimizedBuiltin.java Thu Oct 09 17:25:59 2014 +0200 @@ -22,11 +22,15 @@ */ package com.oracle.graal.truffle.test.builtins; +import java.util.concurrent.*; + import com.oracle.graal.truffle.*; import com.oracle.truffle.api.*; +import com.oracle.truffle.api.CompilerDirectives.*; import com.oracle.truffle.api.dsl.*; import com.oracle.truffle.api.frame.*; import com.oracle.truffle.api.nodes.*; +import com.oracle.truffle.sl.*; import com.oracle.truffle.sl.runtime.*; /** @@ -45,15 +49,29 @@ @Child private IndirectCallNode indirectCall = Truffle.getRuntime().createIndirectCallNode(); @Specialization + @SlowPath public SLFunction callUntilCompiled(VirtualFrame frame, SLFunction function) { - OptimizedCallTarget oct = ((OptimizedCallTarget) function.getCallTarget()); + OptimizedCallTarget target = ((OptimizedCallTarget) function.getCallTarget()); for (int i = 0; i < MAX_CALLS; i++) { - if (((GraalTruffleRuntime) Truffle.getRuntime()).isCompiling(oct) || oct.isValid()) { + if (((GraalTruffleRuntime) Truffle.getRuntime()).isCompiling(target) || target.isValid()) { break; } else { - indirectCall.call(frame, oct, EMPTY_ARGS); + indirectCall.call(frame, target, EMPTY_ARGS); } } + try { + ((GraalTruffleRuntime) Truffle.getRuntime()).waitForCompilation(target, 640000); + } catch (ExecutionException | TimeoutException e) { + throw new RuntimeException(e); + } + + // call one more in compiled + indirectCall.call(frame, target, EMPTY_ARGS); + + if (!target.isValid()) { + throw new SLAssertionError("Function " + target + " invalidated."); + } + return function; } }