changeset 7499:ca3e5df0e6cf

Small clean up of access to predecessor/successor of blocks.
author Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
date Fri, 18 Jan 2013 12:11:01 +0100
parents 600f7bad141c
children 994f7ed25a46
files graal/com.oracle.graal.alloc/src/com/oracle/graal/alloc/ComputeBlockOrder.java graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/alloc/LinearScan.java graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/LIRGenerator.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/ControlFlowOptimizer.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/EdgeMoveOptimizer.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/cfg/Block.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/cfg/ControlFlowGraph.java graal/com.oracle.graal.phases/src/com/oracle/graal/phases/graph/ReentrantBlockIterator.java graal/com.oracle.graal.phases/src/com/oracle/graal/phases/schedule/SchedulePhase.java graal/com.oracle.graal.printer/src/com/oracle/graal/printer/CFGPrinter.java
diffstat 10 files changed, 30 insertions(+), 24 deletions(-) [+]
line wrap: on
line diff
--- 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()) {
--- 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())) {
--- 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()) {
--- 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());
--- 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<LIRInstruction> seq = suxInstructions.subList(1, suxInstructions.size());
--- 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<Block> getPredecessors() {
         return predecessors;
     }
--- 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<Block> 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<Block> 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<Block> 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) {
--- 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);
                             }
                         }
--- 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());
--- 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);