# HG changeset patch # User Thomas Wuerthinger # Date 1358507461 -3600 # Node ID ca3e5df0e6cfb854821536ad710a2cc6075eb3b8 # Parent 600f7bad141cd09c80601f091ce66f6f3893fb8d Small clean up of access to predecessor/successor of blocks. diff -r 600f7bad141c -r ca3e5df0e6cf 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 Thu Jan 17 17:49:00 2013 +0100 +++ b/graal/com.oracle.graal.alloc/src/com/oracle/graal/alloc/ComputeBlockOrder.java Fri Jan 18 12:11:01 2013 +0100 @@ -112,7 +112,7 @@ Block mostLikelySuccessor = findAndMarkMostLikelySuccessor(block, visitedBlocks); enqueueSuccessors(block, worklist, visitedBlocks); if (mostLikelySuccessor != null) { - if (!mostLikelySuccessor.isLoopHeader() && mostLikelySuccessor.getPredecessors().size() > 1) { + if (!mostLikelySuccessor.isLoopHeader() && mostLikelySuccessor.getPredecessorCount() > 1) { // We are at a merge. Check probabilities of predecessors that are not yet scheduled. double unscheduledSum = 0.0; for (Block pred : mostLikelySuccessor.getPredecessors()) { diff -r 600f7bad141c -r ca3e5df0e6cf graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/alloc/LinearScan.java --- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/alloc/LinearScan.java Thu Jan 17 17:49:00 2013 +0100 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/alloc/LinearScan.java Fri Jan 18 12:11:01 2013 +0100 @@ -858,7 +858,7 @@ reportFailure(numBlocks); } - TTY.println("preds=" + startBlock.getPredecessors().size() + ", succs=" + startBlock.getSuccessors().size()); + TTY.println("preds=" + startBlock.getPredecessorCount() + ", succs=" + startBlock.getSuccessorCount()); TTY.println("startBlock-ID: " + startBlock.getId()); // bailout of if this occurs in product mode. @@ -917,7 +917,7 @@ definedIn.add(successor); } } else { - if (++hitCount[successor.getId()] == successor.getPredecessors().size()) { + if (++hitCount[successor.getId()] == successor.getPredecessorCount()) { definedIn.add(successor); } } @@ -1540,8 +1540,8 @@ // check if block is empty (only label and branch) if (instructions.size() == 2) { - Block pred = block.getPredecessors().get(0); - Block sux = block.getSuccessors().get(0); + Block pred = block.getFirstPredecessor(); + Block sux = block.getFirstSuccessor(); // prevent optimization of two consecutive blocks if (!blockCompleted.get(pred.getLinearScanNumber()) && !blockCompleted.get(sux.getLinearScanNumber())) { diff -r 600f7bad141c -r ca3e5df0e6cf graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/LIRGenerator.java --- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/LIRGenerator.java Thu Jan 17 17:49:00 2013 +0100 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/LIRGenerator.java Fri Jan 18 12:11:01 2013 +0100 @@ -289,12 +289,12 @@ } if (block == lir.cfg.getStartBlock()) { - assert block.getPredecessors().size() == 0; + assert block.getPredecessorCount() == 0; currentLockCount = 0; emitPrologue(); } else { - assert block.getPredecessors().size() > 0; + assert block.getPredecessorCount() > 0; currentLockCount = -1; for (Block pred : block.getPredecessors()) { diff -r 600f7bad141c -r ca3e5df0e6cf graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ControlFlowOptimizer.java --- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ControlFlowOptimizer.java Thu Jan 17 17:49:00 2013 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ControlFlowOptimizer.java Fri Jan 18 12:11:01 2013 +0100 @@ -79,7 +79,7 @@ for (Block pred : block.getPredecessors()) { Collections.replaceAll(pred.getSuccessors(), block, other); } - for (int i = 0; i < other.getPredecessors().size(); i++) { + for (int i = 0; i < other.getPredecessorCount(); i++) { if (other.getPredecessors().get(i) == block) { other.getPredecessors().remove(i); other.getPredecessors().addAll(i, block.getPredecessors()); diff -r 600f7bad141c -r ca3e5df0e6cf graal/com.oracle.graal.lir/src/com/oracle/graal/lir/EdgeMoveOptimizer.java --- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/EdgeMoveOptimizer.java Thu Jan 17 17:49:00 2013 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/EdgeMoveOptimizer.java Fri Jan 18 12:11:01 2013 +0100 @@ -213,7 +213,7 @@ // the same blocks. return; } - assert sux.getPredecessors().get(0) == block : "invalid control flow"; + assert sux.getFirstPredecessor() == block : "invalid control flow"; // ignore the label at the beginning of the block List seq = suxInstructions.subList(1, suxInstructions.size()); diff -r 600f7bad141c -r ca3e5df0e6cf 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 Thu Jan 17 17:49:00 2013 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/cfg/Block.java Fri Jan 18 12:11:01 2013 +0100 @@ -81,6 +81,10 @@ return getBeginNode().next() instanceof ExceptionObjectNode; } + public Block getFirstPredecessor() { + return predecessors.get(0); + } + public List getPredecessors() { return predecessors; } diff -r 600f7bad141c -r ca3e5df0e6cf 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 Thu Jan 17 17:49:00 2013 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/cfg/ControlFlowGraph.java Fri Jan 18 12:11:01 2013 +0100 @@ -226,9 +226,8 @@ for (LoopExitNode exit : loopBegin.loopExits()) { Block exitBlock = nodeToBlock.get(exit); - List predecessors = exitBlock.getPredecessors(); - assert predecessors.size() == 1; - computeLoopBlocks(predecessors.get(0), loop); + assert exitBlock.getPredecessorCount() == 1; + computeLoopBlocks(exitBlock.getFirstPredecessor(), loop); loop.exits.add(exitBlock); } List unexpected = new LinkedList<>(); @@ -280,15 +279,12 @@ } private void computeDominators() { - assert reversePostOrder[0].getPredecessors().size() == 0 : "start block has no predecessor and therefore no dominator"; + assert reversePostOrder[0].getPredecessorCount() == 0 : "start block has no predecessor and therefore no dominator"; for (int i = 1; i < reversePostOrder.length; i++) { Block block = reversePostOrder[i]; - List predecessors = block.getPredecessors(); - assert predecessors.size() > 0; - - Block dominator = predecessors.get(0); - for (int j = 1; j < predecessors.size(); j++) { - Block pred = predecessors.get(j); + assert block.getPredecessorCount() > 0; + Block dominator = null; + for (Block pred : block.getPredecessors()) { if (!pred.isLoopEnd()) { dominator = commonDominator(dominator, pred); } @@ -306,6 +302,12 @@ } public static Block commonDominator(Block a, Block b) { + if (a == null) { + return b; + } + if (b == null) { + return a; + } Block iterA = a; Block iterB = b; while (iterA != iterB) { diff -r 600f7bad141c -r ca3e5df0e6cf graal/com.oracle.graal.phases/src/com/oracle/graal/phases/graph/ReentrantBlockIterator.java --- a/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/graph/ReentrantBlockIterator.java Thu Jan 17 17:49:00 2013 +0100 +++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/graph/ReentrantBlockIterator.java Fri Jan 18 12:11:01 2013 +0100 @@ -64,8 +64,8 @@ info.endStates.add(blockEndStates.get(predecessors.get(i).getEndNode())); } for (Block loopExit : loop.exits) { - assert loopExit.getPredecessors().size() == 1; - T exitState = blockEndStates.get(loopExit.getPredecessors().get(0).getEndNode()); + assert loopExit.getPredecessorCount() == 1; + T exitState = blockEndStates.get(loopExit.getFirstPredecessor().getEndNode()); assert exitState != null; info.exitStates.add(exitState); } @@ -102,7 +102,7 @@ int i = 0; assert loop.exits.size() == exitStates.size(); for (Block exit : loop.exits) { - blockEndStates.put(exit.getPredecessors().get(0).getEndNode(), exitStates.get(i++)); + blockEndStates.put(exit.getFirstPredecessor().getEndNode(), exitStates.get(i++)); blockQueue.addFirst(exit); } } diff -r 600f7bad141c -r ca3e5df0e6cf graal/com.oracle.graal.phases/src/com/oracle/graal/phases/schedule/SchedulePhase.java --- a/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/schedule/SchedulePhase.java Thu Jan 17 17:49:00 2013 +0100 +++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/schedule/SchedulePhase.java Fri Jan 18 12:11:01 2013 +0100 @@ -246,7 +246,7 @@ assert mergeBlock != null : "no block for merge " + merge.toString(Verbosity.Id); for (int i = 0; i < phi.valueCount(); ++i) { if (phi.valueAt(i) == node) { - if (mergeBlock.getPredecessors().size() <= i) { + if (mergeBlock.getPredecessorCount() <= i) { TTY.println(merge.toString()); TTY.println(phi.toString()); TTY.println(merge.cfgPredecessors().toString()); diff -r 600f7bad141c -r ca3e5df0e6cf graal/com.oracle.graal.printer/src/com/oracle/graal/printer/CFGPrinter.java --- a/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/CFGPrinter.java Thu Jan 17 17:49:00 2013 +0100 +++ b/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/CFGPrinter.java Fri Jan 18 12:11:01 2013 +0100 @@ -241,7 +241,7 @@ out.println("HIR"); out.disableIndentation(); - if (block.getPredecessors().size() == 0) { + if (block.getPredecessorCount() == 0) { // Currently method parameters are not in the schedule, so print them separately here. for (ValueNode param : block.getBeginNode().graph().getNodes(LocalNode.class)) { printNode(param, false);