# HG changeset patch # User Christian Humer # Date 1389882017 -3600 # Node ID 03b42f0fb635f9fe79316833fd5cf150d77d8b7d # Parent 32af063cc29c7f2f03b09e232eee12c0f31c6fb0 Truffle: extend inlining interface with custom reprofile counters. diff -r 32af063cc29c -r 03b42f0fb635 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/CompilationProfile.java --- 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; } diff -r 32af063cc29c -r 03b42f0fb635 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 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; } diff -r 32af063cc29c -r 03b42f0fb635 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleInlining.java --- 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(); } diff -r 32af063cc29c -r 03b42f0fb635 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleInliningImpl.java --- 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);