changeset 7284:eea2ffb2efe7

Fix to StructuredGraph.removeSplitPropagate for when a loop gets killed in the process
author Gilles Duboscq <duboscq@ssw.jku.at>
date Thu, 20 Dec 2012 14:11:45 +0100
parents 3964f3d4eb18
children f51e46b4d7cf
files graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StructuredGraph.java
diffstat 1 files changed, 9 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StructuredGraph.java	Thu Dec 20 12:06:58 2012 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StructuredGraph.java	Thu Dec 20 14:11:45 2012 +0100
@@ -254,18 +254,17 @@
         assert node != null;
         assert node.usages().isEmpty();
         assert survivingSuccessor != null;
-        for (Node successor : node.successors().snapshot()) {
-            successor.replaceAtPredecessor(null);
-            if (successor != null && successor != survivingSuccessor && successor.isAlive()) {
-                GraphUtil.killCFG((BeginNode) successor);
+        List<Node> snapshot = node.successors().snapshot();
+        node.clearSuccessors();
+        node.replaceAtPredecessor(survivingSuccessor);
+        node.safeDelete();
+        for (Node successor : snapshot) {
+            if (successor != null && successor.isAlive()) {
+                if (successor != survivingSuccessor) {
+                    GraphUtil.killCFG((BeginNode) successor);
+                }
             }
         }
-        if (survivingSuccessor.isAlive()) {
-            node.replaceAtPredecessor(survivingSuccessor);
-            node.safeDelete();
-        } else {
-            assert node.isDeleted() : node + " " + survivingSuccessor;
-        }
     }
 
     public void replaceSplit(ControlSplitNode node, Node replacement, BeginNode survivingSuccessor) {