# HG changeset patch # User Thomas Wuerthinger # Date 1362952968 -3600 # Node ID bf1c9ae737751f8227df6cfb7f65baadf11c5dbd # Parent 3bbdf34536bcb90846b8247738eb70d0438985de Schedule predecessors before merges. diff -r 3bbdf34536bc -r bf1c9ae73775 graal/com.oracle.graal.alloc/src/com/oracle/graal/alloc/ComputeBlockOrder.java --- a/graal/com.oracle.graal.alloc/src/com/oracle/graal/alloc/ComputeBlockOrder.java Sun Mar 10 19:51:32 2013 +0100 +++ b/graal/com.oracle.graal.alloc/src/com/oracle/graal/alloc/ComputeBlockOrder.java Sun Mar 10 23:02:48 2013 +0100 @@ -118,7 +118,20 @@ private static void addPathToLinearScanOrder(Block block, List order, PriorityQueue worklist, BitSet visitedBlocks) { block.setLinearScanNumber(order.size()); order.add(block); + Block mostLikelySuccessor = findAndMarkMostLikelySuccessor(block, visitedBlocks); enqueueSuccessors(block, worklist, visitedBlocks); + if (mostLikelySuccessor != null) { + if (!mostLikelySuccessor.isLoopHeader() && mostLikelySuccessor.getPredecessorCount() > 1) { + // We are at a merge. Check that predecessors are scheduled. + for (Block pred : mostLikelySuccessor.getPredecessors()) { + if (pred.getLinearScanNumber() == -1) { + visitedBlocks.clear(mostLikelySuccessor.getId()); + return; + } + } + } + addPathToLinearScanOrder(mostLikelySuccessor, order, worklist, visitedBlocks); + } } /** diff -r 3bbdf34536bc -r bf1c9ae73775 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/cfg/Block.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/cfg/Block.java Sun Mar 10 19:51:32 2013 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/cfg/Block.java Sun Mar 10 23:02:48 2013 +0100 @@ -47,6 +47,7 @@ protected Block() { id = ControlFlowGraph.BLOCK_ID_INITIAL; + this.linearScanNumber = -1; } public int getId() {