src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.phases.common/src/org/graalvm/compiler/phases/common/inlining/walker/InliningData.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot Cdiff src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.phases.common/src/org/graalvm/compiler/phases/common/inlining/walker/InliningData.java

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.phases.common/src/org/graalvm/compiler/phases/common/inlining/walker/InliningData.java

Print this page

        

*** 33,46 **** import java.util.Iterator; import java.util.LinkedList; import java.util.List; import org.graalvm.compiler.core.common.type.ObjectStamp; ! import org.graalvm.compiler.debug.Debug; ! import org.graalvm.compiler.debug.DebugCounter; import org.graalvm.compiler.debug.GraalError; - import org.graalvm.compiler.debug.internal.method.MethodMetricsInlineeScopeInfo; import org.graalvm.compiler.graph.Graph; import org.graalvm.compiler.graph.Node; import org.graalvm.compiler.nodes.CallTargetNode; import org.graalvm.compiler.nodes.Invoke; import org.graalvm.compiler.nodes.ParameterNode; --- 33,45 ---- import java.util.Iterator; import java.util.LinkedList; import java.util.List; import org.graalvm.compiler.core.common.type.ObjectStamp; ! import org.graalvm.compiler.debug.CounterKey; ! import org.graalvm.compiler.debug.DebugContext; import org.graalvm.compiler.debug.GraalError; import org.graalvm.compiler.graph.Graph; import org.graalvm.compiler.graph.Node; import org.graalvm.compiler.nodes.CallTargetNode; import org.graalvm.compiler.nodes.Invoke; import org.graalvm.compiler.nodes.ParameterNode;
*** 99,111 **** * @see #moveForward() */ public class InliningData { // Counters ! private static final DebugCounter counterInliningPerformed = Debug.counter("InliningPerformed"); ! private static final DebugCounter counterInliningRuns = Debug.counter("InliningRuns"); ! private static final DebugCounter counterInliningConsidered = Debug.counter("InliningConsidered"); /** * Call hierarchy from outer most call (i.e., compilation unit) to inner most callee. */ private final ArrayDeque<CallsiteHolder> graphQueue = new ArrayDeque<>(); --- 98,110 ---- * @see #moveForward() */ public class InliningData { // Counters ! private static final CounterKey counterInliningPerformed = DebugContext.counter("InliningPerformed"); ! private static final CounterKey counterInliningRuns = DebugContext.counter("InliningRuns"); ! private static final CounterKey counterInliningConsidered = DebugContext.counter("InliningConsidered"); /** * Call hierarchy from outer most call (i.e., compilation unit) to inner most callee. */ private final ArrayDeque<CallsiteHolder> graphQueue = new ArrayDeque<>();
*** 114,123 **** --- 113,123 ---- private final HighTierContext context; private final int maxMethodPerInlining; private final CanonicalizerPhase canonicalizer; private final InliningPolicy inliningPolicy; private final StructuredGraph rootGraph; + private final DebugContext debug; private int maxGraphs; public InliningData(StructuredGraph rootGraph, HighTierContext context, int maxMethodPerInlining, CanonicalizerPhase canonicalizer, InliningPolicy inliningPolicy, LinkedList<Invoke> rootInvokes) { assert rootGraph != null;
*** 125,134 **** --- 125,135 ---- this.maxMethodPerInlining = maxMethodPerInlining; this.canonicalizer = canonicalizer; this.inliningPolicy = inliningPolicy; this.maxGraphs = 1; this.rootGraph = rootGraph; + this.debug = rootGraph.getDebug(); invocationQueue.push(new MethodInvocation(null, 1.0, 1.0, null)); graphQueue.push(new CallsiteHolderExplorable(rootGraph, 1.0, 1.0, null, rootInvokes)); }
*** 393,410 **** @SuppressWarnings("try") private void doInline(CallsiteHolderExplorable callerCallsiteHolder, MethodInvocation calleeInvocation) { StructuredGraph callerGraph = callerCallsiteHolder.graph(); InlineInfo calleeInfo = calleeInvocation.callee(); try { ! OptionValues options = rootGraph.getOptions(); ! try (Debug.Scope scope = Debug.scope("doInline", callerGraph); Debug.Scope s = Debug.methodMetricsScope("InlineEnhancement", MethodMetricsInlineeScopeInfo.create(options), false)) { EconomicSet<Node> canonicalizedNodes = EconomicSet.create(Equivalence.IDENTITY); canonicalizedNodes.addAll(calleeInfo.invoke().asNode().usages()); EconomicSet<Node> parameterUsages = calleeInfo.inline(new Providers(context)); canonicalizedNodes.addAll(parameterUsages); ! counterInliningRuns.increment(); ! Debug.dump(Debug.DETAILED_LEVEL, callerGraph, "after %s", calleeInfo); Graph.Mark markBeforeCanonicalization = callerGraph.getMark(); canonicalizer.applyIncremental(callerGraph, context, canonicalizedNodes); --- 394,410 ---- @SuppressWarnings("try") private void doInline(CallsiteHolderExplorable callerCallsiteHolder, MethodInvocation calleeInvocation) { StructuredGraph callerGraph = callerCallsiteHolder.graph(); InlineInfo calleeInfo = calleeInvocation.callee(); try { ! try (DebugContext.Scope scope = debug.scope("doInline", callerGraph)) { EconomicSet<Node> canonicalizedNodes = EconomicSet.create(Equivalence.IDENTITY); canonicalizedNodes.addAll(calleeInfo.invoke().asNode().usages()); EconomicSet<Node> parameterUsages = calleeInfo.inline(new Providers(context)); canonicalizedNodes.addAll(parameterUsages); ! counterInliningRuns.increment(debug); ! debug.dump(DebugContext.DETAILED_LEVEL, callerGraph, "after %s", calleeInfo); Graph.Mark markBeforeCanonicalization = callerGraph.getMark(); canonicalizer.applyIncremental(callerGraph, context, canonicalizedNodes);
*** 415,434 **** } } callerCallsiteHolder.computeProbabilities(); ! counterInliningPerformed.increment(); } } catch (BailoutException bailout) { throw bailout; } catch (AssertionError | RuntimeException e) { throw new GraalError(e).addContext(calleeInfo.toString()); } catch (GraalError e) { throw e.addContext(calleeInfo.toString()); } catch (Throwable e) { ! throw Debug.handle(e); } } /** * --- 415,434 ---- } } callerCallsiteHolder.computeProbabilities(); ! counterInliningPerformed.increment(debug); } } catch (BailoutException bailout) { throw bailout; } catch (AssertionError | RuntimeException e) { throw new GraalError(e).addContext(calleeInfo.toString()); } catch (GraalError e) { throw e.addContext(calleeInfo.toString()); } catch (Throwable e) { ! throw debug.handle(e); } } /** *
*** 444,454 **** */ private boolean tryToInline(MethodInvocation calleeInvocation, int inliningDepth) { CallsiteHolderExplorable callerCallsiteHolder = (CallsiteHolderExplorable) currentGraph(); InlineInfo calleeInfo = calleeInvocation.callee(); assert callerCallsiteHolder.containsInvoke(calleeInfo.invoke()); ! counterInliningConsidered.increment(); if (inliningPolicy.isWorthInlining(context.getReplacements(), calleeInvocation, inliningDepth, true)) { doInline(callerCallsiteHolder, calleeInvocation); return true; } --- 444,454 ---- */ private boolean tryToInline(MethodInvocation calleeInvocation, int inliningDepth) { CallsiteHolderExplorable callerCallsiteHolder = (CallsiteHolderExplorable) currentGraph(); InlineInfo calleeInfo = calleeInvocation.callee(); assert callerCallsiteHolder.containsInvoke(calleeInfo.invoke()); ! counterInliningConsidered.increment(debug); if (inliningPolicy.isWorthInlining(context.getReplacements(), calleeInvocation, inliningDepth, true)) { doInline(callerCallsiteHolder, calleeInvocation); return true; }
*** 570,580 **** /** * Gets the call hierarchy of this inlining from outer most call to inner most callee. */ private Object[] inliningContext() { ! if (!Debug.isDumpEnabled(Debug.INFO_LEVEL)) { return NO_CONTEXT; } Object[] result = new Object[graphQueue.size()]; int i = 0; for (CallsiteHolder g : graphQueue) { --- 570,580 ---- /** * Gets the call hierarchy of this inlining from outer most call to inner most callee. */ private Object[] inliningContext() { ! if (!debug.isDumpEnabled(DebugContext.INFO_LEVEL)) { return NO_CONTEXT; } Object[] result = new Object[graphQueue.size()]; int i = 0; for (CallsiteHolder g : graphQueue) {
*** 735,752 **** /* * "all of currentInvocation's graphs processed" amounts to * "all concrete methods that come into question already had the callees they contain analyzed for inlining" */ popInvocation(); ! try (Debug.Scope s = Debug.scope("Inlining", inliningContext())) { if (tryToInline(currentInvocation, inliningDepth() + 1)) { // Report real progress only if we inline into the root graph return currentGraph().graph() == rootGraph; } return false; } catch (Throwable e) { ! throw Debug.handle(e); } } return false; } --- 735,752 ---- /* * "all of currentInvocation's graphs processed" amounts to * "all concrete methods that come into question already had the callees they contain analyzed for inlining" */ popInvocation(); ! try (DebugContext.Scope s = debug.scope("Inlining", inliningContext())) { if (tryToInline(currentInvocation, inliningDepth() + 1)) { // Report real progress only if we inline into the root graph return currentGraph().graph() == rootGraph; } return false; } catch (Throwable e) { ! throw debug.handle(e); } } return false; }
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.phases.common/src/org/graalvm/compiler/phases/common/inlining/walker/InliningData.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File