changeset 2971:8f1e2c8815b4

Do not care about predecessor order when duplicating nodes.
author Thomas Wuerthinger <thomas@wuerthinger.net>
date Wed, 15 Jun 2011 17:13:34 +0200
parents fe44e684f1cb
children c7ce8d00c33f
files graal/com.oracle.max.graal.graph/src/com/oracle/max/graal/graph/Graph.java
diffstat 1 files changed, 26 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.max.graal.graph/src/com/oracle/max/graal/graph/Graph.java	Wed Jun 15 17:09:25 2011 +0200
+++ b/graal/com.oracle.max.graal.graph/src/com/oracle/max/graal/graph/Graph.java	Wed Jun 15 17:13:34 2011 +0200
@@ -184,6 +184,31 @@
                 }
             }
         }
+        
+        // re-wire successors
+        for (Entry<Node, Node> entry : newNodes.entrySet()) {
+            Node oldNode = entry.getKey();
+            Node node = entry.getValue();
+            for (int i = 0; i < oldNode.successors().size(); i++) {
+                Node succ = oldNode.successors().get(i);
+                Node target = replacements.get(succ);
+                if (target == null) {
+                    target = newNodes.get(succ);
+                }
+                node.successors().setOrExpand(i, target);
+            }
+        }
+        for (Entry<Node, Node> entry : replacements.entrySet()) {
+            Node oldNode = entry.getKey();
+            Node node = entry.getValue();
+            for (int i = 0; i < oldNode.successors().size(); i++) {
+                Node succ = oldNode.successors().get(i);
+                if (newNodes.containsKey(succ)) {
+                    node.successors().setOrExpand(i, newNodes.get(succ));
+                }
+            }
+        }
+        /*
         // re-wire successors
         for (Entry<Node, Node> entry : newNodes.entrySet()) {
             Node oldNode = entry.getKey();
@@ -208,7 +233,7 @@
                     newNodes.get(pred).successors().set(predIndex, node);
                 }
             }
-        }
+        }*/
         return newNodes;
     }
 }