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