Mercurial > hg > truffle
diff graal/com.oracle.graal.alloc/src/com/oracle/graal/alloc/ComputeBlockOrder.java @ 7353:b5280041f59e
Experiment with soft alignment for branch targets.
author | Thomas Wuerthinger <thomas.wuerthinger@oracle.com> |
---|---|
date | Sun, 13 Jan 2013 19:32:16 +0100 |
parents | 9f69799a1768 |
children | 4c6e577d0c01 |
line wrap: on
line diff
--- a/graal/com.oracle.graal.alloc/src/com/oracle/graal/alloc/ComputeBlockOrder.java Sun Jan 13 01:55:07 2013 +0100 +++ b/graal/com.oracle.graal.alloc/src/com/oracle/graal/alloc/ComputeBlockOrder.java Sun Jan 13 19:32:16 2013 +0100 @@ -98,10 +98,10 @@ if (block.isLoopHeader()) { block.align = true; } - order.add(block); + addBlock(block, order); } if (block.isLoopEnd() && skipLoopHeader(block.getLoop().header)) { - order.add(block.getLoop().header); + addBlock(block.getLoop().header, order); for (Block succ : block.getLoop().header.getSuccessors()) { if (succ.getLoopDepth() == block.getLoopDepth()) { succ.align = true; @@ -137,6 +137,13 @@ } } + private static void addBlock(Block block, List<Block> order) { + if (order.size() > 0 && block.getPredecessors().size() == 1 && block.getPredecessors().get(0) != order.get(order.size() - 1)) { + block.softAlign = false; + } + order.add(block); + } + private boolean skipLoopHeader(Block bestSucc) { return (reorderLoops && bestSucc.isLoopHeader() && !bestSucc.isLoopEnd() && bestSucc.getLoop().loopBegin().loopEnds().count() == 1); }