Mercurial > hg > graal-jvmci-8
changeset 13843:f5f81bc9c9f0
Align successor when deleting aligned empty block.
author | Roland Schatz <roland.schatz@oracle.com> |
---|---|
date | Fri, 31 Jan 2014 11:38:32 +0100 |
parents | a02441dcf05f |
children | 6bc07d0c2682 |
files | graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ControlFlowOptimizer.java |
diffstat | 1 files changed, 15 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ControlFlowOptimizer.java Fri Jan 31 11:35:38 2014 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ControlFlowOptimizer.java Fri Jan 31 11:38:32 2014 +0100 @@ -68,6 +68,16 @@ return instructions.size() == 2 && !instructions.get(instructions.size() - 1).hasState() && !block.isExceptionEntry(); } + private static void alignBlock(LIR lir, Block block) { + if (!block.isAligned()) { + block.setAlign(true); + List<LIRInstruction> instructions = lir.lir(block); + assert instructions.get(0) instanceof StandardOp.LabelOp : "first instruction must always be a label"; + StandardOp.LabelOp label = (StandardOp.LabelOp) instructions.get(0); + instructions.set(0, new StandardOp.LabelOp(label.getLabel(), true)); + } + } + private static void deleteEmptyBlocks(LIR lir, List<Block> blocks) { assert verifyBlocks(lir, blocks); Iterator<Block> iterator = blocks.iterator(); @@ -87,6 +97,11 @@ } block.getSuccessors().clear(); block.getPredecessors().clear(); + + if (block.isAligned()) { + alignBlock(lir, other); + } + Debug.metric("BlocksDeleted").increment(); iterator.remove(); }