Mercurial > hg > graal-compiler
changeset 23168:2ad910b35d66
Add simplification to LoopExitNode to make sure counted loops are correctly recognized.
author | Thomas Wuerthinger <thomas.wuerthinger@oracle.com> |
---|---|
date | Sun, 13 Dec 2015 16:17:29 +0100 |
parents | e1dcae68639a |
children | db2df49e2245 |
files | graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoopExitNode.java |
diffstat | 1 files changed, 14 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoopExitNode.java Sun Dec 13 15:58:04 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoopExitNode.java Sun Dec 13 16:17:29 2015 +0100 @@ -23,12 +23,15 @@ package com.oracle.graal.nodes; import com.oracle.graal.graph.IterableNodeType; +import com.oracle.graal.graph.Node; import com.oracle.graal.graph.NodeClass; +import com.oracle.graal.graph.spi.Simplifiable; +import com.oracle.graal.graph.spi.SimplifierTool; import com.oracle.graal.nodeinfo.InputType; import com.oracle.graal.nodeinfo.NodeInfo; @NodeInfo(allowedUsageTypes = {InputType.Association}) -public final class LoopExitNode extends BeginStateSplitNode implements IterableNodeType { +public final class LoopExitNode extends BeginStateSplitNode implements IterableNodeType, Simplifiable { public static final NodeClass<LoopExitNode> TYPE = NodeClass.create(LoopExitNode.class); @Input(InputType.Association) LoopBeginNode loopBegin; @@ -42,4 +45,14 @@ public LoopBeginNode loopBegin() { return loopBegin; } + + @Override + public void simplify(SimplifierTool tool) { + Node prev = this.predecessor(); + while (tool.allUsagesAvailable() && prev instanceof BeginNode && prev.hasNoUsages()) { + AbstractBeginNode begin = (AbstractBeginNode) prev; + prev = prev.predecessor(); + graph().removeFixed(begin); + } + } }