diff --git a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/graal/snippets/NonSnippetLowerings.java b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/graal/snippets/NonSnippetLowerings.java index 4a3383574fbf..60f8ed9ba6ea 100644 --- a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/graal/snippets/NonSnippetLowerings.java +++ b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/graal/snippets/NonSnippetLowerings.java @@ -112,6 +112,7 @@ import jdk.vm.ci.meta.DeoptimizationReason; import jdk.vm.ci.meta.JavaConstant; import jdk.vm.ci.meta.JavaKind; +import jdk.vm.ci.meta.JavaMethodProfile; import jdk.vm.ci.meta.JavaType; import jdk.vm.ci.meta.ResolvedJavaMethod; @@ -494,8 +495,8 @@ protected LoweredCallTargetNode createDirectCall(StructuredGraph graph, MethodCa protected IndirectCallTargetNode createIndirectCall(StructuredGraph graph, MethodCallTargetNode callTarget, NodeInputList parameters, SharedMethod method, JavaType[] signature, CallingConvention.Type callType, InvokeKind invokeKind, ValueNode entry) { - return graph.add(new SubstrateIndirectCallTargetNode(entry, parameters.toArray(new ValueNode[parameters.size()]), callTarget.returnStamp(), signature, method, callType, invokeKind, - ((SubstrateMethodCallTargetNode) callTarget).getMethodProfile())); + JavaMethodProfile methodProfile = callTarget instanceof SubstrateMethodCallTargetNode substrateCallTarget ? substrateCallTarget.getMethodProfile() : null; + return graph.add(new SubstrateIndirectCallTargetNode(entry, parameters.toArray(ValueNode.EMPTY_ARRAY), callTarget.returnStamp(), signature, method, callType, invokeKind, methodProfile)); } private static CallTargetNode createUnreachableCallTarget(LoweringTool tool, FixedNode node, NodeInputList parameters, StampPair returnStamp, JavaType[] signature, diff --git a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/nodes/SubstrateMethodCallTargetNode.java b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/nodes/SubstrateMethodCallTargetNode.java index cda372db451f..ecac94eb9d35 100644 --- a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/nodes/SubstrateMethodCallTargetNode.java +++ b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/nodes/SubstrateMethodCallTargetNode.java @@ -33,6 +33,12 @@ import jdk.vm.ci.meta.JavaTypeProfile; import jdk.vm.ci.meta.ResolvedJavaMethod; +/** + * Extension of {@link MethodCallTargetNode} that adds a {@link JavaMethodProfile} when available. + * Note that the replacement from {@link MethodCallTargetNode} to + * {@link SubstrateMethodCallTargetNode} is not mandatory. SVM code can introduce new + * {@link MethodCallTargetNode}s. + */ @NodeInfo public final class SubstrateMethodCallTargetNode extends MethodCallTargetNode { public static final NodeClass TYPE = NodeClass.create(SubstrateMethodCallTargetNode.class);