Mercurial > hg > truffle
changeset 13792:9e7acc9cad8e
kill unused frame states when loop exits are removed
thanks to Gilles
author | Andreas Woess <andreas.woess@jku.at> |
---|---|
date | Tue, 28 Jan 2014 23:38:22 +0100 |
parents | 2a43fba3d039 |
children | e99fccb03926 |
files | graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoopBeginNode.java |
diffstat | 1 files changed, 5 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoopBeginNode.java Tue Jan 28 22:55:50 2014 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LoopBeginNode.java Tue Jan 28 23:38:22 2014 +0100 @@ -31,6 +31,7 @@ import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.spi.*; +import com.oracle.graal.nodes.util.*; public class LoopBeginNode extends MergeNode implements IterableNodeType, LIRLowerable { @@ -184,7 +185,11 @@ public void removeExits() { for (LoopExitNode loopexit : loopExits().snapshot()) { loopexit.removeProxies(); + FrameState stateAfter = loopexit.stateAfter(); graph().replaceFixedWithFixed(loopexit, graph().add(new BeginNode())); + if (stateAfter != null && stateAfter.isAlive() && stateAfter.usages().isEmpty()) { + GraphUtil.killWithUnusedFloatingInputs(stateAfter); + } } }