Skip to content

Commit 290429e

Browse files
committed
add foreign calls to method summaries
1 parent c534af7 commit 290429e

File tree

3 files changed

+33
-4
lines changed

3 files changed

+33
-4
lines changed

substratevm/src/com.oracle.graal.reachability/src/com/oracle/graal/reachability/MethodSummary.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,14 @@
2828
import com.oracle.graal.pointsto.meta.AnalysisMethod;
2929
import com.oracle.graal.pointsto.meta.AnalysisType;
3030
import jdk.vm.ci.meta.JavaConstant;
31+
import org.graalvm.compiler.core.common.spi.ForeignCallDescriptor;
32+
import org.graalvm.compiler.core.common.spi.ForeignCallSignature;
3133

3234
import java.util.Arrays;
3335

3436
public class MethodSummary {
3537
public static final MethodSummary EMPTY = new MethodSummary(new AnalysisMethod[0], new AnalysisMethod[0], new AnalysisType[0], new AnalysisType[0], new AnalysisField[0], new AnalysisField[0],
36-
new JavaConstant[0]);
38+
new JavaConstant[0], new ForeignCallDescriptor[0], new ForeignCallSignature[0]);
3739

3840
public final AnalysisMethod[] invokedMethods;
3941
public final AnalysisMethod[] implementationInvokedMethods;
@@ -42,17 +44,23 @@ public class MethodSummary {
4244
public final AnalysisField[] readFields;
4345
public final AnalysisField[] writtenFields;
4446
public final JavaConstant[] embeddedConstants;
47+
public final ForeignCallDescriptor[] foreignCallDescriptors;
48+
public final ForeignCallSignature[] foreignCallSignatures;
4549

4650
public MethodSummary(AnalysisMethod[] invokedMethods, AnalysisMethod[] implementationInvokedMethods, AnalysisType[] accessedTypes, AnalysisType[] instantiatedTypes, AnalysisField[] readFields,
4751
AnalysisField[] writtenFields,
48-
JavaConstant[] embeddedConstants) {
52+
JavaConstant[] embeddedConstants,
53+
ForeignCallDescriptor[] foreignCallDescriptors,
54+
ForeignCallSignature[] foreignCallSignatures) {
4955
this.invokedMethods = invokedMethods;
5056
this.implementationInvokedMethods = implementationInvokedMethods;
5157
this.accessedTypes = accessedTypes;
5258
this.instantiatedTypes = instantiatedTypes;
5359
this.readFields = readFields;
5460
this.writtenFields = writtenFields;
5561
this.embeddedConstants = embeddedConstants;
62+
this.foreignCallDescriptors = foreignCallDescriptors;
63+
this.foreignCallSignatures = foreignCallSignatures;
5664
}
5765

5866
@Override
@@ -69,6 +77,7 @@ public String toString() {
6977
}
7078

7179
public MethodSummary withoutMethods() {
72-
return new MethodSummary(new AnalysisMethod[0], new AnalysisMethod[0], accessedTypes, instantiatedTypes, readFields, writtenFields, embeddedConstants);
80+
return new MethodSummary(new AnalysisMethod[0], new AnalysisMethod[0], accessedTypes, instantiatedTypes, readFields, writtenFields, embeddedConstants, foreignCallDescriptors,
81+
foreignCallSignatures);
7382
}
7483
}

substratevm/src/com.oracle.graal.reachability/src/com/oracle/graal/reachability/ReachabilityAnalysis.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import jdk.vm.ci.meta.JavaKind;
4242
import jdk.vm.ci.meta.ResolvedJavaMethod;
4343
import org.graalvm.compiler.core.common.spi.ForeignCallDescriptor;
44+
import org.graalvm.compiler.core.common.spi.ForeignCallSignature;
4445
import org.graalvm.compiler.debug.Indent;
4546
import org.graalvm.compiler.graph.Node;
4647
import org.graalvm.compiler.nodes.FrameState;
@@ -181,6 +182,12 @@ private void processSummary(AnalysisMethod method, MethodSummary summary) {
181182
}
182183
}
183184
}
185+
for (ForeignCallDescriptor descriptor : summary.foreignCallDescriptors) {
186+
registerForeignCall(descriptor);
187+
}
188+
for (ForeignCallSignature signature : summary.foreignCallSignatures) {
189+
registerForeignCall(getProviders().getForeignCalls().getDescriptor(signature));
190+
}
184191
}
185192

186193
@Override

substratevm/src/com.oracle.graal.reachability/src/com/oracle/graal/reachability/SimpleInMemoryMethodSummaryProvider.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,20 +37,25 @@
3737
import jdk.vm.ci.meta.ResolvedJavaField;
3838
import jdk.vm.ci.meta.ResolvedJavaMethod;
3939
import jdk.vm.ci.meta.ResolvedJavaType;
40+
import org.graalvm.compiler.core.common.spi.ForeignCallDescriptor;
41+
import org.graalvm.compiler.core.common.spi.ForeignCallSignature;
4042
import org.graalvm.compiler.graph.Node;
4143
import org.graalvm.compiler.nodes.CallTargetNode;
4244
import org.graalvm.compiler.nodes.ConstantNode;
4345
import org.graalvm.compiler.nodes.FrameState;
4446
import org.graalvm.compiler.nodes.Invoke;
4547
import org.graalvm.compiler.nodes.StructuredGraph;
48+
import org.graalvm.compiler.nodes.extended.ForeignCall;
4649
import org.graalvm.compiler.nodes.java.AccessFieldNode;
4750
import org.graalvm.compiler.nodes.java.InstanceOfNode;
4851
import org.graalvm.compiler.nodes.java.LoadFieldNode;
4952
import org.graalvm.compiler.nodes.java.NewArrayNode;
5053
import org.graalvm.compiler.nodes.java.NewInstanceNode;
5154
import org.graalvm.compiler.nodes.java.NewMultiArrayNode;
5255
import org.graalvm.compiler.nodes.java.StoreFieldNode;
56+
import org.graalvm.compiler.replacements.nodes.BinaryMathIntrinsicNode;
5357
import org.graalvm.compiler.replacements.nodes.MacroInvokable;
58+
import org.graalvm.compiler.replacements.nodes.UnaryMathIntrinsicNode;
5459

5560
import java.util.ArrayList;
5661
import java.util.List;
@@ -113,6 +118,8 @@ protected class Instance {
113118
public final List<AnalysisMethod> invokedMethods = new ArrayList<>();
114119
public final List<AnalysisMethod> implementationInvokedMethods = new ArrayList<>();
115120
public final List<JavaConstant> embeddedConstants = new ArrayList<>();
121+
public final List<ForeignCallDescriptor> foreignCallDescriptors = new ArrayList<>();
122+
public final List<ForeignCallSignature> foreignCallSignatures = new ArrayList<>();
116123

117124
private MethodSummary createSummaryFromGraph(StructuredGraph graph) {
118125

@@ -182,13 +189,19 @@ private MethodSummary createSummaryFromGraph(StructuredGraph graph) {
182189
} else {
183190
invokedMethods.add(targetMethod);
184191
}
192+
} else if (n instanceof ForeignCall) {
193+
foreignCallDescriptors.add(((ForeignCall) n).getDescriptor());
194+
} else if (n instanceof UnaryMathIntrinsicNode) {
195+
foreignCallSignatures.add(((UnaryMathIntrinsicNode) n).getOperation().foreignCallSignature);
196+
} else if (n instanceof BinaryMathIntrinsicNode) {
197+
foreignCallSignatures.add(((BinaryMathIntrinsicNode) n).getOperation().foreignCallSignature);
185198
}
186199
delegateNodeProcessing(this, n);
187200
}
188201
return new MethodSummary(invokedMethods.toArray(new AnalysisMethod[0]), implementationInvokedMethods.toArray(new AnalysisMethod[0]),
189202
accessedTypes.toArray(new AnalysisType[0]),
190203
instantiatedTypes.toArray(new AnalysisType[0]), readFields.toArray(new AnalysisField[0]), writtenFields.toArray(new AnalysisField[0]),
191-
embeddedConstants.toArray(new JavaConstant[0]));
204+
embeddedConstants.toArray(new JavaConstant[0]), foreignCallDescriptors.toArray(new ForeignCallDescriptor[0]), foreignCallSignatures.toArray(new ForeignCallSignature[0]));
192205
}
193206
}
194207
}

0 commit comments

Comments
 (0)