# HG changeset patch # User Miguel Garcia # Date 1400158271 -7200 # Node ID d8a79b70778c5fd7a02cc84ebe116cd5b0e229d9 # Parent 1b5ea45f0b8758457fe74ed21921ed1d0abb6a5d [inlining] moved tryToInline() to InliningData, as prereq for upcoming steps diff -r 1b5ea45f0b87 -r d8a79b70778c 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:48:19 2014 +0200 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/InliningPhase.java Thu May 15 14:51:11 2014 +0200 @@ -64,8 +64,6 @@ private int inliningCount; private int maxMethodPerInlining = Integer.MAX_VALUE; - private static final DebugMetric metricInliningConsidered = Debug.metric("InliningConsidered"); - public InliningPhase(CanonicalizerPhase canonicalizer) { this(new GreedyInliningPolicy(null), canonicalizer); } @@ -174,7 +172,8 @@ data.popInvocation(); final MethodInvocation parentInvoke = data.currentInvocation(); try (Scope s = Debug.scope("Inlining", data.inliningContext())) { - boolean wasInlined = tryToInline(probabilities, data.currentGraph(), currentInvocation, parentInvoke, data.inliningDepth() + 1, context, inliningPolicy, canonicalizer); + boolean wasInlined = InliningData.tryToInline(probabilities, data.currentGraph(), currentInvocation, parentInvoke, data.inliningDepth() + 1, context, inliningPolicy, + canonicalizer); if (wasInlined) { inliningCount++; } @@ -191,27 +190,6 @@ } /** - * @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)) { - InliningData.doInline(callerCallsiteHolder, calleeInfo, callerAssumptions, context, canonicalizer); - return true; - } - - if (context.getOptimisticOptimizations().devirtualizeInvokes()) { - callee.tryToDevirtualizeInvoke(context.getMetaAccess(), callerAssumptions); - } - - return false; - } - - /** * Holds the data for building the callee graphs recursively: graphs and invocations (each * invocation can have multiple graphs). */ @@ -221,6 +199,7 @@ // Metrics private static final DebugMetric metricInliningPerformed = Debug.metric("InliningPerformed"); private static final DebugMetric metricInliningRuns = Debug.metric("InliningRuns"); + private static final DebugMetric metricInliningConsidered = Debug.metric("InliningConsidered"); /** * Call hierarchy from outer most call (i.e., compilation unit) to inner most callee. @@ -282,6 +261,27 @@ } /** + * @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); + return true; + } + + if (context.getOptimisticOptimizations().devirtualizeInvokes()) { + callee.tryToDevirtualizeInvoke(context.getMetaAccess(), callerAssumptions); + } + + return false; + } + + /** * Process the next invoke and enqueue all its graphs for processing. */ void processNextInvoke(HighTierContext context) {