changeset 15537:8117e9cadb48

Use List instead of an array in AbstractControlFlowGraph.
author Josef Eisl <josef.eisl@jku.at>
date Thu, 24 Apr 2014 14:00:07 +0200
parents d897375b372a
children 9398d53c15b4
files graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineControlFlowGraph.java graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/cfg/AbstractControlFlowGraph.java graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/cfg/BlockMap.java graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/MemoryScheduleTest.java graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/SimpleCFGTest.java graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java graal/com.oracle.graal.java.decompiler/src/com/oracle/graal/java/decompiler/Decompiler.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/cfg/CFGVerifier.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/cfg/ControlFlowGraph.java graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ProfileCompiledMethodsPhase.java graal/com.oracle.graal.printer/src/com/oracle/graal/printer/BinaryGraphPrinter.java graal/com.oracle.graal.printer/src/com/oracle/graal/printer/CFGPrinterObserver.java
diffstat 12 files changed, 66 insertions(+), 66 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineControlFlowGraph.java	Thu Apr 24 13:38:14 2014 +0200
+++ b/graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineControlFlowGraph.java	Thu Apr 24 14:00:07 2014 +0200
@@ -31,17 +31,17 @@
 
 public class BaselineControlFlowGraph implements AbstractControlFlowGraph<BciBlock> {
 
-    private BciBlock[] blocks;
+    private List<BciBlock> blocks;
     private Collection<Loop<BciBlock>> loops;
     private BitSet visited;
 
     public BaselineControlFlowGraph(BciBlockMapping blockMap) {
-        blocks = blockMap.blocks.toArray(new BciBlock[0]);
+        blocks = blockMap.blocks;
         loops = new ArrayList<>();
         computeLoopInformation();
     }
 
-    public BciBlock[] getBlocks() {
+    public List<BciBlock> getBlocks() {
         return blocks;
     }
 
@@ -50,17 +50,17 @@
     }
 
     public BciBlock getStartBlock() {
-        if (blocks.length > 0) {
-            return blocks[0];
+        if (!blocks.isEmpty()) {
+            return blocks.get(0);
         }
         return null;
     }
 
     private void computeLoopInformation() {
-        visited = new BitSet(blocks.length);
+        visited = new BitSet(blocks.size());
         Deque<BaselineLoop> stack = new ArrayDeque<>();
-        for (int i = blocks.length - 1; i >= 0; i--) {
-            BciBlock block = blocks[i];
+        for (int i = blocks.size() - 1; i >= 0; i--) {
+            BciBlock block = blocks.get(i);
             calcLoop(block, stack);
         }
     }
--- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/cfg/AbstractControlFlowGraph.java	Thu Apr 24 13:38:14 2014 +0200
+++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/cfg/AbstractControlFlowGraph.java	Thu Apr 24 14:00:07 2014 +0200
@@ -29,7 +29,7 @@
     static final int BLOCK_ID_INITIAL = -1;
     static final int BLOCK_ID_VISITED = -2;
 
-    T[] getBlocks();
+    List<T> getBlocks();
 
     Collection<Loop<T>> getLoops();
 
--- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/cfg/BlockMap.java	Thu Apr 24 13:38:14 2014 +0200
+++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/cfg/BlockMap.java	Thu Apr 24 14:00:07 2014 +0200
@@ -28,7 +28,7 @@
 
     @SuppressWarnings("unchecked")
     public BlockMap(AbstractControlFlowGraph<?> cfg) {
-        data = (T[]) new Object[cfg.getBlocks().length];
+        data = (T[]) new Object[cfg.getBlocks().size()];
     }
 
     public T get(AbstractBlock<?> block) {
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/MemoryScheduleTest.java	Thu Apr 24 13:38:14 2014 +0200
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/MemoryScheduleTest.java	Thu Apr 24 14:00:07 2014 +0200
@@ -164,7 +164,7 @@
     @Test
     public void testLoop1() {
         SchedulePhase schedule = getFinalSchedule("testLoop1Snippet", TestMode.WITHOUT_FRAMESTATES);
-        assertEquals(6, schedule.getCFG().getBlocks().length);
+        assertEquals(6, schedule.getCFG().getBlocks().size());
         assertReadWithinStartBlock(schedule, true);
         assertReadWithinAllReturnBlocks(schedule, false);
     }
@@ -189,7 +189,7 @@
     @Test
     public void testLoop2() {
         SchedulePhase schedule = getFinalSchedule("testLoop2Snippet", TestMode.WITHOUT_FRAMESTATES);
-        assertEquals(6, schedule.getCFG().getBlocks().length);
+        assertEquals(6, schedule.getCFG().getBlocks().size());
         assertReadWithinStartBlock(schedule, false);
         assertReadWithinAllReturnBlocks(schedule, true);
     }
@@ -211,7 +211,7 @@
     @Test
     public void testLoop3() {
         SchedulePhase schedule = getFinalSchedule("testLoop3Snippet", TestMode.WITHOUT_FRAMESTATES);
-        assertEquals(6, schedule.getCFG().getBlocks().length);
+        assertEquals(6, schedule.getCFG().getBlocks().size());
         assertReadWithinStartBlock(schedule, true);
         assertReadWithinAllReturnBlocks(schedule, false);
     }
@@ -247,7 +247,7 @@
     @Test
     public void testLoop5() {
         SchedulePhase schedule = getFinalSchedule("testLoop5Snippet", TestMode.WITHOUT_FRAMESTATES);
-        assertEquals(10, schedule.getCFG().getBlocks().length);
+        assertEquals(10, schedule.getCFG().getBlocks().size());
         assertReadWithinStartBlock(schedule, false);
         assertReadWithinAllReturnBlocks(schedule, false);
     }
@@ -285,7 +285,7 @@
     @Test
     public void testIfRead1() {
         SchedulePhase schedule = getFinalSchedule("testIfRead1Snippet", TestMode.WITHOUT_FRAMESTATES);
-        assertEquals(3, schedule.getCFG().getBlocks().length);
+        assertEquals(3, schedule.getCFG().getBlocks().size());
         assertReadWithinStartBlock(schedule, true);
         assertReadAndWriteInSameBlock(schedule, false);
     }
@@ -306,7 +306,7 @@
     @Test
     public void testIfRead2() {
         SchedulePhase schedule = getFinalSchedule("testIfRead2Snippet", TestMode.WITHOUT_FRAMESTATES);
-        assertEquals(3, schedule.getCFG().getBlocks().length);
+        assertEquals(3, schedule.getCFG().getBlocks().size());
         assertEquals(1, schedule.getCFG().graph.getNodes().filter(FloatingReadNode.class).count());
         assertReadWithinStartBlock(schedule, false);
         assertReadWithinAllReturnBlocks(schedule, false);
@@ -328,7 +328,7 @@
     @Test
     public void testIfRead3() {
         SchedulePhase schedule = getFinalSchedule("testIfRead3Snippet", TestMode.WITHOUT_FRAMESTATES);
-        assertEquals(4, schedule.getCFG().getBlocks().length);
+        assertEquals(4, schedule.getCFG().getBlocks().size());
         assertReadWithinStartBlock(schedule, false);
         assertReadWithinAllReturnBlocks(schedule, true);
     }
@@ -349,7 +349,7 @@
     @Test
     public void testIfRead4() {
         SchedulePhase schedule = getFinalSchedule("testIfRead4Snippet", TestMode.WITHOUT_FRAMESTATES);
-        assertEquals(3, schedule.getCFG().getBlocks().length);
+        assertEquals(3, schedule.getCFG().getBlocks().size());
         assertReadWithinStartBlock(schedule, false);
         assertReadWithinAllReturnBlocks(schedule, false);
         assertReadAndWriteInSameBlock(schedule, true);
@@ -368,7 +368,7 @@
     @Test
     public void testIfRead5() {
         SchedulePhase schedule = getFinalSchedule("testIfRead5Snippet", TestMode.WITHOUT_FRAMESTATES);
-        assertEquals(4, schedule.getCFG().getBlocks().length);
+        assertEquals(4, schedule.getCFG().getBlocks().size());
         assertReadWithinStartBlock(schedule, false);
         assertReadWithinAllReturnBlocks(schedule, true);
         assertReadAndWriteInSameBlock(schedule, false);
@@ -397,7 +397,7 @@
         StructuredGraph graph = schedule.getCFG().graph;
         NodeIterable<WriteNode> writeNodes = graph.getNodes().filter(WriteNode.class);
 
-        assertEquals(1, schedule.getCFG().getBlocks().length);
+        assertEquals(1, schedule.getCFG().getBlocks().size());
         assertEquals(8, writeNodes.count());
         assertEquals(1, graph.getNodes().filter(FloatingReadNode.class).count());
 
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/SimpleCFGTest.java	Thu Apr 24 13:38:14 2014 +0200
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/SimpleCFGTest.java	Thu Apr 24 14:00:07 2014 +0200
@@ -63,45 +63,45 @@
 
         ControlFlowGraph cfg = ControlFlowGraph.compute(graph, true, true, true, true);
 
-        Block[] blocks = cfg.getBlocks();
+        List<Block> blocks = cfg.getBlocks();
         // check number of blocks
-        assertEquals(4, blocks.length);
+        assertEquals(4, blocks.size());
 
         // check block - node assignment
-        assertEquals(blocks[0], cfg.blockFor(graph.start()));
-        assertEquals(blocks[0], cfg.blockFor(ifNode));
-        assertEquals(blocks[1], cfg.blockFor(trueBegin));
-        assertEquals(blocks[1], cfg.blockFor(trueEnd));
-        assertEquals(blocks[2], cfg.blockFor(falseBegin));
-        assertEquals(blocks[2], cfg.blockFor(falseEnd));
-        assertEquals(blocks[3], cfg.blockFor(merge));
-        assertEquals(blocks[3], cfg.blockFor(returnNode));
+        assertEquals(blocks.get(0), cfg.blockFor(graph.start()));
+        assertEquals(blocks.get(0), cfg.blockFor(ifNode));
+        assertEquals(blocks.get(1), cfg.blockFor(trueBegin));
+        assertEquals(blocks.get(1), cfg.blockFor(trueEnd));
+        assertEquals(blocks.get(2), cfg.blockFor(falseBegin));
+        assertEquals(blocks.get(2), cfg.blockFor(falseEnd));
+        assertEquals(blocks.get(3), cfg.blockFor(merge));
+        assertEquals(blocks.get(3), cfg.blockFor(returnNode));
 
         // check postOrder
         Iterator<Block> it = cfg.postOrder().iterator();
-        for (int i = blocks.length - 1; i >= 0; i--) {
+        for (int i = blocks.size() - 1; i >= 0; i--) {
             assertTrue(it.hasNext());
             Block b = it.next();
-            assertEquals(blocks[i], b);
+            assertEquals(blocks.get(i), b);
         }
 
         // check dominators
-        assertDominator(blocks[0], null);
-        assertDominator(blocks[1], blocks[0]);
-        assertDominator(blocks[2], blocks[0]);
-        assertDominator(blocks[3], blocks[0]);
+        assertDominator(blocks.get(0), null);
+        assertDominator(blocks.get(1), blocks.get(0));
+        assertDominator(blocks.get(2), blocks.get(0));
+        assertDominator(blocks.get(3), blocks.get(0));
 
         // check dominated
-        assertDominatedSize(blocks[0], 3);
-        assertDominatedSize(blocks[1], 0);
-        assertDominatedSize(blocks[2], 0);
-        assertDominatedSize(blocks[3], 0);
+        assertDominatedSize(blocks.get(0), 3);
+        assertDominatedSize(blocks.get(1), 0);
+        assertDominatedSize(blocks.get(2), 0);
+        assertDominatedSize(blocks.get(3), 0);
 
         // check postdominators
-        assertPostdominator(blocks[0], blocks[3]);
-        assertPostdominator(blocks[1], blocks[3]);
-        assertPostdominator(blocks[2], blocks[3]);
-        assertPostdominator(blocks[3], null);
+        assertPostdominator(blocks.get(0), blocks.get(3));
+        assertPostdominator(blocks.get(1), blocks.get(3));
+        assertPostdominator(blocks.get(2), blocks.get(3));
+        assertPostdominator(blocks.get(3), null);
     }
 
     public static void assertDominator(Block block, Block expectedDominator) {
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java	Thu Apr 24 13:38:14 2014 +0200
+++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java	Thu Apr 24 14:00:07 2014 +0200
@@ -218,7 +218,7 @@
     }
 
     public static LIRGenerationResult emitLIR(Backend backend, TargetDescription target, SchedulePhase schedule, StructuredGraph graph, Object stub, CallingConvention cc, RegisterConfig registerConfig) {
-        Block[] blocks = schedule.getCFG().getBlocks();
+        List<Block> blocks = schedule.getCFG().getBlocks();
         Block startBlock = schedule.getCFG().getStartBlock();
         assert startBlock != null;
         assert startBlock.getPredecessorCount() == 0;
@@ -228,8 +228,8 @@
         List<Block> linearScanOrder = null;
         try (Scope ds = Debug.scope("MidEnd")) {
             try (Scope s = Debug.scope("ComputeLinearScanOrder")) {
-                codeEmittingOrder = ComputeBlockOrder.computeCodeEmittingOrder(blocks.length, startBlock);
-                linearScanOrder = ComputeBlockOrder.computeLinearScanOrder(blocks.length, startBlock);
+                codeEmittingOrder = ComputeBlockOrder.computeCodeEmittingOrder(blocks.size(), startBlock);
+                linearScanOrder = ComputeBlockOrder.computeLinearScanOrder(blocks.size(), startBlock);
 
                 lir = new LIR(schedule.getCFG(), linearScanOrder, codeEmittingOrder);
                 Debug.dump(lir, "After linear scan order");
--- a/graal/com.oracle.graal.java.decompiler/src/com/oracle/graal/java/decompiler/Decompiler.java	Thu Apr 24 13:38:14 2014 +0200
+++ b/graal/com.oracle.graal.java.decompiler/src/com/oracle/graal/java/decompiler/Decompiler.java	Thu Apr 24 14:00:07 2014 +0200
@@ -68,8 +68,8 @@
             cfgBlocks.add(b);
         }
 
-        for (int i = 0; i < getCfg().getBlocks().length - 1; i++) {
-            if (cfg.getBlocks()[i].getId() >= cfg.getBlocks()[i + 1].getId()) {
+        for (int i = 0; i < getCfg().getBlocks().size() - 1; i++) {
+            if (cfg.getBlocks().get(i).getId() >= cfg.getBlocks().get(i + 1).getId()) {
                 throw new AssertionError();
             }
         }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/cfg/CFGVerifier.java	Thu Apr 24 13:38:14 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/cfg/CFGVerifier.java	Thu Apr 24 14:00:07 2014 +0200
@@ -31,7 +31,7 @@
     public static boolean verify(ControlFlowGraph cfg) {
         for (Block block : cfg.getBlocks()) {
             assert block.getId() >= 0;
-            assert cfg.getBlocks()[block.getId()] == block;
+            assert cfg.getBlocks().get(block.getId()) == block;
 
             for (Block pred : block.getPredecessors()) {
                 assert pred.getSuccessors().contains(block);
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/cfg/ControlFlowGraph.java	Thu Apr 24 13:38:14 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/cfg/ControlFlowGraph.java	Thu Apr 24 14:00:07 2014 +0200
@@ -35,7 +35,7 @@
     public final StructuredGraph graph;
 
     private final NodeMap<Block> nodeToBlock;
-    private Block[] reversePostOrder;
+    private List<Block> reversePostOrder;
     private List<Loop<Block>> loops;
 
     public static ControlFlowGraph compute(StructuredGraph graph, boolean connectBlocks, boolean computeLoops, boolean computeDominators, boolean computePostdominators) {
@@ -64,12 +64,12 @@
         this.nodeToBlock = graph.createNodeMap(true);
     }
 
-    public Block[] getBlocks() {
+    public List<Block> getBlocks() {
         return reversePostOrder;
     }
 
     public Block getStartBlock() {
-        return reversePostOrder[0];
+        return reversePostOrder.get(0);
     }
 
     public Iterable<Block> postOrder() {
@@ -79,16 +79,16 @@
             public Iterator<Block> iterator() {
                 return new Iterator<Block>() {
 
-                    private int nextIndex = reversePostOrder.length - 1;
+                    private ListIterator<Block> it = reversePostOrder.listIterator(reversePostOrder.size());
 
                     @Override
                     public boolean hasNext() {
-                        return nextIndex >= 0;
+                        return it.hasPrevious();
                     }
 
                     @Override
                     public Block next() {
-                        return reversePostOrder[nextIndex--];
+                        return it.previous();
                     }
 
                     @Override
@@ -188,11 +188,11 @@
         // Compute reverse postorder and number blocks.
         assert postOrder.size() <= numBlocks : "some blocks originally created can be unreachable, so actual block list can be shorter";
         numBlocks = postOrder.size();
-        reversePostOrder = new Block[numBlocks];
+        reversePostOrder = new ArrayList<>(numBlocks);
         for (int i = 0; i < numBlocks; i++) {
             Block block = postOrder.get(numBlocks - i - 1);
             block.setId(i);
-            reversePostOrder[i] = block;
+            reversePostOrder.add(block);
         }
     }
 
@@ -307,9 +307,9 @@
     }
 
     private void computeDominators() {
-        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];
+        assert reversePostOrder.get(0).getPredecessorCount() == 0 : "start block has no predecessor and therefore no dominator";
+        for (int i = 1; i < reversePostOrder.size(); i++) {
+            Block block = reversePostOrder.get(i);
             assert block.getPredecessorCount() > 0;
             Block dominator = null;
             for (Block pred : block.getPredecessors()) {
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ProfileCompiledMethodsPhase.java	Thu Apr 24 13:38:14 2014 +0200
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ProfileCompiledMethodsPhase.java	Thu Apr 24 14:00:07 2014 +0200
@@ -79,7 +79,7 @@
         while (current.next() instanceof FixedWithNextNode) {
             current = (FixedWithNextNode) current.next();
         }
-        addSectionCounters(current, Arrays.asList(cfg.getBlocks()), cfg.getLoops(), schedule, probabilities);
+        addSectionCounters(current, cfg.getBlocks(), cfg.getLoops(), schedule, probabilities);
 
         if (WITH_INVOKES) {
             for (Node node : graph.getNodes()) {
--- a/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/BinaryGraphPrinter.java	Thu Apr 24 13:38:14 2014 +0200
+++ b/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/BinaryGraphPrinter.java	Thu Apr 24 14:00:07 2014 +0200
@@ -137,7 +137,7 @@
         }
         ControlFlowGraph cfg = schedule == null ? null : schedule.getCFG();
         BlockMap<List<ScheduledNode>> blockToNodes = schedule == null ? null : schedule.getBlockToNodesMap();
-        Block[] blocks = cfg == null ? null : cfg.getBlocks();
+        List<Block> blocks = cfg == null ? null : cfg.getBlocks();
         writeNodes(graph);
         writeBlocks(blocks, blockToNodes);
     }
@@ -460,9 +460,9 @@
         }
     }
 
-    private void writeBlocks(Block[] blocks, BlockMap<List<ScheduledNode>> blockToNodes) throws IOException {
+    private void writeBlocks(List<Block> blocks, BlockMap<List<ScheduledNode>> blockToNodes) throws IOException {
         if (blocks != null) {
-            writeInt(blocks.length);
+            writeInt(blocks.size());
             for (Block block : blocks) {
                 List<ScheduledNode> nodes = blockToNodes.get(block);
                 writeInt(block.getId());
--- a/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/CFGPrinterObserver.java	Thu Apr 24 13:38:14 2014 +0200
+++ b/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/CFGPrinterObserver.java	Thu Apr 24 14:00:07 2014 +0200
@@ -174,7 +174,7 @@
                 StructuredGraph graph = (StructuredGraph) object;
                 cfgPrinter.cfg = ControlFlowGraph.compute(graph, true, true, true, false);
             }
-            cfgPrinter.printCFG(message, Arrays.asList(cfgPrinter.cfg.getBlocks()), true);
+            cfgPrinter.printCFG(message, cfgPrinter.cfg.getBlocks(), true);
 
         } else if (object instanceof CompilationResult) {
             final CompilationResult compResult = (CompilationResult) object;