changeset 10797:bb3cfaa7897c

Truffle: try out a new inlining policy
author Andreas Woess <andreas.woess@jku.at>
date Wed, 17 Jul 2013 18:02:19 +0200
parents b84bb0de0092
children 7d3e74190a09
files graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTarget.java graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCompilerOptions.java
diffstat 2 files changed, 13 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTarget.java	Wed Jul 17 16:05:48 2013 +0200
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTarget.java	Wed Jul 17 18:02:19 2013 +0200
@@ -265,15 +265,20 @@
 
             public boolean isWorthInlining(InlinableCallSiteInfo callSite) {
                 return callSite.getInlineNodeCount() <= TruffleInliningMaxCalleeSize.getValue() && callSite.getInlineNodeCount() + callerNodeCount <= TruffleInliningMaxCallerSize.getValue() &&
-                                callSite.getCallCount() > 0 && callSite.getRecursiveDepth() < TruffleInliningMaxRecursiveDepth.getValue();
+                                callSite.getCallCount() > 0 && callSite.getRecursiveDepth() < TruffleInliningMaxRecursiveDepth.getValue() &&
+                                (frequency(callSite) >= TruffleInliningMinFrequency.getValue() || callSite.getInlineNodeCount() <= TruffleInliningTrivialSize.getValue());
             }
 
             public double metric(InlinableCallSiteInfo callSite) {
-                double frequency = (double) callSite.getCallCount() / (double) callerInvocationCount;
-                double metric = ((double) callSite.getCallCount() / (double) callSite.getInlineNodeCount()) + frequency;
+                double cost = callSite.getInlineNodeCount();
+                double metric = frequency(callSite) / cost;
                 return metric;
             }
 
+            private double frequency(InlinableCallSiteInfo callSite) {
+                return (double) callSite.getCallCount() / (double) callerInvocationCount;
+            }
+
             public void sortByRelevance(List<InlinableCallSiteInfo> inlinableCallSites) {
                 Collections.sort(inlinableCallSites, new Comparator<InlinableCallSiteInfo>() {
 
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCompilerOptions.java	Wed Jul 17 16:05:48 2013 +0200
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCompilerOptions.java	Wed Jul 17 18:02:19 2013 +0200
@@ -58,11 +58,15 @@
     @Option(help = "")
     public static final OptionValue<Integer> TruffleGraphMaxNodes = new OptionValue<>(12000);
     @Option(help = "")
+    public static final OptionValue<Integer> TruffleInliningMaxRecursiveDepth = new OptionValue<>(2);
+    @Option(help = "")
     public static final OptionValue<Integer> TruffleInliningMaxCallerSize = new OptionValue<>(600);
     @Option(help = "")
     public static final OptionValue<Integer> TruffleInliningMaxCalleeSize = new OptionValue<>(62);
     @Option(help = "")
-    public static final OptionValue<Integer> TruffleInliningMaxRecursiveDepth = new OptionValue<>(2);
+    public static final OptionValue<Integer> TruffleInliningTrivialSize = new OptionValue<>(10);
+    @Option(help = "")
+    public static final OptionValue<Double> TruffleInliningMinFrequency = new OptionValue<>(0.3);
 
     // tracing
     @Option(help = "")