< prev index next >

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/AbstractFixedGuardNode.java

Print this page

        

@@ -124,10 +124,18 @@
     @SuppressWarnings("try")
     public DeoptimizeNode lowerToIf() {
         try (DebugCloseable position = this.withNodeSourcePosition()) {
             FixedNode currentNext = next();
             setNext(null);
+            if (currentNext instanceof AbstractBeginNode && currentNext instanceof StateSplit && ((StateSplit) currentNext).stateAfter() != null) {
+                // Force an extra BeginNode in case any guarded Nodes are inputs to the StateSplit
+                BeginNode begin = graph().add(new BeginNode());
+                begin.setNodeSourcePosition(getNoDeoptSuccessorPosition());
+                begin.setNext(currentNext);
+                currentNext = begin;
+            }
+
             DeoptimizeNode deopt = graph().add(new DeoptimizeNode(action, reason, speculation));
             deopt.setStateBefore(stateBefore());
             IfNode ifNode;
             AbstractBeginNode noDeoptSuccessor;
             if (negated) {
< prev index next >