# HG changeset patch # User Thomas Wuerthinger # Date 1397779994 -7200 # Node ID 735147ef017692e13250838d442bd498bc6295a3 # Parent 7d6c2a0e60a8920c2939471f3479c1f469c1cb27 Truffle: Move direct call logic from call site to optimized call target. diff -r 7d6c2a0e60a8 -r 735147ef0176 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTarget.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTarget.java Fri Apr 18 02:00:35 2014 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTarget.java Fri Apr 18 02:13:14 2014 +0200 @@ -60,17 +60,6 @@ return rootNode; } - public Class getProfiledReturnType() { - Class result = profiledReturnType; - if (result != null) { - try { - profiledReturnTypeAssumption.check(); - } catch (InvalidAssumptionException e) { - } - } - return result; - } - public OptimizedCallTarget(RootNode rootNode, GraalTruffleRuntime runtime, int invokeCounter, int compilationThreshold, CompilationPolicy compilationPolicy, SpeculationLog speculationLog) { this.runtime = runtime; this.speculationLog = speculationLog; @@ -93,6 +82,15 @@ return callBoundary(args); } + public Object callDirect(Object... args) { + Object result = callBoundary(args); + Class klass = profiledReturnType; + if (klass != null && profiledReturnTypeAssumption.isValid()) { + result = CompilerDirectives.unsafeCast(result, klass, true, true); + } + return result; + } + @TruffleCallBoundary private Object callBoundary(Object[] args) { if (CompilerDirectives.inInterpreter()) { diff -r 7d6c2a0e60a8 -r 735147ef0176 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedDirectCallNode.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedDirectCallNode.java Fri Apr 18 02:00:35 2014 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedDirectCallNode.java Fri Apr 18 02:13:14 2014 +0200 @@ -62,12 +62,7 @@ if (inlined) { return ((OptimizedCallTarget) callTarget).callInlined(arguments); } else if (direct) { - Object result = ((OptimizedCallTarget) callTarget).call(arguments); - Class klass = ((OptimizedCallTarget) callTarget).getProfiledReturnType(); - if (klass != null) { - result = CompilerDirectives.unsafeCast(result, klass, true, true); - } - return result; + return ((OptimizedCallTarget) callTarget).callDirect(arguments); } else { return callTarget.call(arguments); }