# HG changeset patch # User Christian Humer # Date 1397579483 -7200 # Node ID 7f5c9079e24a23dc1d0029ec24340bb2304af994 # Parent 820c6d3533582e32a1bc1e66722f08a6834fc796 Truffle: fixes to the inlining heuristic. diff -r 820c6d353358 -r 7f5c9079e24a 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 Wed Apr 23 12:38:05 2014 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTarget.java Tue Apr 15 18:31:23 2014 +0200 @@ -241,22 +241,19 @@ if (inliningPerformed) { return; } + inliningPerformed = true; TruffleInliningHandler handler = new TruffleInliningHandler(new DefaultInliningPolicy()); TruffleInliningResult result = handler.decideInlining(this, 0); performInlining(result); logInliningDecision(result); } - private void performInlining(TruffleInliningResult result) { - if (inliningPerformed) { - return; - } - inliningPerformed = true; + private static void performInlining(TruffleInliningResult result) { for (TruffleInliningProfile profile : result) { profile.getCallNode().inline(); TruffleInliningResult recursiveResult = profile.getRecursiveResult(); if (recursiveResult != null) { - recursiveResult.getCallTarget().performInlining(recursiveResult); + performInlining(recursiveResult); } } } diff -r 820c6d353358 -r 7f5c9079e24a graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTargetLog.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTargetLog.java Wed Apr 23 12:38:05 2014 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTargetLog.java Tue Apr 15 18:31:23 2014 +0200 @@ -171,7 +171,7 @@ } if (node instanceof DirectCallNode) { DirectCallNode callNode = (DirectCallNode) node; - if (callNode.isInliningForced()) { + if (callNode.isInlined()) { callNode.getCurrentRootNode().accept(this); } } diff -r 820c6d353358 -r 7f5c9079e24a graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleInliningHandler.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleInliningHandler.java Wed Apr 23 12:38:05 2014 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleInliningHandler.java Tue Apr 15 18:31:23 2014 +0200 @@ -94,7 +94,7 @@ int deepNodeCount; TruffleInliningResult recursiveResult; boolean recursiveCall = false; - if (target.inliningPerformed || depth > MAXIMUM_RECURSIVE_DEPTH) { + if (depth > MAXIMUM_RECURSIVE_DEPTH) { deepNodeCount = OptimizedCallUtils.countNonTrivialNodes(target, true); recursiveResult = null; } else { @@ -117,7 +117,7 @@ } private static double calculateFrequency(OptimizedCallTarget target, OptimizedDirectCallNode ocn) { - return (double) Math.max(1, target.getCompilationProfile().getCallCount()) / Math.max(1, ocn.getCallCount()); + return (double) Math.max(1, ocn.getCallCount()) / (double) Math.max(1, target.getCompilationProfile().getCallCount()); } private final static class ProfileScoreComparator implements Comparator {