# HG changeset patch # User Miguel Garcia # Date 1400001479 -7200 # Node ID 396a483ccaa58157494a1a90f525ee10b0c67f84 # Parent c6ba248e9941eace473baf77746ca898a87a09fd [inlining] processNextInvoke(), readability diff -r c6ba248e9941 -r 396a483ccaa5 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 Tue May 13 19:11:03 2014 +0200 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/InliningPhase.java Tue May 13 19:17:59 2014 +0200 @@ -156,12 +156,11 @@ */ @Override protected void run(final StructuredGraph graph, final HighTierContext context) { - final InliningData data = new InliningData(graph, context.getAssumptions()); + final InliningData data = new InliningData(graph, context.getAssumptions(), maxMethodPerInlining, canonicalizer); ToDoubleFunction probabilities = new FixedNodeProbabilityCache(); while (data.hasUnprocessedGraphs()) { final MethodInvocation currentInvocation = data.currentInvocation(); - GraphInfo graphInfo = data.currentGraph(); if (!currentInvocation.isRoot() && !inliningPolicy.isWorthInlining(probabilities, context.getReplacements(), currentInvocation.callee(), data.inliningDepth(), currentInvocation.probability(), currentInvocation.relevance(), false)) { @@ -169,8 +168,8 @@ assert remainingGraphs > 0; data.popGraphs(remainingGraphs); data.popInvocation(); - } else if (graphInfo.hasRemainingInvokes() && inliningPolicy.continueInlining(graphInfo.graph())) { - InliningData.processNextInvoke(data, graphInfo, context, maxMethodPerInlining, canonicalizer); + } else if (data.currentGraph().hasRemainingInvokes() && inliningPolicy.continueInlining(data.currentGraph().graph())) { + data.processNextInvoke(context); } else { data.popGraph(); if (!currentInvocation.isRoot()) { @@ -426,12 +425,16 @@ */ private final ArrayDeque graphQueue; private final ArrayDeque invocationQueue; + private final int maxMethodPerInlining; + private final CanonicalizerPhase canonicalizer; private int maxGraphs; - public InliningData(StructuredGraph rootGraph, Assumptions rootAssumptions) { + public InliningData(StructuredGraph rootGraph, Assumptions rootAssumptions, int maxMethodPerInlining, CanonicalizerPhase canonicalizer) { this.graphQueue = new ArrayDeque<>(); this.invocationQueue = new ArrayDeque<>(); + this.maxMethodPerInlining = maxMethodPerInlining; + this.canonicalizer = canonicalizer; this.maxGraphs = 1; invocationQueue.push(new MethodInvocation(null, rootAssumptions, 1.0, 1.0)); @@ -441,25 +444,26 @@ /** * Process the next invoke and enqueue all its graphs for processing. */ - private static void processNextInvoke(InliningData data, GraphInfo graphInfo, HighTierContext context, int maxMethodPerInlining, CanonicalizerPhase canonicalizer) { + void processNextInvoke(HighTierContext context) { + GraphInfo graphInfo = currentGraph(); Invoke invoke = graphInfo.popInvoke(); - MethodInvocation callerInvocation = data.currentInvocation(); + MethodInvocation callerInvocation = currentInvocation(); Assumptions parentAssumptions = callerInvocation.assumptions(); - InlineInfo info = InliningUtil.getInlineInfo(data, invoke, maxMethodPerInlining, context.getReplacements(), parentAssumptions, context.getOptimisticOptimizations()); + InlineInfo info = InliningUtil.getInlineInfo(this, invoke, maxMethodPerInlining, context.getReplacements(), parentAssumptions, context.getOptimisticOptimizations()); if (info != null) { double invokeProbability = graphInfo.invokeProbability(invoke); double invokeRelevance = graphInfo.invokeRelevance(invoke); - MethodInvocation calleeInvocation = data.pushInvocation(info, parentAssumptions, invokeProbability, invokeRelevance); + MethodInvocation calleeInvocation = pushInvocation(info, parentAssumptions, invokeProbability, invokeRelevance); for (int i = 0; i < info.numberOfMethods(); i++) { Inlineable elem = DepthSearchUtil.getInlineableElement(info.methodAt(i), info.invoke(), context.replaceAssumptions(calleeInvocation.assumptions()), canonicalizer); info.setInlinableElement(i, elem); if (elem instanceof InlineableGraph) { - data.pushGraph(((InlineableGraph) elem).getGraph(), invokeProbability * info.probabilityAt(i), invokeRelevance * info.relevanceAt(i)); + pushGraph(((InlineableGraph) elem).getGraph(), invokeProbability * info.probabilityAt(i), invokeRelevance * info.relevanceAt(i)); } else { assert elem instanceof InlineableMacroNode; - data.pushDummyGraph(); + pushDummyGraph(); } } }