# HG changeset patch # User Miguel Garcia # Date 1400157838 -7200 # Node ID 7ce628bae4a5fa5e31386d92fcc9cfa779584795 # Parent ac62e3a72e02946d42e112ac87b575c46398556d [inlining] part 2, preparing to move tryToInline() and doInline() diff -r ac62e3a72e02 -r 7ce628bae4a5 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/InliningPhase.java --- 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 probabilities, CallsiteHolder callerCallsiteHolder, MethodInvocation calleeInfo, MethodInvocation parentInvocation, int inliningDepth, - HighTierContext context) { + /** + * @return true iff inlining was actually performed + */ + private static boolean tryToInline(ToDoubleFunction 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) {