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> {