< prev index next >
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/PEGraphDecoder.java
Print this page
@@ -351,11 +351,11 @@
public void push(JavaKind kind, ValueNode value) {
throw unimplemented();
}
@Override
- public void handleReplacedInvoke(InvokeKind invokeKind, ResolvedJavaMethod targetMethod, ValueNode[] args, boolean inlineEverything) {
+ public Invoke handleReplacedInvoke(InvokeKind invokeKind, ResolvedJavaMethod targetMethod, ValueNode[] args, boolean inlineEverything) {
throw unimplemented();
}
@Override
public void handleReplacedInvoke(CallTargetNode callTarget, JavaKind resultType) {
@@ -587,17 +587,23 @@
} else {
return loopExplosionPlugin.loopExplosionKind(method);
}
}
+ @SuppressWarnings("try")
public void decode(ResolvedJavaMethod method, boolean isSubstitution, boolean trackNodeSourcePosition) {
- PEMethodScope methodScope = new PEMethodScope(graph, null, null, lookupEncodedGraph(method, null, null, isSubstitution, trackNodeSourcePosition), method, null, 0, loopExplosionPlugin, null);
- decode(createInitialLoopScope(methodScope, null));
- cleanupGraph(methodScope);
-
- debug.dump(DebugContext.VERBOSE_LEVEL, graph, "After graph cleanup");
- assert graph.verify();
+ try (DebugContext.Scope scope = debug.scope("PEGraphDecode", graph)) {
+ EncodedGraph encodedGraph = lookupEncodedGraph(method, null, null, isSubstitution, trackNodeSourcePosition);
+ PEMethodScope methodScope = new PEMethodScope(graph, null, null, encodedGraph, method, null, 0, loopExplosionPlugin, null);
+ decode(createInitialLoopScope(methodScope, null));
+ cleanupGraph(methodScope);
+
+ debug.dump(DebugContext.VERBOSE_LEVEL, graph, "After graph cleanup");
+ assert graph.verify();
+ } catch (Throwable t) {
+ throw debug.handle(t);
+ }
try {
/* Check that the control flow graph can be computed, to catch problems early. */
assert CFGVerifier.verify(ControlFlowGraph.compute(graph, true, true, true, true));
} catch (Throwable ex) {
@@ -735,15 +741,23 @@
}
Invoke invoke = invokeData.invoke;
ResolvedJavaMethod targetMethod = callTarget.targetMethod();
+ if (loopScope.methodScope.encodedGraph.isCallToOriginal(targetMethod)) {
+ return false;
+ }
+
InvocationPlugin invocationPlugin = getInvocationPlugin(targetMethod);
if (invocationPlugin == null) {
return false;
}
+ if (loopScope.methodScope.encodedGraph.isCallToOriginal(targetMethod)) {
+ return false;
+ }
+
ValueNode[] arguments = callTarget.arguments().toArray(new ValueNode[0]);
FixedWithNextNode invokePredecessor = (FixedWithNextNode) invoke.asNode().predecessor();
/*
* Remove invoke from graph so that invocation plugin can append nodes to the predecessor.
< prev index next >