changeset 15676:7ce628bae4a5

[inlining] part 2, preparing to move tryToInline() and doInline()
author Miguel Garcia <miguel.m.garcia@oracle.com>
date Thu, 15 May 2014 14:43:58 +0200
parents ac62e3a72e02
children 1b5ea45f0b87
files graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/InliningPhase.java
diffstat 1 files changed, 16 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/InliningPhase.java	Thu May 15 14:32:37 2014 +0200
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/InliningPhase.java	Thu May 15 14:43:58 2014 +0200
@@ -177,7 +177,10 @@
                         data.popInvocation();
                         final MethodInvocation parentInvoke = data.currentInvocation();
                         try (Scope s = Debug.scope("Inlining", data.inliningContext())) {
-                            tryToInline(probabilities, data.currentGraph(), currentInvocation, parentInvoke, data.inliningDepth() + 1, context);
+                            boolean wasInlined = tryToInline(probabilities, data.currentGraph(), currentInvocation, parentInvoke, data.inliningDepth() + 1, context, inliningPolicy, canonicalizer);
+                            if (wasInlined) {
+                                inliningCount++;
+                            }
                         } catch (Throwable e) {
                             throw Debug.handle(e);
                         }
@@ -190,18 +193,25 @@
         assert data.graphCount() == 0;
     }
 
-    private void tryToInline(ToDoubleFunction<FixedNode> probabilities, CallsiteHolder callerCallsiteHolder, MethodInvocation calleeInfo, MethodInvocation parentInvocation, int inliningDepth,
-                    HighTierContext context) {
+    /**
+     * @return true iff inlining was actually performed
+     */
+    private static boolean tryToInline(ToDoubleFunction<FixedNode> probabilities, CallsiteHolder callerCallsiteHolder, MethodInvocation calleeInfo, MethodInvocation parentInvocation,
+                    int inliningDepth, HighTierContext context, InliningPolicy inliningPolicy, CanonicalizerPhase canonicalizer) {
         InlineInfo callee = calleeInfo.callee();
         Assumptions callerAssumptions = parentInvocation.assumptions();
+        metricInliningConsidered.increment();
 
         if (inliningPolicy.isWorthInlining(probabilities, context.getReplacements(), callee, inliningDepth, calleeInfo.probability(), calleeInfo.relevance(), true)) {
             doInline(callerCallsiteHolder, calleeInfo, callerAssumptions, context, canonicalizer);
-            inliningCount++;
-        } else if (context.getOptimisticOptimizations().devirtualizeInvokes()) {
+            return true;
+        }
+
+        if (context.getOptimisticOptimizations().devirtualizeInvokes()) {
             callee.tryToDevirtualizeInvoke(context.getMetaAccess(), callerAssumptions);
         }
-        metricInliningConsidered.increment();
+
+        return false;
     }
 
     private static void doInline(CallsiteHolder callerCallsiteHolder, MethodInvocation calleeInfo, Assumptions callerAssumptions, HighTierContext context, CanonicalizerPhase canonicalizer) {