Skip to content

Commit c6c88ce

Browse files
committed
[GR-55021] Replace the use of the IndirectCallTargetNode with the SubstrateIndirectCallTargetNode in the substratevm
PullRequest: graal/18208
2 parents cf8346d + 9576c47 commit c6c88ce

File tree

7 files changed

+77
-12
lines changed

7 files changed

+77
-12
lines changed

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/graal/replacements/SubstrateGraphKit.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import com.oracle.svm.core.nodes.CFunctionCaptureNode;
3535
import com.oracle.svm.core.nodes.CFunctionEpilogueNode;
3636
import com.oracle.svm.core.nodes.CFunctionPrologueNode;
37+
import com.oracle.svm.core.nodes.SubstrateIndirectCallTargetNode;
3738
import com.oracle.svm.core.nodes.SubstrateMethodCallTargetNode;
3839
import com.oracle.svm.core.thread.VMThreads.StatusSupport;
3940
import com.oracle.svm.core.util.VMError;
@@ -54,7 +55,6 @@
5455
import jdk.graal.compiler.nodes.ConstantNode;
5556
import jdk.graal.compiler.nodes.FixedNode;
5657
import jdk.graal.compiler.nodes.FrameState;
57-
import jdk.graal.compiler.nodes.IndirectCallTargetNode;
5858
import jdk.graal.compiler.nodes.InvokeNode;
5959
import jdk.graal.compiler.nodes.InvokeWithExceptionNode;
6060
import jdk.graal.compiler.nodes.MergeNode;
@@ -259,7 +259,7 @@ private InvokeNode createIndirectCall(ValueNode targetAddress, List<ValueNode> a
259259

260260
int bci = bci();
261261
CallTargetNode callTarget = getGraph().add(
262-
new IndirectCallTargetNode(targetAddress, args.toArray(new ValueNode[args.size()]), StampPair.createSingle(returnStamp), parameterTypes, null,
262+
new SubstrateIndirectCallTargetNode(targetAddress, args.toArray(new ValueNode[args.size()]), StampPair.createSingle(returnStamp), parameterTypes, null,
263263
convention, InvokeKind.Static));
264264
InvokeNode invoke = append(new InvokeNode(callTarget, bci));
265265

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/graal/snippets/NonSnippetLowerings.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@
5252
import com.oracle.svm.core.imagelayer.DynamicImageLayerInfo;
5353
import com.oracle.svm.core.meta.SharedMethod;
5454
import com.oracle.svm.core.meta.SubstrateObjectConstant;
55+
import com.oracle.svm.core.nodes.SubstrateIndirectCallTargetNode;
56+
import com.oracle.svm.core.nodes.SubstrateMethodCallTargetNode;
5557
import com.oracle.svm.core.snippets.ImplicitExceptions;
5658
import com.oracle.svm.core.snippets.SnippetRuntime;
5759
import com.oracle.svm.core.snippets.SubstrateForeignCallTarget;
@@ -417,7 +419,7 @@ public void lower(FixedNode node, LoweringTool tool) {
417419
ValueNode offset = ConstantNode.forIntegerKind(ConfigurationValues.getWordKind(), targetMethod.getImageCodeOffset(), graph);
418420
AddressNode address = graph.unique(new OffsetAddressNode(codeStart, offset));
419421

420-
loweredCallTarget = graph.add(new IndirectCallTargetNode(
422+
loweredCallTarget = graph.add(new SubstrateIndirectCallTargetNode(
421423
address, parameters.toArray(new ValueNode[parameters.size()]), callTarget.returnStamp(), signature, targetMethod, callType, invokeKind));
422424
graph.addBeforeFixed(node, codeStart);
423425
}
@@ -491,7 +493,8 @@ protected LoweredCallTargetNode createDirectCall(StructuredGraph graph, MethodCa
491493

492494
protected IndirectCallTargetNode createIndirectCall(StructuredGraph graph, MethodCallTargetNode callTarget, NodeInputList<ValueNode> parameters, SharedMethod method, JavaType[] signature,
493495
CallingConvention.Type callType, InvokeKind invokeKind, ValueNode entry) {
494-
return graph.add(new IndirectCallTargetNode(entry, parameters.toArray(new ValueNode[parameters.size()]), callTarget.returnStamp(), signature, method, callType, invokeKind));
496+
return graph.add(new SubstrateIndirectCallTargetNode(entry, parameters.toArray(new ValueNode[parameters.size()]), callTarget.returnStamp(), signature, method, callType, invokeKind,
497+
((SubstrateMethodCallTargetNode) callTarget).getMethodProfile()));
495498
}
496499

497500
private static CallTargetNode createUnreachableCallTarget(LoweringTool tool, FixedNode node, NodeInputList<ValueNode> parameters, StampPair returnStamp, JavaType[] signature,
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
/*
2+
* Copyright (c) 2024, 2024, Oracle and/or its affiliates. All rights reserved.
3+
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4+
*
5+
* This code is free software; you can redistribute it and/or modify it
6+
* under the terms of the GNU General Public License version 2 only, as
7+
* published by the Free Software Foundation. Oracle designates this
8+
* particular file as subject to the "Classpath" exception as provided
9+
* by Oracle in the LICENSE file that accompanied this code.
10+
*
11+
* This code is distributed in the hope that it will be useful, but WITHOUT
12+
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13+
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14+
* version 2 for more details (a copy is included in the LICENSE file that
15+
* accompanied this code).
16+
*
17+
* You should have received a copy of the GNU General Public License version
18+
* 2 along with this work; if not, write to the Free Software Foundation,
19+
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20+
*
21+
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22+
* or visit www.oracle.com if you need additional information or have any
23+
* questions.
24+
*/
25+
package com.oracle.svm.core.nodes;
26+
27+
import jdk.graal.compiler.core.common.type.StampPair;
28+
import jdk.graal.compiler.graph.NodeClass;
29+
import jdk.graal.compiler.nodeinfo.NodeInfo;
30+
import jdk.graal.compiler.nodes.IndirectCallTargetNode;
31+
import jdk.graal.compiler.nodes.ValueNode;
32+
import jdk.vm.ci.code.CallingConvention;
33+
import jdk.vm.ci.meta.JavaMethodProfile;
34+
import jdk.vm.ci.meta.JavaType;
35+
import jdk.vm.ci.meta.ResolvedJavaMethod;
36+
37+
@NodeInfo
38+
public class SubstrateIndirectCallTargetNode extends IndirectCallTargetNode {
39+
public static final NodeClass<SubstrateIndirectCallTargetNode> TYPE = NodeClass.create(SubstrateIndirectCallTargetNode.class);
40+
41+
private final JavaMethodProfile methodProfile;
42+
43+
public SubstrateIndirectCallTargetNode(ValueNode computedAddress, ValueNode[] arguments, StampPair returnStamp, JavaType[] signature, ResolvedJavaMethod target,
44+
CallingConvention.Type callType, InvokeKind invokeKind, JavaMethodProfile methodProfile) {
45+
this(TYPE, computedAddress, arguments, returnStamp, signature, target, callType, invokeKind, methodProfile);
46+
}
47+
48+
public SubstrateIndirectCallTargetNode(ValueNode computedAddress, ValueNode[] arguments, StampPair returnStamp, JavaType[] signature, ResolvedJavaMethod target,
49+
CallingConvention.Type callType, InvokeKind invokeKind) {
50+
this(TYPE, computedAddress, arguments, returnStamp, signature, target, callType, invokeKind, null);
51+
}
52+
53+
protected SubstrateIndirectCallTargetNode(NodeClass<? extends SubstrateIndirectCallTargetNode> type, ValueNode computedAddress, ValueNode[] arguments, StampPair returnStamp,
54+
JavaType[] signature, ResolvedJavaMethod target, CallingConvention.Type callType, InvokeKind invokeKind, JavaMethodProfile methodProfile) {
55+
super(type, computedAddress, arguments, returnStamp, signature, target, callType, invokeKind);
56+
this.methodProfile = methodProfile;
57+
}
58+
59+
public JavaMethodProfile getMethodProfile() {
60+
return methodProfile;
61+
}
62+
}

substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jni/JNIJavaCallVariantWrapperMethod.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import com.oracle.svm.core.graal.nodes.VaListNextArgNode;
4242
import com.oracle.svm.core.jni.CallVariant;
4343
import com.oracle.svm.core.jni.JNIJavaCallVariantWrapperHolder;
44+
import com.oracle.svm.core.nodes.SubstrateIndirectCallTargetNode;
4445
import com.oracle.svm.core.util.VMError;
4546
import com.oracle.svm.hosted.code.EntryPointCallStubMethod;
4647

@@ -56,7 +57,6 @@
5657
import jdk.graal.compiler.nodes.CallTargetNode.InvokeKind;
5758
import jdk.graal.compiler.nodes.ConstantNode;
5859
import jdk.graal.compiler.nodes.FixedWithNextNode;
59-
import jdk.graal.compiler.nodes.IndirectCallTargetNode;
6060
import jdk.graal.compiler.nodes.InvokeWithExceptionNode;
6161
import jdk.graal.compiler.nodes.NodeView;
6262
import jdk.graal.compiler.nodes.StructuredGraph;
@@ -166,7 +166,7 @@ public StructuredGraph buildGraph(DebugContext debug, AnalysisMethod method, Hos
166166
ValueNode formerPendingException = kit.invokeGetAndClearPendingException();
167167

168168
StampPair returnStamp = StampFactory.forDeclaredType(kit.getAssumptions(), invokeSignature.getReturnType(), false);
169-
CallTargetNode callTarget = new IndirectCallTargetNode(callAddress, args.toArray(ValueNode[]::new), returnStamp, invokeSignature.toParameterTypes(null),
169+
CallTargetNode callTarget = new SubstrateIndirectCallTargetNode(callAddress, args.toArray(ValueNode[]::new), returnStamp, invokeSignature.toParameterTypes(null),
170170
null, SubstrateCallingConventionKind.Java.toType(true), InvokeKind.Static);
171171

172172
int invokeBci = kit.bci();

substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/jni/JNIJavaCallWrapperMethod.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import com.oracle.svm.core.graal.nodes.LoweredDeadEndNode;
3636
import com.oracle.svm.core.jni.JNIJavaCallWrapperHolder;
3737
import com.oracle.svm.core.jni.access.JNIAccessibleMethod;
38+
import com.oracle.svm.core.nodes.SubstrateIndirectCallTargetNode;
3839
import com.oracle.svm.hosted.code.FactoryMethodSupport;
3940
import com.oracle.svm.hosted.code.NonBytecodeMethod;
4041
import com.oracle.svm.util.ReflectionUtil;
@@ -46,7 +47,6 @@
4647
import jdk.graal.compiler.nodes.AbstractMergeNode;
4748
import jdk.graal.compiler.nodes.CallTargetNode;
4849
import jdk.graal.compiler.nodes.ConstantNode;
49-
import jdk.graal.compiler.nodes.IndirectCallTargetNode;
5050
import jdk.graal.compiler.nodes.InvokeWithExceptionNode;
5151
import jdk.graal.compiler.nodes.NodeView;
5252
import jdk.graal.compiler.nodes.ProfileData.BranchProbabilityData;
@@ -260,7 +260,7 @@ private static ValueNode createNewObjectCall(JNIGraphKit kit, ResolvedSignature<
260260

261261
private static ValueNode createMethodCall(JNIGraphKit kit, JavaType returnType, JavaType[] paramTypes, ValueNode methodAddress, ValueNode[] args) {
262262
StampPair returnStamp = StampFactory.forDeclaredType(kit.getAssumptions(), returnType, false);
263-
CallTargetNode callTarget = new IndirectCallTargetNode(methodAddress, args, returnStamp, paramTypes,
263+
CallTargetNode callTarget = new SubstrateIndirectCallTargetNode(methodAddress, args, returnStamp, paramTypes,
264264
null, SubstrateCallingConventionKind.Java.toType(true), CallTargetNode.InvokeKind.Static);
265265

266266
InvokeWithExceptionNode invoke = kit.startInvokeWithException(callTarget, kit.getFrameState(), kit.bci());

substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/phases/CInterfaceInvocationPlugin.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
import com.oracle.svm.core.graal.code.SubstrateCallingConventionKind;
4646
import com.oracle.svm.core.graal.nodes.CInterfaceReadNode;
4747
import com.oracle.svm.core.graal.nodes.CInterfaceWriteNode;
48+
import com.oracle.svm.core.nodes.SubstrateIndirectCallTargetNode;
4849
import com.oracle.svm.core.util.UserError;
4950
import com.oracle.svm.core.util.VMError;
5051
import com.oracle.svm.hosted.c.CInterfaceError;
@@ -72,7 +73,6 @@
7273
import jdk.graal.compiler.nodes.CallTargetNode;
7374
import jdk.graal.compiler.nodes.CallTargetNode.InvokeKind;
7475
import jdk.graal.compiler.nodes.ConstantNode;
75-
import jdk.graal.compiler.nodes.IndirectCallTargetNode;
7676
import jdk.graal.compiler.nodes.LogicNode;
7777
import jdk.graal.compiler.nodes.NodeView;
7878
import jdk.graal.compiler.nodes.StructuredGraph;
@@ -711,7 +711,7 @@ private boolean replaceJavaFunctionPointerInvoke(GraphBuilderContext b, Analysis
711711
} else {
712712
returnStamp = b.getInvokeReturnStamp(null).getTrustedStamp();
713713
}
714-
CallTargetNode indirectCallTargetNode = b.add(new IndirectCallTargetNode(methodAddress, argsWithoutReceiver,
714+
CallTargetNode indirectCallTargetNode = b.add(new SubstrateIndirectCallTargetNode(methodAddress, argsWithoutReceiver,
715715
StampPair.createSingle(returnStamp), parameterTypes, null, SubstrateCallingConventionKind.Java.toType(true), InvokeKind.Static));
716716

717717
b.handleReplacedInvoke(indirectCallTargetNode, b.getInvokeReturnType().getJavaKind());

substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/reflect/ReflectionExpandSignatureMethod.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import com.oracle.graal.pointsto.meta.AnalysisType;
2929
import com.oracle.graal.pointsto.meta.HostedProviders;
3030
import com.oracle.svm.core.graal.code.SubstrateCallingConventionKind;
31+
import com.oracle.svm.core.nodes.SubstrateIndirectCallTargetNode;
3132
import com.oracle.svm.core.reflect.ReflectionAccessorHolder.MethodInvokeFunctionPointer;
3233
import com.oracle.svm.core.reflect.SubstrateConstructorAccessor;
3334
import com.oracle.svm.core.reflect.SubstrateMethodAccessor;
@@ -38,7 +39,6 @@
3839
import jdk.graal.compiler.debug.DebugContext;
3940
import jdk.graal.compiler.nodes.CallTargetNode;
4041
import jdk.graal.compiler.nodes.CallTargetNode.InvokeKind;
41-
import jdk.graal.compiler.nodes.IndirectCallTargetNode;
4242
import jdk.graal.compiler.nodes.InvokeWithExceptionNode;
4343
import jdk.graal.compiler.nodes.StructuredGraph;
4444
import jdk.graal.compiler.nodes.ValueNode;
@@ -111,7 +111,7 @@ public StructuredGraph buildGraph(DebugContext ctx, AnalysisMethod method, Hoste
111111
signature[i + receiverOffset] = kit.getMetaAccess().lookupJavaType(argTypes[i]);
112112
}
113113

114-
CallTargetNode callTarget = kit.append(new IndirectCallTargetNode(invokedMethod, args, StampPair.createSingle(StampFactory.forKind(returnKind)), signature, null,
114+
CallTargetNode callTarget = kit.append(new SubstrateIndirectCallTargetNode(invokedMethod, args, StampPair.createSingle(StampFactory.forKind(returnKind)), signature, null,
115115
SubstrateCallingConventionKind.Java.toType(true), InvokeKind.Static));
116116

117117
InvokeWithExceptionNode invoke = kit.startInvokeWithException(callTarget, kit.getFrameState(), kit.bci());

0 commit comments

Comments
 (0)