# HG changeset patch # User Miguel Garcia # Date 1402047670 -7200 # Node ID 61cf8b61ee4e9c3a5fc9b39e83790127e0546626 # Parent 1461d7627707f4c722a88d4b1513147bf3e28e4d [inliner] added a factory method in InlineInfo to make code uniform elsewhere diff -r 1461d7627707 -r 61cf8b61ee4e graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/AbstractInlineInfo.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/AbstractInlineInfo.java Fri Jun 06 11:24:43 2014 +0200 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/AbstractInlineInfo.java Fri Jun 06 11:41:10 2014 +0200 @@ -33,6 +33,9 @@ import com.oracle.graal.phases.common.inlining.info.elem.Inlineable; import com.oracle.graal.phases.common.inlining.info.elem.InlineableMacroNode; import com.oracle.graal.phases.common.inlining.info.elem.InlineableGraph; +import com.oracle.graal.phases.common.inlining.walker.CallsiteHolder; +import com.oracle.graal.phases.common.inlining.walker.CallsiteHolderExplorable; +import com.oracle.graal.phases.common.inlining.walker.InliningData; import com.oracle.graal.phases.tiers.HighTierContext; public abstract class AbstractInlineInfo implements InlineInfo { @@ -89,4 +92,15 @@ setInlinableElement(i, elem); } } + + public final CallsiteHolder buildCallsiteHolderForElement(int index, double invokeProbability, double invokeRelevance) { + Inlineable elem = inlineableElementAt(index); + if (elem instanceof InlineableGraph) { + InlineableGraph ig = (InlineableGraph) elem; + return new CallsiteHolderExplorable(ig.getGraph(), invokeProbability * probabilityAt(index), invokeRelevance * relevanceAt(index)); + } else { + assert elem instanceof InlineableMacroNode; + return InliningData.DUMMY_CALLSITE_HOLDER; + } + } } diff -r 1461d7627707 -r 61cf8b61ee4e graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/InlineInfo.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/InlineInfo.java Fri Jun 06 11:24:43 2014 +0200 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/InlineInfo.java Fri Jun 06 11:41:10 2014 +0200 @@ -32,6 +32,7 @@ import com.oracle.graal.nodes.StructuredGraph; import com.oracle.graal.phases.common.CanonicalizerPhase; import com.oracle.graal.phases.common.inlining.info.elem.Inlineable; +import com.oracle.graal.phases.common.inlining.walker.CallsiteHolder; import com.oracle.graal.phases.tiers.HighTierContext; import com.oracle.graal.phases.util.Providers; @@ -86,4 +87,6 @@ boolean shouldInline(); void populateInlinableElements(HighTierContext context, Assumptions calleeAssumptions, CanonicalizerPhase canonicalizer); + + CallsiteHolder buildCallsiteHolderForElement(int index, double invokeProbability, double invokeRelevance); } diff -r 1461d7627707 -r 61cf8b61ee4e graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/walker/InliningData.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/walker/InliningData.java Fri Jun 06 11:24:43 2014 +0200 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/walker/InliningData.java Fri Jun 06 11:41:10 2014 +0200 @@ -58,7 +58,7 @@ */ public class InliningData { - private static final CallsiteHolder DUMMY_CALLSITE_HOLDER = new CallsiteHolderDummy(); + public static final CallsiteHolder DUMMY_CALLSITE_HOLDER = new CallsiteHolderDummy(); // Metrics private static final DebugMetric metricInliningPerformed = Debug.metric("InliningPerformed"); private static final DebugMetric metricInliningRuns = Debug.metric("InliningRuns"); @@ -88,7 +88,7 @@ Assumptions rootAssumptions = context.getAssumptions(); invocationQueue.push(new MethodInvocation(null, rootAssumptions, 1.0, 1.0)); - pushExplorableGraph(rootGraph, 1.0, 1.0); + graphQueue.push(new CallsiteHolderExplorable(rootGraph, 1.0, 1.0)); } private String checkTargetConditionsHelper(ResolvedJavaMethod method) { @@ -421,18 +421,6 @@ return graphQueue.size(); } - private void pushExplorableGraph(StructuredGraph graph, double probability, double relevance) { - assert graph != null; - assert !contains(graph); - graphQueue.push(new CallsiteHolderExplorable(graph, probability, relevance)); - assert graphQueue.size() <= maxGraphs; - } - - private void pushDummyGraph() { - graphQueue.push(DUMMY_CALLSITE_HOLDER); - assert graphQueue.size() <= maxGraphs; - } - public boolean hasUnprocessedGraphs() { return !graphQueue.isEmpty(); } @@ -482,13 +470,10 @@ double invokeProbability = methodInvocation.probability(); double invokeRelevance = methodInvocation.relevance(); for (int i = 0; i < info.numberOfMethods(); i++) { - Inlineable elem = info.inlineableElementAt(i); - if (elem instanceof InlineableGraph) { - pushExplorableGraph(((InlineableGraph) elem).getGraph(), invokeProbability * info.probabilityAt(i), invokeRelevance * info.relevanceAt(i)); - } else { - assert elem instanceof InlineableMacroNode; - pushDummyGraph(); - } + CallsiteHolder ch = info.buildCallsiteHolderForElement(i, invokeProbability, invokeRelevance); + assert (ch == DUMMY_CALLSITE_HOLDER) || !contains(ch.graph()); + graphQueue.push(ch); + assert graphQueue.size() <= maxGraphs; } } @@ -536,6 +521,7 @@ } private boolean contains(StructuredGraph graph) { + assert graph != null; for (CallsiteHolder info : graphQueue) { if (info.graph() == graph) { return true;