Mercurial > hg > graal-compiler
changeset 23240:6b75e88713cc
Move proxy handling from AbstractBeginNode to LoopExitNode.
author | Thomas Wuerthinger <thomas.wuerthinger@oracle.com> |
---|---|
date | Fri, 01 Jan 2016 18:50:05 +0100 |
parents | aeb81e02fc3d |
children | 6186cfd47d3c |
files | graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/IfCanonicalizerTest.java graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/MonitorGraphTest.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractBeginNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractMergeNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IfNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoopExitNode.java |
diffstat | 6 files changed, 49 insertions(+), 43 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/IfCanonicalizerTest.java Fri Jan 01 18:44:10 2016 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/IfCanonicalizerTest.java Fri Jan 01 18:50:05 2016 +0100 @@ -22,8 +22,6 @@ */ package com.oracle.graal.compiler.test; -import static com.oracle.graal.graph.iterators.NodePredicates.isNotA; - import org.junit.Test; import com.oracle.graal.debug.Debug;
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/MonitorGraphTest.java Fri Jan 01 18:44:10 2016 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/MonitorGraphTest.java Fri Jan 01 18:50:05 2016 +0100 @@ -22,8 +22,6 @@ */ package com.oracle.graal.compiler.test; -import static com.oracle.graal.graph.iterators.NodePredicates.isNotA; - import java.util.HashMap; import java.util.Map;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractBeginNode.java Fri Jan 01 18:44:10 2016 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractBeginNode.java Fri Jan 01 18:50:05 2016 +0100 @@ -78,26 +78,9 @@ } public void prepareDelete(FixedNode evacuateFrom) { - removeProxies(); evacuateGuards(evacuateFrom); } - public void removeProxies() { - if (this.hasUsages()) { - outer: while (true) { - for (ProxyNode vpn : proxies().snapshot()) { - ValueNode value = vpn.value(); - vpn.replaceAtUsagesAndDelete(value); - if (value == this) { - // Guard proxy could have this input as value. - continue outer; - } - } - break; - } - } - } - @Override public boolean verify() { assertTrue(predecessor() != null || this == graph().start() || this instanceof AbstractMergeNode, "begin nodes must be connected"); @@ -114,24 +97,7 @@ } public NodeIterable<Node> anchored() { - return usages().filter(n -> { - if (n instanceof ProxyNode) { - ProxyNode proxyNode = (ProxyNode) n; - return proxyNode.proxyPoint() != this; - } - return true; - }); - } - - @SuppressWarnings({"unchecked", "rawtypes"}) - public NodeIterable<ProxyNode> proxies() { - return (NodeIterable) usages().filter(n -> { - if (n instanceof ProxyNode) { - ProxyNode proxyNode = (ProxyNode) n; - return proxyNode.proxyPoint() == this; - } - return false; - }); + return usages(); } public NodeIterable<FixedNode> getBlockNodes() {
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractMergeNode.java Fri Jan 01 18:44:10 2016 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractMergeNode.java Fri Jan 01 18:50:05 2016 +0100 @@ -22,8 +22,6 @@ */ package com.oracle.graal.nodes; -import static com.oracle.graal.graph.iterators.NodePredicates.isNotA; - import java.util.List; import com.oracle.graal.debug.Debug;
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IfNode.java Fri Jan 01 18:44:10 2016 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IfNode.java Fri Jan 01 18:50:05 2016 +0100 @@ -847,8 +847,9 @@ } private static void transferProxies(AbstractBeginNode successor, MergeNode falseMerge) { - if (falseMerge != null) { - for (ProxyNode proxy : successor.proxies().snapshot()) { + if (successor instanceof LoopExitNode && falseMerge != null) { + LoopExitNode loopExitNode = (LoopExitNode) successor; + for (ProxyNode proxy : loopExitNode.proxies().snapshot()) { proxy.replaceFirstInput(successor, falseMerge); } }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoopExitNode.java Fri Jan 01 18:44:10 2016 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoopExitNode.java Fri Jan 01 18:50:05 2016 +0100 @@ -25,6 +25,7 @@ import com.oracle.graal.graph.IterableNodeType; import com.oracle.graal.graph.Node; import com.oracle.graal.graph.NodeClass; +import com.oracle.graal.graph.iterators.NodeIterable; import com.oracle.graal.graph.spi.Simplifiable; import com.oracle.graal.graph.spi.SimplifierTool; import com.oracle.graal.nodeinfo.InputType; @@ -47,6 +48,50 @@ } @Override + public NodeIterable<Node> anchored() { + return super.anchored().filter(n -> { + if (n instanceof ProxyNode) { + ProxyNode proxyNode = (ProxyNode) n; + return proxyNode.proxyPoint() != this; + } + return true; + }); + } + + @Override + public void prepareDelete(FixedNode evacuateFrom) { + removeProxies(); + super.prepareDelete(evacuateFrom); + } + + public void removeProxies() { + if (this.hasUsages()) { + outer: while (true) { + for (ProxyNode vpn : proxies().snapshot()) { + ValueNode value = vpn.value(); + vpn.replaceAtUsagesAndDelete(value); + if (value == this) { + // Guard proxy could have this input as value. + continue outer; + } + } + break; + } + } + } + + @SuppressWarnings({"unchecked", "rawtypes"}) + public NodeIterable<ProxyNode> proxies() { + return (NodeIterable) usages().filter(n -> { + if (n instanceof ProxyNode) { + ProxyNode proxyNode = (ProxyNode) n; + return proxyNode.proxyPoint() == this; + } + return false; + }); + } + + @Override public void simplify(SimplifierTool tool) { Node prev = this.predecessor(); while (tool.allUsagesAvailable() && prev instanceof BeginNode && prev.hasNoUsages()) {