Mercurial > hg > graal-compiler
changeset 7284:eea2ffb2efe7
Fix to StructuredGraph.removeSplitPropagate for when a loop gets killed in the process
author | Gilles Duboscq <duboscq@ssw.jku.at> |
---|---|
date | Thu, 20 Dec 2012 14:11:45 +0100 |
parents | 3964f3d4eb18 |
children | f51e46b4d7cf |
files | graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StructuredGraph.java |
diffstat | 1 files changed, 9 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StructuredGraph.java Thu Dec 20 12:06:58 2012 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StructuredGraph.java Thu Dec 20 14:11:45 2012 +0100 @@ -254,18 +254,17 @@ assert node != null; assert node.usages().isEmpty(); assert survivingSuccessor != null; - for (Node successor : node.successors().snapshot()) { - successor.replaceAtPredecessor(null); - if (successor != null && successor != survivingSuccessor && successor.isAlive()) { - GraphUtil.killCFG((BeginNode) successor); + List<Node> snapshot = node.successors().snapshot(); + node.clearSuccessors(); + node.replaceAtPredecessor(survivingSuccessor); + node.safeDelete(); + for (Node successor : snapshot) { + if (successor != null && successor.isAlive()) { + if (successor != survivingSuccessor) { + GraphUtil.killCFG((BeginNode) successor); + } } } - if (survivingSuccessor.isAlive()) { - node.replaceAtPredecessor(survivingSuccessor); - node.safeDelete(); - } else { - assert node.isDeleted() : node + " " + survivingSuccessor; - } } public void replaceSplit(ControlSplitNode node, Node replacement, BeginNode survivingSuccessor) {