changeset 2988:2bf5ac3f6fc3

Clean up dead code elimination. Bring simple merge deletion back in.
author Thomas Wuerthinger <thomas@wuerthinger.net>
date Wed, 15 Jun 2011 21:20:20 +0200
parents 90acf5aaa10e
children a8e8035916a3
files graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/DeadCodeEliminationPhase.java graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/schedule/IdentifyBlocksPhase.java
diffstat 2 files changed, 7 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/DeadCodeEliminationPhase.java	Wed Jun 15 20:02:15 2011 +0200
+++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/DeadCodeEliminationPhase.java	Wed Jun 15 21:20:20 2011 +0200
@@ -44,25 +44,12 @@
         this.brokenLoops = new ArrayList<LoopBegin>();
 
         // remove chained Merges
-//        for (Merge merge : graph.getNodes(Merge.class)) {
-//            if (merge.predecessors().size() == 1 && merge.usages().size() == 0) {
-//                if (merge.successors().get(0) instanceof Merge) {
-//                    Node pred = merge.predecessors().get(0);
-//                    int predIndex = merge.predecessorsIndex().get(0);
-//                    pred.successors().setAndClear(predIndex, merge, 0);
-//                    merge.delete();
-//                }
-//            }
-//        }
-//        Node startSuccessor = graph.start().successors().get(0);
-//        if (startSuccessor instanceof Merge) {
-//            Merge startMerge = (Merge) startSuccessor;
-//            if (startMerge.predecessors().size() == 1 && startMerge.usages().size() == 0) {
-//                int predIndex = startMerge.predecessorsIndex().get(0);
-//                graph.start().successors().setAndClear(predIndex, startMerge, 0);
-//                startMerge.delete();
-//            }
-//        }
+        for (Merge merge : graph.getNodes(Merge.class)) {
+            if (merge.endCount() == 1 && merge.usages().size() == 0 && !(merge instanceof LoopEnd) && !(merge instanceof LoopBegin)) {
+                merge.endAt(0).replace(merge.next());
+                merge.delete();
+            }
+        }
 
         flood.add(graph.start());
 
--- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/schedule/IdentifyBlocksPhase.java	Wed Jun 15 20:02:15 2011 +0200
+++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/schedule/IdentifyBlocksPhase.java	Wed Jun 15 21:20:20 2011 +0200
@@ -199,6 +199,7 @@
                 Node n = block.firstNode();
                 if (n instanceof LoopBegin) {
                     LoopBegin loopBegin = (LoopBegin) n;
+                    assert loopBegin.loopEnd() != null;
                     nodeToBlock.get(loopBegin.loopEnd()).addSuccessor(block);
                 }
             }