< 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,430 ****
--- 417,438 ----
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,490 ****
--- 489,514 ----
}
}
}
@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,735 ****
* 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);
InvocationPluginReceiver invocationPluginReceiver = new InvocationPluginReceiver(graphBuilderContext);
if (invocationPlugin.execute(graphBuilderContext, targetMethod, invocationPluginReceiver.init(targetMethod, arguments), arguments)) {
if (graphBuilderContext.invokeConsumed) {
--- 749,761 ----
* 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);
!
! 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 >