changeset 5422:4e9723f38034

Anchor guards of read nodes when floating them
author Gilles Duboscq <duboscq@ssw.jku.at>
date Tue, 22 May 2012 12:10:58 +0200
parents ce2398984e39
children b26a95cf8e3d
files graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/FloatingReadPhase.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FixedNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FixedWithNextNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ValueAnchorNode.java
diffstat 4 files changed, 21 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/FloatingReadPhase.java	Tue May 22 11:57:21 2012 +0200
+++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/FloatingReadPhase.java	Tue May 22 12:10:58 2012 +0200
@@ -153,6 +153,16 @@
             } else {
                 floatingRead = graph.unique(new FloatingReadNode(readNode.object(), readNode.location(), getLocationForRead(readNode), readNode.stamp(), readNode.dependencies()));
             }
+            ValueAnchorNode anchor = null;
+            for (GuardNode guard : readNode.dependencies().filter(GuardNode.class)) {
+                if (anchor == null) {
+                    anchor = graph.add(new ValueAnchorNode());
+                }
+                anchor.addAnchoredValue(guard);
+            }
+            if (anchor != null) {
+                graph.addAfterFixed(readNode, anchor);
+            }
             graph.replaceFixedWithFloating(readNode, floatingRead);
         }
 
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FixedNode.java	Tue May 22 11:57:21 2012 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FixedNode.java	Tue May 22 12:10:58 2012 +0200
@@ -22,6 +22,7 @@
  */
 package com.oracle.graal.nodes;
 
+import com.oracle.graal.graph.*;
 import com.oracle.graal.nodes.type.*;
 
 public abstract class FixedNode extends ValueNode {
@@ -32,6 +33,10 @@
         super(stamp);
     }
 
+    public FixedNode(Stamp stamp, Node... dependencies) {
+        super(stamp, dependencies);
+    }
+
     public double probability() {
         return probability;
     }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FixedWithNextNode.java	Tue May 22 11:57:21 2012 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FixedWithNextNode.java	Tue May 22 12:10:58 2012 +0200
@@ -22,6 +22,7 @@
  */
 package com.oracle.graal.nodes;
 
+import com.oracle.graal.graph.*;
 import com.oracle.graal.nodes.type.*;
 
 /**
@@ -41,4 +42,8 @@
     public FixedWithNextNode(Stamp stamp) {
         super(stamp);
     }
+
+    public FixedWithNextNode(Stamp stamp, Node... dependencies) {
+        super(stamp, dependencies);
+    }
 }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ValueAnchorNode.java	Tue May 22 11:57:21 2012 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ValueAnchorNode.java	Tue May 22 12:10:58 2012 +0200
@@ -36,8 +36,7 @@
 public final class ValueAnchorNode extends FixedWithNextNode implements Canonicalizable, LIRLowerable, Node.IterableNodeType {
 
     public ValueAnchorNode(ValueNode... values) {
-        super(StampFactory.illegal());
-        this.dependencies().addAll(values);
+        super(StampFactory.illegal(), values);
     }
 
     @Override