changeset 14829:8f6f63e997ba

BciBlock extends AbstractBlockBase
author Niclas Adlertz <niclas.adlertz@oracle.com>
date Mon, 24 Mar 2014 10:24:30 +0000
parents 2b17b6c55880
children 0361885370fb
files graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineCompiler.java graal/com.oracle.graal.java/src/com/oracle/graal/java/BciBlockMapping.java graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java graal/com.oracle.graal.printer/src/com/oracle/graal/printer/CFGPrinter.java
diffstat 4 files changed, 57 insertions(+), 87 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineCompiler.java	Fri Mar 21 13:50:02 2014 +0000
+++ b/graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineCompiler.java	Mon Mar 24 10:24:30 2014 +0000
@@ -136,12 +136,12 @@
 
         // add predecessors
         for (BciBlock block : blockMap.blocks) {
-            for (BciBlock successor : block.successors) {
-                successor.predecessors.add(block);
+            for (BciBlock successor : block.getSuccessors()) {
+                successor.getPredecessors().add(block);
             }
         }
 
-        // calculate loops
+        // calculate loops and dominators used for some steps..
 
         if (isSynchronized(method.getModifiers())) {
             throw GraalInternalError.unimplemented("Handle synchronized methods");
--- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/BciBlockMapping.java	Fri Mar 21 13:50:02 2014 +0000
+++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/BciBlockMapping.java	Mon Mar 24 10:24:30 2014 +0000
@@ -74,7 +74,7 @@
  */
 public final class BciBlockMapping {
 
-    public static class BciBlock implements Cloneable, AbstractBlock<BciBlock> {
+    public static class BciBlock extends AbstractBlockBase<BciBlock> implements Cloneable {
 
         public int startBci;
         public int endBci;
@@ -86,8 +86,10 @@
         public FixedWithNextNode firstInstruction;
         public HIRFrameStateBuilder entryState;
 
-        public ArrayList<BciBlock> successors = new ArrayList<>(2);
-        public ArrayList<BciBlock> predecessors = new ArrayList<>(2); // only used in the baseline
+        // public ArrayList<BciBlock> successors = new ArrayList<>(2);
+        // public ArrayList<BciBlock> predecessors = new ArrayList<>(2); // only used in the
+// baseline
+
         public long exits;
 
         private boolean visited;
@@ -101,6 +103,11 @@
         public BciBlock retSuccessor;
         public boolean endsWithRet = false;
 
+        public BciBlock() {
+            this.successors = new ArrayList<>();
+            this.predecessors = new ArrayList<>();
+        }
+
         public BciBlock exceptionDispatchBlock() {
             if (successors.size() > 0 && successors.get(successors.size() - 1) instanceof ExceptionDispatchBlock) {
                 return successors.get(successors.size() - 1);
@@ -142,10 +149,6 @@
             return sb.toString();
         }
 
-        public int getId() {
-            return blockID;
-        }
-
         public Loop getLoop() {
             // TODO Auto-generated method stub
             return null;
@@ -170,45 +173,12 @@
             return false;
         }
 
-        public List<BciBlock> getPredecessors() {
-            return predecessors;
-        }
-
-        public int getPredecessorCount() {
-            return predecessors.size();
-        }
-
-        public List<BciBlock> getSuccessors() {
-            return successors;
-        }
-
-        public int getSuccessorCount() {
-            return successors.size();
+        public BciBlock getSuccessor(int index) {
+            return successors.get(index);
         }
 
-        public int getLinearScanNumber() {
-            // TODO Auto-generated method stub
-            return 0;
-        }
-
-        public void setLinearScanNumber(int linearScanNumber) {
-            // TODO Auto-generated method stub
-
-        }
-
-        public boolean isAligned() {
-            // TODO Auto-generated method stub
-            return false;
-        }
-
-        public void setAlign(boolean align) {
-            // TODO Auto-generated method stub
-
-        }
-
-        public BciBlock getDominator() {
-            // TODO Auto-generated method stub
-            return null;
+        public BciBlock getPredecessor(int index) {
+            return predecessors.get(index);
         }
     }
 
@@ -292,10 +262,10 @@
         for (BciBlock block : blocks) {
             assert blocks.get(block.blockID) == block;
 
-            for (int i = 0; i < block.successors.size(); i++) {
-                BciBlock sux = block.successors.get(i);
+            for (int i = 0; i < block.getSuccessorCount(); i++) {
+                BciBlock sux = block.getSuccessor(i);
                 if (sux instanceof ExceptionDispatchBlock) {
-                    assert i == block.successors.size() - 1 : "Only one exception handler allowed, and it must be last in successors list";
+                    assert i == block.getSuccessorCount() - 1 : "Only one exception handler allowed, and it must be last in successors list";
                 }
             }
         }
@@ -467,11 +437,11 @@
             BciBlock newBlock = new BciBlock();
             newBlock.startBci = startBci;
             newBlock.endBci = oldBlock.endBci;
-            newBlock.successors.addAll(oldBlock.successors);
+            newBlock.getSuccessors().addAll(oldBlock.getSuccessors());
 
             oldBlock.endBci = startBci - 1;
-            oldBlock.successors.clear();
-            oldBlock.successors.add(newBlock);
+            oldBlock.getSuccessors().clear();
+            oldBlock.getSuccessors().add(newBlock);
 
             for (int i = startBci; i <= newBlock.endBci; i++) {
                 blockMap[i] = newBlock;
@@ -500,7 +470,7 @@
         if (sux.isExceptionEntry) {
             throw new BailoutException("Exception handler can be reached by both normal and exceptional control flow");
         }
-        predecessor.successors.add(sux);
+        predecessor.getSuccessors().add(sux);
     }
 
     private final ArrayList<BciBlock> jsrVisited = new ArrayList<>();
@@ -511,14 +481,14 @@
 
         if (block.endsWithRet) {
             block.retSuccessor = blockMap[scope.nextReturnAddress()];
-            block.successors.add(block.retSuccessor);
+            block.getSuccessors().add(block.retSuccessor);
             assert block.retSuccessor != block.jsrSuccessor;
         }
-        Debug.log("JSR alternatives block %s  sux %s  jsrSux %s  retSux %s  jsrScope %s", block, block.successors, block.jsrSuccessor, block.retSuccessor, block.jsrScope);
+        Debug.log("JSR alternatives block %s  sux %s  jsrSux %s  retSux %s  jsrScope %s", block, block.getSuccessors(), block.jsrSuccessor, block.retSuccessor, block.jsrScope);
 
         if (block.jsrSuccessor != null || !scope.isEmpty()) {
-            for (int i = 0; i < block.successors.size(); i++) {
-                BciBlock successor = block.successors.get(i);
+            for (int i = 0; i < block.getSuccessorCount(); i++) {
+                BciBlock successor = block.getSuccessor(i);
                 JsrScope nextScope = scope;
                 if (successor == block.jsrSuccessor) {
                     nextScope = scope.push(block.jsrReturnBci);
@@ -541,7 +511,7 @@
                         clone.jsrScope = nextScope;
                         successor.jsrAlternatives.put(nextScope, clone);
                     }
-                    block.successors.set(i, clone);
+                    block.getSuccessors().set(i, clone);
                     if (successor == block.jsrSuccessor) {
                         block.jsrSuccessor = clone;
                     }
@@ -551,7 +521,7 @@
                 }
             }
         }
-        for (BciBlock successor : block.successors) {
+        for (BciBlock successor : block.getSuccessors()) {
             if (!jsrVisited.contains(successor)) {
                 createJsrAlternatives(successor);
             }
@@ -580,9 +550,9 @@
                     curHandler.endBci = -1;
                     curHandler.deoptBci = bci;
                     curHandler.handler = h;
-                    curHandler.successors.add(blockMap[h.getHandlerBCI()]);
+                    curHandler.getSuccessors().add(blockMap[h.getHandlerBCI()]);
                     if (lastHandler != null) {
-                        curHandler.successors.add(lastHandler);
+                        curHandler.getSuccessors().add(lastHandler);
                     }
                     exceptionDispatch.put(h, curHandler);
                 }
@@ -652,7 +622,7 @@
                     sb.append(" ExceptionEntry");
                 }
                 sb.append(n).append("  Sux : ");
-                for (BciBlock s : b.successors) {
+                for (BciBlock s : b.getSuccessors()) {
                     sb.append("B").append(s.blockID).append(" (").append(s.startBci).append(" -> ").append(s.endBci).append(")");
                     if (s.isExceptionEntry) {
                         sb.append("!");
@@ -748,7 +718,7 @@
         block.active = true;
 
         long loops = 0;
-        for (BciBlock successor : block.successors) {
+        for (BciBlock successor : block.getSuccessors()) {
             // Recursively process successors.
             loops |= computeBlockOrder(successor);
         }
@@ -778,11 +748,11 @@
 
         block.visited = true;
         long loops = block.loops;
-        for (BciBlock successor : block.successors) {
+        for (BciBlock successor : block.getSuccessors()) {
             // Recursively process successors.
             loops |= fixLoopBits(successor);
         }
-        for (BciBlock successor : block.successors) {
+        for (BciBlock successor : block.getSuccessors()) {
             successor.exits = loops & ~successor.loops;
         }
         if (block.loops != loops) {
@@ -824,9 +794,9 @@
                     }
 
                     boolean blockChanged = (iteration == 0);
-                    if (block.successors.size() > 0) {
+                    if (block.getSuccessorCount() > 0) {
                         int oldCardinality = liveOutCardinality(blockID);
-                        for (BciBlock sux : block.successors) {
+                        for (BciBlock sux : block.getSuccessors()) {
                             if (Debug.isLogEnabled()) {
                                 Debug.log("    Successor B%d: %s", sux.blockID, debugLiveIn(sux.blockID));
                             }
--- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java	Fri Mar 21 13:50:02 2014 +0000
+++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java	Mon Mar 24 10:24:30 2014 +0000
@@ -727,15 +727,15 @@
         }
 
         private void genGoto() {
-            appendGoto(createTarget(currentBlock.successors.get(0), frameState));
+            appendGoto(createTarget(currentBlock.getSuccessor(0), frameState));
             assert currentBlock.numNormalSuccessors() == 1;
         }
 
         private void ifNode(ValueNode x, Condition cond, ValueNode y) {
             assert !x.isDeleted() && !y.isDeleted();
             assert currentBlock.numNormalSuccessors() == 2;
-            BciBlock trueBlock = currentBlock.successors.get(0);
-            BciBlock falseBlock = currentBlock.successors.get(1);
+            BciBlock trueBlock = currentBlock.getSuccessor(0);
+            BciBlock falseBlock = currentBlock.getSuccessor(1);
             if (trueBlock == falseBlock) {
                 appendGoto(createTarget(trueBlock, frameState));
                 return;
@@ -1232,7 +1232,7 @@
 
                 InvokeWithExceptionNode invoke = createInvokeWithException(callTarget, resultType);
 
-                BciBlock nextBlock = currentBlock.successors.get(0);
+                BciBlock nextBlock = currentBlock.getSuccessor(0);
                 invoke.setNext(createTarget(nextBlock, frameState));
             }
         }
@@ -1251,7 +1251,7 @@
             DispatchBeginNode exceptionEdge = handleException(null, bci());
             InvokeWithExceptionNode invoke = append(new InvokeWithExceptionNode(callTarget, exceptionEdge, bci()));
             frameState.pushReturn(resultType, invoke);
-            BciBlock nextBlock = currentBlock.successors.get(0);
+            BciBlock nextBlock = currentBlock.getSuccessor(0);
             invoke.setStateAfter(frameState.create(nextBlock.startBci));
             return invoke;
         }
@@ -1361,10 +1361,10 @@
             double[] keyProbabilities = switchProbability(nofCases + 1, bci);
 
             Map<Integer, SuccessorInfo> bciToBlockSuccessorIndex = new HashMap<>();
-            for (int i = 0; i < currentBlock.successors.size(); i++) {
-                assert !bciToBlockSuccessorIndex.containsKey(currentBlock.successors.get(i).startBci);
-                if (!bciToBlockSuccessorIndex.containsKey(currentBlock.successors.get(i).startBci)) {
-                    bciToBlockSuccessorIndex.put(currentBlock.successors.get(i).startBci, new SuccessorInfo(i));
+            for (int i = 0; i < currentBlock.getSuccessorCount(); i++) {
+                assert !bciToBlockSuccessorIndex.containsKey(currentBlock.getSuccessor(i).startBci);
+                if (!bciToBlockSuccessorIndex.containsKey(currentBlock.getSuccessor(i).startBci)) {
+                    bciToBlockSuccessorIndex.put(currentBlock.getSuccessor(i).startBci, new SuccessorInfo(i));
                 }
             }
 
@@ -1389,7 +1389,7 @@
                     SuccessorInfo info = bciToBlockSuccessorIndex.get(targetBci);
                     if (info.actualIndex < 0) {
                         info.actualIndex = nextSuccessorIndex++;
-                        actualSuccessors.add(currentBlock.successors.get(info.blockIndex));
+                        actualSuccessors.add(currentBlock.getSuccessor(info.blockIndex));
                     }
                     keySuccessors[i] = info.actualIndex;
                 }
@@ -1704,8 +1704,8 @@
         private void createExceptionDispatch(ExceptionDispatchBlock block) {
             assert frameState.stackSize() == 1 : frameState;
             if (block.handler.isCatchAll()) {
-                assert block.successors.size() == 1;
-                appendGoto(createTarget(block.successors.get(0), frameState));
+                assert block.getSuccessorCount() == 1;
+                appendGoto(createTarget(block.getSuccessor(0), frameState));
                 return;
             }
 
@@ -1718,7 +1718,7 @@
                 ResolvedJavaType resolvedCatchType = (ResolvedJavaType) catchType;
                 for (ResolvedJavaType skippedType : graphBuilderConfig.getSkippedExceptionTypes()) {
                     if (skippedType.isAssignableFrom(resolvedCatchType)) {
-                        BciBlock nextBlock = block.successors.size() == 1 ? unwindBlock(block.deoptBci) : block.successors.get(1);
+                        BciBlock nextBlock = block.getSuccessorCount() == 1 ? unwindBlock(block.deoptBci) : block.getSuccessor(1);
                         ValueNode exception = frameState.stackAt(0);
                         FixedNode trueSuccessor = currentGraph.add(new DeoptimizeNode(InvalidateReprofile, UnreachedCode));
                         FixedNode nextDispatch = createTarget(nextBlock, frameState);
@@ -1729,12 +1729,12 @@
             }
 
             if (initialized) {
-                BciBlock nextBlock = block.successors.size() == 1 ? unwindBlock(block.deoptBci) : block.successors.get(1);
+                BciBlock nextBlock = block.getSuccessorCount() == 1 ? unwindBlock(block.deoptBci) : block.getSuccessor(1);
                 ValueNode exception = frameState.stackAt(0);
                 CheckCastNode checkCast = currentGraph.add(new CheckCastNode((ResolvedJavaType) catchType, exception, null, false));
                 frameState.apop();
                 frameState.push(Kind.Object, checkCast);
-                FixedNode catchSuccessor = createTarget(block.successors.get(0), frameState);
+                FixedNode catchSuccessor = createTarget(block.getSuccessor(0), frameState);
                 frameState.apop();
                 frameState.push(Kind.Object, exception);
                 FixedNode nextDispatch = createTarget(nextBlock, frameState);
@@ -1838,10 +1838,10 @@
                 }
                 if (bci < endBCI) {
                     if (bci > block.endBci) {
-                        assert !block.successors.get(0).isExceptionEntry;
+                        assert !block.getSuccessor(0).isExceptionEntry;
                         assert block.numNormalSuccessors() == 1;
                         // we fell through to the next block, add a goto and break
-                        appendGoto(createTarget(block.successors.get(0), frameState));
+                        appendGoto(createTarget(block.getSuccessor(0), frameState));
                         break;
                     }
                 }
--- a/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/CFGPrinter.java	Fri Mar 21 13:50:02 2014 +0000
+++ b/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/CFGPrinter.java	Mon Mar 24 10:24:30 2014 +0000
@@ -89,7 +89,7 @@
         out.println("predecessors ");
 
         out.print("successors ");
-        for (BciBlockMapping.BciBlock succ : block.successors) {
+        for (BciBlockMapping.BciBlock succ : block.getSuccessors()) {
             if (!succ.isExceptionEntry) {
                 out.print("\"B").print(succ.startBci).print("\" ");
             }
@@ -97,7 +97,7 @@
         out.println();
 
         out.print("xhandlers");
-        for (BciBlockMapping.BciBlock succ : block.successors) {
+        for (BciBlockMapping.BciBlock succ : block.getSuccessors()) {
             if (succ.isExceptionEntry) {
                 out.print("\"B").print(succ.startBci).print("\" ");
             }