< prev index next >
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/PEGraphDecoder.java
Print this page
@@ -417,14 +417,22 @@
protected class PEAppendGraphBuilderContext extends PENonAppendGraphBuilderContext {
protected FixedWithNextNode lastInstr;
protected ValueNode pushedNode;
protected boolean invokeConsumed;
+ protected final InvokeKind invokeKind;
+ protected final JavaType invokeReturnType;
public PEAppendGraphBuilderContext(PEMethodScope inlineScope, FixedWithNextNode lastInstr) {
+ this(inlineScope, lastInstr, null, null);
+ }
+
+ public PEAppendGraphBuilderContext(PEMethodScope inlineScope, FixedWithNextNode lastInstr, InvokeKind invokeKind, JavaType invokeReturnType) {
super(inlineScope, inlineScope.invokeData != null ? inlineScope.invokeData.invoke : null);
this.lastInstr = lastInstr;
+ this.invokeKind = invokeKind;
+ this.invokeReturnType = invokeReturnType;
}
@Override
public void push(JavaKind kind, ValueNode value) {
if (pushedNode != null) {
@@ -481,10 +489,26 @@
}
}
}
@Override
+ public InvokeKind getInvokeKind() {
+ if (invokeKind != null) {
+ return invokeKind;
+ }
+ return super.getInvokeKind();
+ }
+
+ @Override
+ public JavaType getInvokeReturnType() {
+ if (invokeReturnType != null) {
+ return invokeReturnType;
+ }
+ return super.getInvokeReturnType();
+ }
+
+ @Override
public void handleReplacedInvoke(CallTargetNode callTarget, JavaKind resultType) {
if (invokeConsumed) {
throw unimplemented("handleReplacedInvoke can be called only once");
}
invokeConsumed = true;
@@ -725,11 +749,13 @@
* Remove invoke from graph so that invocation plugin can append nodes to the predecessor.
*/
invoke.asNode().replaceAtPredecessor(null);
PEMethodScope inlineScope = new PEMethodScope(graph, methodScope, loopScope, null, targetMethod, invokeData, methodScope.inliningDepth + 1, loopExplosionPlugin, arguments);
- PEAppendGraphBuilderContext graphBuilderContext = new PEAppendGraphBuilderContext(inlineScope, invokePredecessor);
+
+ JavaType returnType = targetMethod.getSignature().getReturnType(methodScope.method.getDeclaringClass());
+ PEAppendGraphBuilderContext graphBuilderContext = new PEAppendGraphBuilderContext(inlineScope, invokePredecessor, callTarget.invokeKind(), returnType);
InvocationPluginReceiver invocationPluginReceiver = new InvocationPluginReceiver(graphBuilderContext);
if (invocationPlugin.execute(graphBuilderContext, targetMethod, invocationPluginReceiver.init(targetMethod, arguments), arguments)) {
if (graphBuilderContext.invokeConsumed) {
< prev index next >