Search in sources :

Example 1 with LinkedNodeStack

use of org.graalvm.compiler.graph.LinkedNodeStack in project graal by oracle.

the class GraphUtil method killWithUnusedFloatingInputs.

public static void killWithUnusedFloatingInputs(Node node, boolean mayKillGuard) {
    LinkedNodeStack stack = null;
    Node cur = node;
    do {
        assert checkKill(cur, mayKillGuard);
        cur.markDeleted();
        outer: for (Node in : cur.inputs()) {
            if (in.isAlive()) {
                in.removeUsage(cur);
                if (in.hasNoUsages()) {
                    cur.maybeNotifyZeroUsages(in);
                }
                if (isFloatingNode(in)) {
                    if (in.hasNoUsages()) {
                        if (in instanceof GuardNode) {
                            // Guard nodes are only killed if their anchor dies.
                            continue outer;
                        }
                    } else if (in instanceof PhiNode) {
                        if (!((PhiNode) in).isDegenerated()) {
                            continue outer;
                        }
                        in.replaceAtUsages(null);
                    } else {
                        continue outer;
                    }
                    if (stack == null) {
                        stack = new LinkedNodeStack();
                    }
                    stack.push(in);
                }
            }
        }
        if (stack == null || stack.isEmpty()) {
            break;
        } else {
            cur = stack.pop();
        }
    } while (true);
}
Also used : LinkedNodeStack(org.graalvm.compiler.graph.LinkedNodeStack) ValuePhiNode(org.graalvm.compiler.nodes.ValuePhiNode) MemoryPhiNode(org.graalvm.compiler.nodes.memory.MemoryPhiNode) PhiNode(org.graalvm.compiler.nodes.PhiNode) ValuePhiNode(org.graalvm.compiler.nodes.ValuePhiNode) AbstractMergeNode(org.graalvm.compiler.nodes.AbstractMergeNode) MonitorIdNode(org.graalvm.compiler.nodes.java.MonitorIdNode) MethodCallTargetNode(org.graalvm.compiler.nodes.java.MethodCallTargetNode) LoadIndexedNode(org.graalvm.compiler.nodes.java.LoadIndexedNode) LoopBeginNode(org.graalvm.compiler.nodes.LoopBeginNode) IfNode(org.graalvm.compiler.nodes.IfNode) VirtualObjectNode(org.graalvm.compiler.nodes.virtual.VirtualObjectNode) AbstractBeginNode(org.graalvm.compiler.nodes.AbstractBeginNode) PiNode(org.graalvm.compiler.nodes.PiNode) ValueNode(org.graalvm.compiler.nodes.ValueNode) MultiGuardNode(org.graalvm.compiler.nodes.extended.MultiGuardNode) VirtualArrayNode(org.graalvm.compiler.nodes.virtual.VirtualArrayNode) ControlSinkNode(org.graalvm.compiler.nodes.ControlSinkNode) GuardNode(org.graalvm.compiler.nodes.GuardNode) MemoryPhiNode(org.graalvm.compiler.nodes.memory.MemoryPhiNode) ConstantNode(org.graalvm.compiler.nodes.ConstantNode) ControlSplitNode(org.graalvm.compiler.nodes.ControlSplitNode) MergeNode(org.graalvm.compiler.nodes.MergeNode) FixedNode(org.graalvm.compiler.nodes.FixedNode) AbstractEndNode(org.graalvm.compiler.nodes.AbstractEndNode) LoopEndNode(org.graalvm.compiler.nodes.LoopEndNode) ValueProxyNode(org.graalvm.compiler.nodes.ValueProxyNode) LoopExitNode(org.graalvm.compiler.nodes.LoopExitNode) WithExceptionNode(org.graalvm.compiler.nodes.WithExceptionNode) Node(org.graalvm.compiler.graph.Node) EndNode(org.graalvm.compiler.nodes.EndNode) FixedWithNextNode(org.graalvm.compiler.nodes.FixedWithNextNode) PhiNode(org.graalvm.compiler.nodes.PhiNode) ProxyNode(org.graalvm.compiler.nodes.ProxyNode) MultiGuardNode(org.graalvm.compiler.nodes.extended.MultiGuardNode) GuardNode(org.graalvm.compiler.nodes.GuardNode)

Aggregations

LinkedNodeStack (org.graalvm.compiler.graph.LinkedNodeStack)1 Node (org.graalvm.compiler.graph.Node)1 AbstractBeginNode (org.graalvm.compiler.nodes.AbstractBeginNode)1 AbstractEndNode (org.graalvm.compiler.nodes.AbstractEndNode)1 AbstractMergeNode (org.graalvm.compiler.nodes.AbstractMergeNode)1 ConstantNode (org.graalvm.compiler.nodes.ConstantNode)1 ControlSinkNode (org.graalvm.compiler.nodes.ControlSinkNode)1 ControlSplitNode (org.graalvm.compiler.nodes.ControlSplitNode)1 EndNode (org.graalvm.compiler.nodes.EndNode)1 FixedNode (org.graalvm.compiler.nodes.FixedNode)1 FixedWithNextNode (org.graalvm.compiler.nodes.FixedWithNextNode)1 GuardNode (org.graalvm.compiler.nodes.GuardNode)1 IfNode (org.graalvm.compiler.nodes.IfNode)1 LoopBeginNode (org.graalvm.compiler.nodes.LoopBeginNode)1 LoopEndNode (org.graalvm.compiler.nodes.LoopEndNode)1 LoopExitNode (org.graalvm.compiler.nodes.LoopExitNode)1 MergeNode (org.graalvm.compiler.nodes.MergeNode)1 PhiNode (org.graalvm.compiler.nodes.PhiNode)1 PiNode (org.graalvm.compiler.nodes.PiNode)1 ProxyNode (org.graalvm.compiler.nodes.ProxyNode)1