changeset 5412:bb47fd6a6290

When removing inputs from phi nodes, kill unused values
author Gilles Duboscq <duboscq@ssw.jku.at>
date Wed, 16 May 2012 13:24:32 +0200
parents 128b3f574991
children 098c5eba749d
files graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/MergeNode.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/MergeNode.java	Tue May 15 16:27:12 2012 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/MergeNode.java	Wed May 16 13:24:32 2012 +0200
@@ -28,6 +28,7 @@
 import com.oracle.graal.graph.*;
 import com.oracle.graal.graph.iterators.*;
 import com.oracle.graal.nodes.spi.*;
+import com.oracle.graal.nodes.util.*;
 
 /**
  * Denotes the merging of multiple control-flow paths.
@@ -81,7 +82,11 @@
         assert predIndex != -1;
         deleteEnd(pred);
         for (PhiNode phi : phis()) {
+            ValueNode removedValue = phi.valueAt(predIndex);
             phi.removeInput(predIndex);
+            if (removedValue != null && removedValue.isAlive() && removedValue.usages().isEmpty() && GraphUtil.isFloatingNode().apply(removedValue)) {
+                GraphUtil.killWithUnusedFloatingInputs(removedValue);
+            }
         }
     }