Mercurial > hg > truffle
changeset 7326:6939a5af19d5
Be sure to remove framestate of merge when removing empty diamond shape
author | Gilles Duboscq <duboscq@ssw.jku.at> |
---|---|
date | Thu, 10 Jan 2013 12:03:14 +0100 |
parents | 4013a84e1dd0 |
children | 1003fde9b882 c5a9bcd9493d |
files | graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IfNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/CanonicalizerTool.java graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/CanonicalizerPhase.java |
diffstat | 3 files changed, 11 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- 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); } }
--- 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); }
--- 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); + } } }