changeset 5351:5698355398e3

Fix merge Fix benign -esa problem around escape analysed peeling
author Gilles Duboscq <duboscq@ssw.jku.at>
date Thu, 03 May 2012 15:19:11 +0200
parents de571c017f61
children 4471a30a9728
files graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/loop/SuperBlock.java graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/EscapeAnalysisPhase.java
diffstat 2 files changed, 7 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/loop/SuperBlock.java	Thu May 03 11:05:46 2012 +0200
+++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/loop/SuperBlock.java	Thu May 03 15:19:11 2012 +0200
@@ -255,7 +255,7 @@
                     PhiNode vPhi,
                     MergeNode merge) {
         NodeInputList<ValueNode> virtuals = vPhi.values();
-        VirtualObjectNode vObject = virtualObject(virtuals.first());
+        VirtualObjectNode vObject = virtualObject(GraphUtil.unProxify(virtuals.first()));
         List<ValueNode[]> virtualStates = new ArrayList<>(virtuals.size());
         for (ValueNode virtual : virtuals) {
             virtualStates.add(virtualState(GraphUtil.unProxify(virtual)));
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/EscapeAnalysisPhase.java	Thu May 03 11:05:46 2012 +0200
+++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/EscapeAnalysisPhase.java	Thu May 03 15:19:11 2012 +0200
@@ -188,9 +188,12 @@
             FixedNode next = node.next();
             graph.removeFixed(node);
 
-            for (ValueProxyNode vpn : virtual.usages().filter(ValueProxyNode.class).snapshot()) {
-                assert vpn.value() == virtual;
-                graph.replaceFloating(vpn, virtual);
+            List<ValueProxyNode> proxies;
+            while (!(proxies = virtual.usages().filter(ValueProxyNode.class).snapshot()).isEmpty()) {
+                for (ValueProxyNode vpn : proxies) {
+                    assert vpn.value() == virtual;
+                    graph.replaceFloating(vpn, virtual);
+                }
             }
 
             if (virtual.fieldsCount() > 0) {