src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.phases.common/src/org/graalvm/compiler/phases/common/inlining/InliningUtil.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/InliningUtil.java

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

Print this page

        

*** 20,48 **** * or visit www.oracle.com if you need additional information or have any * questions. */ package org.graalvm.compiler.phases.common.inlining; ! import jdk.vm.ci.code.BytecodeFrame; ! import jdk.vm.ci.meta.Assumptions; ! import jdk.vm.ci.meta.DeoptimizationAction; ! import jdk.vm.ci.meta.DeoptimizationReason; ! import jdk.vm.ci.meta.JavaConstant; ! import jdk.vm.ci.meta.JavaKind; ! import jdk.vm.ci.meta.ResolvedJavaMethod; ! import jdk.vm.ci.meta.ResolvedJavaType; import org.graalvm.compiler.api.replacements.MethodSubstitution; import org.graalvm.compiler.core.common.GraalOptions; import org.graalvm.compiler.core.common.type.Stamp; import org.graalvm.compiler.core.common.type.StampFactory; import org.graalvm.compiler.core.common.type.TypeReference; import org.graalvm.compiler.core.common.util.Util; ! import org.graalvm.compiler.debug.Debug; ! import org.graalvm.compiler.debug.Debug.Scope; import org.graalvm.compiler.debug.GraalError; - import org.graalvm.compiler.debug.internal.method.MethodMetricsImpl; - import org.graalvm.compiler.debug.internal.method.MethodMetricsInlineeScopeInfo; import org.graalvm.compiler.graph.GraalGraphError; import org.graalvm.compiler.graph.Graph; import org.graalvm.compiler.graph.Graph.DuplicationReplacement; import org.graalvm.compiler.graph.Graph.NodeEventScope; import org.graalvm.compiler.graph.Node; --- 20,47 ---- * or visit www.oracle.com if you need additional information or have any * questions. */ package org.graalvm.compiler.phases.common.inlining; ! import static jdk.vm.ci.meta.DeoptimizationAction.InvalidateReprofile; ! import static jdk.vm.ci.meta.DeoptimizationReason.NullCheckException; ! import static org.graalvm.compiler.core.common.GraalOptions.HotSpotPrintInlining; ! ! import java.lang.reflect.Constructor; ! import java.util.ArrayDeque; ! import java.util.ArrayList; ! import java.util.List; ! import java.util.function.Consumer; ! import org.graalvm.compiler.api.replacements.MethodSubstitution; import org.graalvm.compiler.core.common.GraalOptions; import org.graalvm.compiler.core.common.type.Stamp; import org.graalvm.compiler.core.common.type.StampFactory; import org.graalvm.compiler.core.common.type.TypeReference; import org.graalvm.compiler.core.common.util.Util; ! import org.graalvm.compiler.debug.DebugContext; import org.graalvm.compiler.debug.GraalError; import org.graalvm.compiler.graph.GraalGraphError; import org.graalvm.compiler.graph.Graph; import org.graalvm.compiler.graph.Graph.DuplicationReplacement; import org.graalvm.compiler.graph.Graph.NodeEventScope; import org.graalvm.compiler.graph.Node;
*** 95,113 **** import org.graalvm.util.EconomicSet; import org.graalvm.util.Equivalence; import org.graalvm.util.UnmodifiableEconomicMap; import org.graalvm.util.UnmodifiableMapCursor; ! import java.lang.reflect.Constructor; ! import java.util.ArrayDeque; ! import java.util.ArrayList; ! import java.util.List; ! import java.util.function.Consumer; ! ! import static jdk.vm.ci.meta.DeoptimizationAction.InvalidateReprofile; ! import static jdk.vm.ci.meta.DeoptimizationReason.NullCheckException; ! import static org.graalvm.compiler.core.common.GraalOptions.HotSpotPrintInlining; public class InliningUtil extends ValueMergeUtil { private static final String inliningDecisionsScopeString = "InliningDecisions"; --- 94,111 ---- import org.graalvm.util.EconomicSet; import org.graalvm.util.Equivalence; import org.graalvm.util.UnmodifiableEconomicMap; import org.graalvm.util.UnmodifiableMapCursor; ! import jdk.vm.ci.code.BytecodeFrame; ! import jdk.vm.ci.meta.Assumptions; ! import jdk.vm.ci.meta.DeoptimizationAction; ! import jdk.vm.ci.meta.DeoptimizationReason; ! import jdk.vm.ci.meta.JavaConstant; ! import jdk.vm.ci.meta.JavaKind; ! import jdk.vm.ci.meta.ResolvedJavaMethod; ! import jdk.vm.ci.meta.ResolvedJavaType; public class InliningUtil extends ValueMergeUtil { private static final String inliningDecisionsScopeString = "InliningDecisions";
*** 133,197 **** } public static void logInliningDecision(InlineInfo info, int inliningDepth, boolean allowLogging, boolean success, String msg, final Object... args) { if (allowLogging) { printInlining(info, inliningDepth, success, msg, args); ! if (shouldLogInliningDecision()) { ! logInliningDecision(methodName(info), success, msg, args); } } } @SuppressWarnings("try") ! public static void logInliningDecision(final String msg, final Object... args) { ! try (Scope s = Debug.scope(inliningDecisionsScopeString)) { // Can't use log here since we are varargs ! if (Debug.isLogEnabled()) { ! Debug.logv(msg, args); } } } public static void logNotInlinedMethod(Invoke invoke, String msg) { ! if (shouldLogInliningDecision()) { String methodString = invoke.toString(); if (invoke.callTarget() == null) { methodString += " callTarget=null"; } else { String targetName = invoke.callTarget().targetName(); if (!methodString.endsWith(targetName)) { methodString += " " + targetName; } } ! logInliningDecision(methodString, false, msg, new Object[0]); } } public static void logNotInlined(Invoke invoke, int inliningDepth, ResolvedJavaMethod method, String msg) { logNotInlinedInvoke(invoke, inliningDepth, method, msg, new Object[0]); } public static void logNotInlinedInvoke(Invoke invoke, int inliningDepth, ResolvedJavaMethod method, String msg, Object... args) { printInlining(method, invoke, inliningDepth, false, msg, args); ! if (shouldLogInliningDecision()) { String methodString = methodName(method, invoke); ! logInliningDecision(methodString, false, msg, args); } } ! private static void logInliningDecision(final String methodString, final boolean success, final String msg, final Object... args) { String inliningMsg = "inlining " + methodString + ": " + msg; if (!success) { inliningMsg = "not " + inliningMsg; } ! logInliningDecision(inliningMsg, args); } @SuppressWarnings("try") ! public static boolean shouldLogInliningDecision() { ! try (Scope s = Debug.scope(inliningDecisionsScopeString)) { ! return Debug.isLogEnabled(); } } private static String methodName(ResolvedJavaMethod method, Invoke invoke) { if (invoke != null && invoke.stateAfter() != null) { --- 131,198 ---- } public static void logInliningDecision(InlineInfo info, int inliningDepth, boolean allowLogging, boolean success, String msg, final Object... args) { if (allowLogging) { printInlining(info, inliningDepth, success, msg, args); ! DebugContext debug = info.graph().getDebug(); ! if (shouldLogInliningDecision(debug)) { ! logInliningDecision(debug, methodName(info), success, msg, args); } } } @SuppressWarnings("try") ! public static void logInliningDecision(DebugContext debug, final String msg, final Object... args) { ! try (DebugContext.Scope s = debug.scope(inliningDecisionsScopeString)) { // Can't use log here since we are varargs ! if (debug.isLogEnabled()) { ! debug.logv(msg, args); } } } public static void logNotInlinedMethod(Invoke invoke, String msg) { ! DebugContext debug = invoke.asNode().getDebug(); ! if (shouldLogInliningDecision(debug)) { String methodString = invoke.toString(); if (invoke.callTarget() == null) { methodString += " callTarget=null"; } else { String targetName = invoke.callTarget().targetName(); if (!methodString.endsWith(targetName)) { methodString += " " + targetName; } } ! logInliningDecision(debug, methodString, false, msg, new Object[0]); } } public static void logNotInlined(Invoke invoke, int inliningDepth, ResolvedJavaMethod method, String msg) { logNotInlinedInvoke(invoke, inliningDepth, method, msg, new Object[0]); } public static void logNotInlinedInvoke(Invoke invoke, int inliningDepth, ResolvedJavaMethod method, String msg, Object... args) { + DebugContext debug = invoke.asNode().getDebug(); printInlining(method, invoke, inliningDepth, false, msg, args); ! if (shouldLogInliningDecision(debug)) { String methodString = methodName(method, invoke); ! logInliningDecision(debug, methodString, false, msg, args); } } ! private static void logInliningDecision(DebugContext debug, final String methodString, final boolean success, final String msg, final Object... args) { String inliningMsg = "inlining " + methodString + ": " + msg; if (!success) { inliningMsg = "not " + inliningMsg; } ! logInliningDecision(debug, inliningMsg, args); } @SuppressWarnings("try") ! public static boolean shouldLogInliningDecision(DebugContext debug) { ! try (DebugContext.Scope s = debug.scope(inliningDecisionsScopeString)) { ! return debug.isLogEnabled(); } } private static String methodName(ResolvedJavaMethod method, Invoke invoke) { if (invoke != null && invoke.stateAfter() != null) {
*** 276,287 **** */ @SuppressWarnings("try") public static UnmodifiableEconomicMap<Node, Node> inline(Invoke invoke, StructuredGraph inlineGraph, boolean receiverNullCheck, ResolvedJavaMethod inlineeMethod) { FixedNode invokeNode = invoke.asNode(); StructuredGraph graph = invokeNode.graph(); - MethodMetricsInlineeScopeInfo m = MethodMetricsInlineeScopeInfo.create(graph.getOptions()); - try (Debug.Scope s = Debug.methodMetricsScope("InlineEnhancement", m, false)) { final NodeInputList<ValueNode> parameters = invoke.callTarget().arguments(); assert inlineGraph.getGuardsStage().ordinal() >= graph.getGuardsStage().ordinal(); assert !invokeNode.graph().isAfterFloatingReadPhase() : "inline isn't handled correctly after floating reads phase"; --- 277,286 ----
*** 386,401 **** } finishInlining(invoke, graph, firstCFGNode, returnNodes, unwindNode, inlineGraph.getAssumptions(), inlineGraph); GraphUtil.killCFG(invokeNode); - if (Debug.isMethodMeterEnabled() && m != null) { - MethodMetricsImpl.recordInlinee(m.getRootMethod(), invoke.asNode().graph().method(), inlineeMethod); - } return duplicates; } - } /** * Inline {@code inlineGraph} into the current replacing the node {@code Invoke} and return the * set of nodes which should be canonicalized. The set should only contain nodes which modified * by the inlining since the current graph and {@code inlineGraph} are expected to already be --- 385,396 ----
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.phases.common/src/org/graalvm/compiler/phases/common/inlining/InliningUtil.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File