# HG changeset patch # User Thomas Wuerthinger # Date 1367413356 -7200 # Node ID b5d83338286f628163e8ed3248d9a16d38d11b9c # Parent 902a974d55c8d24ef8ee5e05dde0eb463fd8c138 Fix post dominator calculation. diff -r 902a974d55c8 -r b5d83338286f graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/cfg/ControlFlowGraph.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/cfg/ControlFlowGraph.java Tue Apr 30 23:24:25 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/cfg/ControlFlowGraph.java Wed May 01 15:02:36 2013 +0200 @@ -335,21 +335,28 @@ } private void computePostdominators() { - for (Block block : postOrder()) { + outer: for (Block block : postOrder()) { if (block.isLoopEnd()) { // We do not want the loop header registered as the postdominator of the loop end. continue; } - Block postdominator = null; + if (block.getSuccessorCount() == 0) { + // No successors => no postdominator. + continue; + } + Block firstSucc = block.getSuccessors().get(0); + if (block.getSuccessorCount() == 1) { + block.postdominator = block; + } + Block postdominator = firstSucc; for (Block sux : block.getSuccessors()) { - if (sux.isExceptionEntry()) { - // We ignore exception handlers. - } else if (postdominator == null) { - postdominator = sux; - } else { - postdominator = commonPostdominator(postdominator, sux); + postdominator = commonPostdominator(postdominator, sux); + if (postdominator == null) { + // There is a dead end => no postdominator available. + continue outer; } } + assert !block.getSuccessors().contains(postdominator); block.postdominator = postdominator; } }