changeset 13703:03b42f0fb635

Truffle: extend inlining interface with custom reprofile counters.
author Christian Humer <christian.humer@gmail.com>
date Thu, 16 Jan 2014 15:20:17 +0100
parents 32af063cc29c
children 10a2d66262ae
files graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/CompilationProfile.java graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTarget.java graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleInlining.java graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleInliningImpl.java
diffstat 4 files changed, 29 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/CompilationProfile.java	Thu Jan 16 12:18:29 2014 +0100
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/CompilationProfile.java	Thu Jan 16 15:20:17 2014 +0100
@@ -26,8 +26,6 @@
 
 public class CompilationProfile {
 
-    private static final int MIN_INVOKES_AFTER_INLINING = 2;
-
     private int invokeCounter;
     private int originalInvokeCounter;
     private int loopAndInvokeCounter;
@@ -102,9 +100,9 @@
         loopAndInvokeCounter--;
     }
 
-    void reportInliningPerformed() {
-        invokeCounter = MIN_INVOKES_AFTER_INLINING;
-        int inliningReprofileCount = TruffleInliningReprofileCount.getValue();
+    void reportInliningPerformed(TruffleInlining inlining) {
+        invokeCounter = inlining.getInvocationReprofileCount();
+        int inliningReprofileCount = inlining.getReprofileCount();
         loopAndInvokeCounter = inliningReprofileCount;
         originalInvokeCounter = inliningReprofileCount;
     }
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTarget.java	Thu Jan 16 12:18:29 2014 +0100
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTarget.java	Thu Jan 16 15:20:17 2014 +0100
@@ -55,7 +55,6 @@
         super(rootNode, descriptor);
         this.compiler = compiler;
         this.compilationProfile = new CompilationProfile(compilationThreshold, invokeCounter, rootNode.toString());
-        this.inlining = new TruffleInliningImpl();
         this.rootNode.setCallTarget(this);
 
         if (TruffleUseTimeForCompilationDecision.getValue()) {
@@ -68,6 +67,8 @@
         if (TruffleCallTargetProfiling.getValue()) {
             registerCallTarget(this);
         }
+        this.inlining = new TruffleInliningImpl();
+
     }
 
     @Override
@@ -204,7 +205,7 @@
     public boolean inline() {
         boolean result = inlining.performInlining(this);
         if (result) {
-            compilationProfile.reportInliningPerformed();
+            compilationProfile.reportInliningPerformed(inlining);
         }
         return result;
     }
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleInlining.java	Thu Jan 16 12:18:29 2014 +0100
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleInlining.java	Thu Jan 16 15:20:17 2014 +0100
@@ -24,5 +24,18 @@
 
 public interface TruffleInlining {
 
+    /** Returns true if reprofiling is required else false. */
     boolean performInlining(OptimizedCallTarget callTarget);
+
+    /**
+     * Returns the minimum number of invocations required until the next inlining can occur. Only
+     * used if {@link #performInlining(OptimizedCallTarget)} returned true.
+     */
+    int getInvocationReprofileCount();
+
+    /**
+     * Returns the number of invocations or loop invocations required until the next inlining can
+     * occur. Only used if {@link #performInlining(OptimizedCallTarget)} returned true.
+     */
+    int getReprofileCount();
 }
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleInliningImpl.java	Thu Jan 16 12:18:29 2014 +0100
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleInliningImpl.java	Thu Jan 16 15:20:17 2014 +0100
@@ -33,8 +33,18 @@
 
 class TruffleInliningImpl implements TruffleInlining {
 
+    private static final int MIN_INVOKES_AFTER_INLINING = 2;
+
     private static final PrintStream OUT = TTY.out().out();
 
+    public int getReprofileCount() {
+        return TruffleCompilerOptions.TruffleInliningReprofileCount.getValue();
+    }
+
+    public int getInvocationReprofileCount() {
+        return MIN_INVOKES_AFTER_INLINING;
+    }
+
     @Override
     public boolean performInlining(OptimizedCallTarget target) {
         final InliningPolicy policy = new InliningPolicy(target);