src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/LoopExitNode.java
changeset 54084 84f10bbf993f
parent 52910 583fd71c47d6
child 58299 6df94ce3ab2f
equal deleted inserted replaced
54083:d9bcf74fc56a 54084:84f10bbf993f
    33 import org.graalvm.compiler.graph.NodeClass;
    33 import org.graalvm.compiler.graph.NodeClass;
    34 import org.graalvm.compiler.graph.iterators.NodeIterable;
    34 import org.graalvm.compiler.graph.iterators.NodeIterable;
    35 import org.graalvm.compiler.graph.spi.Simplifiable;
    35 import org.graalvm.compiler.graph.spi.Simplifiable;
    36 import org.graalvm.compiler.graph.spi.SimplifierTool;
    36 import org.graalvm.compiler.graph.spi.SimplifierTool;
    37 import org.graalvm.compiler.nodeinfo.NodeInfo;
    37 import org.graalvm.compiler.nodeinfo.NodeInfo;
       
    38 import org.graalvm.compiler.nodes.util.GraphUtil;
    38 
    39 
    39 @NodeInfo(allowedUsageTypes = {Association}, cycles = CYCLES_0, size = SIZE_0)
    40 @NodeInfo(allowedUsageTypes = {Association}, cycles = CYCLES_0, size = SIZE_0)
    40 public final class LoopExitNode extends BeginStateSplitNode implements IterableNodeType, Simplifiable {
    41 public final class LoopExitNode extends BeginStateSplitNode implements IterableNodeType, Simplifiable {
    41 
    42 
    42     public static final NodeClass<LoopExitNode> TYPE = NodeClass.create(LoopExitNode.class);
    43     public static final NodeClass<LoopExitNode> TYPE = NodeClass.create(LoopExitNode.class);
   100             }
   101             }
   101             return false;
   102             return false;
   102         });
   103         });
   103     }
   104     }
   104 
   105 
       
   106     public void removeExit() {
       
   107         this.removeProxies();
       
   108         FrameState loopStateAfter = this.stateAfter();
       
   109         graph().replaceFixedWithFixed(this, graph().add(new BeginNode()));
       
   110         if (loopStateAfter != null) {
       
   111             GraphUtil.tryKillUnused(loopStateAfter);
       
   112         }
       
   113     }
       
   114 
   105     @Override
   115     @Override
   106     public void simplify(SimplifierTool tool) {
   116     public void simplify(SimplifierTool tool) {
   107         Node prev = this.predecessor();
   117         Node prev = this.predecessor();
   108         while (tool.allUsagesAvailable() && prev instanceof BeginNode && prev.hasNoUsages()) {
   118         while (tool.allUsagesAvailable() && prev instanceof BeginNode && prev.hasNoUsages()) {
   109             AbstractBeginNode begin = (AbstractBeginNode) prev;
   119             AbstractBeginNode begin = (AbstractBeginNode) prev;