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);
+            }
         }
     }