# HG changeset patch # User Gilles Duboscq # Date 1357815794 -3600 # Node ID 6939a5af19d50f4a35a1a2a984cfd1bf0460d730 # Parent 4013a84e1dd00a860b85229b8cdd7966b881abee Be sure to remove framestate of merge when removing empty diamond shape diff -r 4013a84e1dd0 -r 6939a5af19d5 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IfNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IfNode.java Thu Jan 10 11:41:10 2013 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IfNode.java Thu Jan 10 12:03:14 2013 +0100 @@ -428,6 +428,7 @@ originalFalseSuccessor.prepareDelete(); FixedNode next = merge.next(); + FrameState state = merge.stateAfter(); merge.setNext(null); setTrueSuccessor(null); setFalseSuccessor(null); @@ -438,6 +439,9 @@ merge.safeDelete(); trueEnd.safeDelete(); falseEnd.safeDelete(); + if (state != null) { + tool.removeIfUnused(state); + } tool.addToWorkList(next); } } diff -r 4013a84e1dd0 -r 6939a5af19d5 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/CanonicalizerTool.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/CanonicalizerTool.java Thu Jan 10 11:41:10 2013 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/CanonicalizerTool.java Thu Jan 10 12:03:14 2013 +0100 @@ -24,10 +24,12 @@ import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; +import com.oracle.graal.graph.*; public interface CanonicalizerTool { TargetDescription target(); Assumptions assumptions(); MetaAccessProvider runtime(); + void removeIfUnused(Node node); } diff -r 4013a84e1dd0 -r 6939a5af19d5 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/CanonicalizerPhase.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/CanonicalizerPhase.java Thu Jan 10 11:41:10 2013 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/CanonicalizerPhase.java Thu Jan 10 12:03:14 2013 +0100 @@ -341,5 +341,10 @@ public void addToWorkList(Node node) { nodeWorkSet.addAgain(node); } + + @Override + public void removeIfUnused(Node node) { + tryKillUnused(node); + } } }