--- old/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/AbstractMergeNode.java 2017-03-20 17:40:20.000000000 -0700 +++ new/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/AbstractMergeNode.java 2017-03-20 17:40:19.000000000 -0700 @@ -37,6 +37,7 @@ import org.graalvm.compiler.graph.spi.Simplifiable; import org.graalvm.compiler.graph.spi.SimplifierTool; import org.graalvm.compiler.nodeinfo.NodeInfo; +import org.graalvm.compiler.nodes.memory.MemoryPhiNode; import org.graalvm.compiler.nodes.spi.LIRLowerable; import org.graalvm.compiler.nodes.spi.NodeLIRBuilderTool; import org.graalvm.compiler.nodes.util.GraphUtil; @@ -106,8 +107,8 @@ } ValueNode removedValue = phi.valueAt(predIndex); phi.removeInput(predIndex); - if (removedValue != null && removedValue.isAlive() && removedValue.hasNoUsages() && GraphUtil.isFloatingNode(removedValue)) { - GraphUtil.killWithUnusedFloatingInputs(removedValue); + if (removedValue != null) { + GraphUtil.tryKillUnused(removedValue); } } } @@ -141,7 +142,11 @@ } public NodeIterable valuePhis() { - return this.usages().filter(ValuePhiNode.class).filter(this::isPhiAtMerge); + return this.usages().filter(ValuePhiNode.class); + } + + public NodeIterable memoryPhis() { + return this.usages().filter(MemoryPhiNode.class); } @Override