Mercurial > hg > graal-compiler
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);