# HG changeset patch # User Roland Schatz # Date 1366732154 -7200 # Node ID 71ebe4030676b30c366bb04659185f804f5c9e10 # Parent 2d80e5f17bf850a20feeea89ec6873fdb303f79f Make DeadCodeEliminationPhase reentrant. diff -r 2d80e5f17bf8 -r 71ebe4030676 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/DeadCodeEliminationPhase.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/DeadCodeEliminationPhase.java Tue Apr 23 17:49:11 2013 +0200 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/DeadCodeEliminationPhase.java Tue Apr 23 17:49:14 2013 +0200 @@ -32,17 +32,15 @@ // Metrics private static final DebugMetric metricNodesRemoved = Debug.metric("NodesRemoved"); - private NodeFlood flood; - @Override protected void run(StructuredGraph graph) { - this.flood = graph.createNodeFlood(); + NodeFlood flood = graph.createNodeFlood(); flood.add(graph.start()); - iterateSuccessors(); - disconnectCFGNodes(graph); - iterateInputs(graph); - deleteNodes(graph); + iterateSuccessors(flood); + disconnectCFGNodes(flood, graph); + iterateInputs(flood, graph); + deleteNodes(flood, graph); // remove chained Merges for (MergeNode merge : graph.getNodes(MergeNode.class)) { @@ -52,7 +50,7 @@ } } - private void iterateSuccessors() { + private static void iterateSuccessors(NodeFlood flood) { for (Node current : flood) { if (current instanceof EndNode) { EndNode end = (EndNode) current; @@ -65,7 +63,7 @@ } } - private void disconnectCFGNodes(StructuredGraph graph) { + private static void disconnectCFGNodes(NodeFlood flood, StructuredGraph graph) { for (EndNode node : graph.getNodes(EndNode.class)) { if (!flood.isMarked(node)) { MergeNode merge = node.merge(); @@ -95,7 +93,7 @@ } } - private void deleteNodes(StructuredGraph graph) { + private static void deleteNodes(NodeFlood flood, StructuredGraph graph) { for (Node node : graph.getNodes()) { if (!flood.isMarked(node)) { node.clearInputs(); @@ -110,7 +108,7 @@ } } - private void iterateInputs(StructuredGraph graph) { + private static void iterateInputs(NodeFlood flood, StructuredGraph graph) { for (Node node : graph.getNodes()) { if (node instanceof LocalNode) { flood.add(node);