changeset 9269:71ebe4030676

Make DeadCodeEliminationPhase reentrant.
author Roland Schatz <roland.schatz@oracle.com>
date Tue, 23 Apr 2013 17:49:14 +0200
parents 2d80e5f17bf8
children 4acb1c45040f
files graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/DeadCodeEliminationPhase.java
diffstat 1 files changed, 9 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- 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);