# HG changeset patch # User Thomas Wuerthinger # Date 1308160935 -7200 # Node ID 90acf5aaa10e744fb192cf25b45088d24ae60f54 # Parent f01de7799e05adc98d106d2407ea87335a8965a5 Clean up dead code elimination. diff -r f01de7799e05 -r 90acf5aaa10e graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/DeadCodeEliminationPhase.java --- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/DeadCodeEliminationPhase.java Wed Jun 15 17:54:31 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/DeadCodeEliminationPhase.java Wed Jun 15 20:02:15 2011 +0200 @@ -25,6 +25,7 @@ import java.util.*; import com.oracle.max.graal.compiler.*; +import com.oracle.max.graal.compiler.debug.*; import com.oracle.max.graal.compiler.gen.*; import com.oracle.max.graal.compiler.ir.*; import com.oracle.max.graal.graph.*; @@ -67,19 +68,15 @@ iterateSuccessors(); disconnectCFGNodes(); - deleteBrokenLoops(); - iterateInputs(); disconnectNonCFGNodes(); - - deleteCFGNodes(); - deleteNonCFGNodes(); + deleteNodes(); new PhiSimplifier(graph); if (GraalOptions.TraceDeadCodeElimination) { - System.out.printf("dead code elimination finished\n"); + TTY.println("dead code elimination finished"); } } @@ -102,17 +99,18 @@ private void disconnectCFGNodes() { for (Node node : graph.getNodes()) { - if (node != Node.Null && !flood.isMarked(node) && node instanceof EndNode) { - EndNode end = (EndNode) node; - Merge merge = end.merge(); - merge.removeEnd(end); - } - } - - for (Node node : graph.getNodes()) { - if (node != Node.Null && !flood.isMarked(node) && isCFG(node)) { - node.successors().clearAll(); - node.inputs().clearAll(); + if (node != Node.Null && !flood.isMarked(node)) { + if (isCFG(node)) { + node.successors().clearAll(); + node.inputs().clearAll(); + } else if (node instanceof EndNode) { + EndNode end = (EndNode) node; + Merge merge = end.merge(); + if (merge != null && flood.isMarked(merge)) { + // We are a dead end node leading to a live merge. + merge.removeEnd(end); + } + } } } } @@ -125,17 +123,13 @@ usage.replace(((Phi) usage).valueAt(0)); } -// Node pred = loop.predecessors().get(0); -// int predIndex = loop.predecessorsIndex().get(0); -// pred.successors().setAndClear(predIndex, loop, 0); -// loop.delete(); loop.replace(loop.next()); } } - private void deleteCFGNodes() { + private void deleteNodes() { for (Node node : graph.getNodes()) { - if (node != Node.Null && !flood.isMarked(node) && isCFG(node)) { + if (node != Node.Null && !flood.isMarked(node)) { node.delete(); } } @@ -170,12 +164,4 @@ } } } - - private void deleteNonCFGNodes() { - for (Node node : graph.getNodes()) { - if (node != Node.Null && !flood.isMarked(node) && !isCFG(node)) { - node.delete(); - } - } - } }