< 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 >