# HG changeset patch # User Gilles Duboscq # Date 1337681458 -7200 # Node ID 4e9723f38034d3da04c9bb573178f6928230c633 # Parent ce2398984e39f330adcf9202ba4d618619cb5054 Anchor guards of read nodes when floating them diff -r ce2398984e39 -r 4e9723f38034 graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/FloatingReadPhase.java --- 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); } diff -r ce2398984e39 -r 4e9723f38034 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FixedNode.java --- 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; } diff -r ce2398984e39 -r 4e9723f38034 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FixedWithNextNode.java --- 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); + } } diff -r ce2398984e39 -r 4e9723f38034 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ValueAnchorNode.java --- 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