Mercurial > hg > truffle
changeset 15312:7f5c9079e24a
Truffle: fixes to the inlining heuristic.
author | Christian Humer <christian.humer@gmail.com> |
---|---|
date | Tue, 15 Apr 2014 18:31:23 +0200 |
parents | 820c6d353358 |
children | 9363fffa8b07 265c47be2308 |
files | graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTarget.java graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTargetLog.java graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleInliningHandler.java |
diffstat | 3 files changed, 6 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- 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); } } }
--- 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); } }
--- 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<TruffleInliningProfile> {