Mercurial > hg > graal-compiler
changeset 9464:b5d83338286f
Fix post dominator calculation.
author | Thomas Wuerthinger <thomas.wuerthinger@oracle.com> |
---|---|
date | Wed, 01 May 2013 15:02:36 +0200 |
parents | 902a974d55c8 |
children | 89c5c388d6d5 |
files | graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/cfg/ControlFlowGraph.java |
diffstat | 1 files changed, 15 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- 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; } }