Mercurial > hg > graal-jvmci-8
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