src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.java/src/org/graalvm/compiler/java/FrameStateBuilder.java
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.java/src/org/graalvm/compiler/java/FrameStateBuilder.java Thu Oct 31 14:23:06 2019 -0700
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.java/src/org/graalvm/compiler/java/FrameStateBuilder.java Thu Oct 31 16:54:16 2019 -0700
@@ -328,8 +328,7 @@
outerFrameState = parent.getFrameStateBuilder().create(parent.bci(), parent.getNonIntrinsicAncestor(), true, null, null);
}
if (bci == BytecodeFrame.AFTER_EXCEPTION_BCI && parent != null) {
- FrameState newFrameState = outerFrameState.duplicateModified(outerFrameState.bci, true, false, JavaKind.Void, new JavaKind[]{JavaKind.Object}, new ValueNode[]{stack[0]});
- return newFrameState;
+ return outerFrameState.duplicateModified(graph, outerFrameState.bci, true, false, JavaKind.Void, new JavaKind[]{JavaKind.Object}, new ValueNode[]{stack[0]});
}
if (bci == BytecodeFrame.INVALID_FRAMESTATE_BCI) {
throw shouldNotReachHere();
@@ -527,21 +526,21 @@
ValueNode value = locals[i];
if (value != null && value != TWO_SLOT_MARKER && (!loopEntryState.contains(value) || loopExit.loopBegin().isPhiAtMerge(value))) {
debug.log(" inserting proxy for %s", value);
- locals[i] = ProxyNode.forValue(value, loopExit, graph);
+ locals[i] = ProxyNode.forValue(value, loopExit);
}
}
for (int i = 0; i < stackSize(); i++) {
ValueNode value = stack[i];
if (value != null && value != TWO_SLOT_MARKER && (!loopEntryState.contains(value) || loopExit.loopBegin().isPhiAtMerge(value))) {
debug.log(" inserting proxy for %s", value);
- stack[i] = ProxyNode.forValue(value, loopExit, graph);
+ stack[i] = ProxyNode.forValue(value, loopExit);
}
}
for (int i = 0; i < lockedObjects.length; i++) {
ValueNode value = lockedObjects[i];
if (value != null && (!loopEntryState.contains(value) || loopExit.loopBegin().isPhiAtMerge(value))) {
debug.log(" inserting proxy for %s", value);
- lockedObjects[i] = ProxyNode.forValue(value, loopExit, graph);
+ lockedObjects[i] = ProxyNode.forValue(value, loopExit);
}
}
}
@@ -1028,4 +1027,17 @@
}
sideEffects.add(sideEffect);
}
+
+ public void replaceValue(ValueNode oldValue, ValueNode newValue) {
+ for (int i = 0; i < locals.length; ++i) {
+ if (locals[i] == oldValue) {
+ locals[i] = newValue;
+ }
+ }
+ for (int i = 0; i < stack.length; ++i) {
+ if (stack[i] == oldValue) {
+ stack[i] = newValue;
+ }
+ }
+ }
}