# HG changeset patch # User Niclas Adlertz # Date 1395656670 0 # Node ID 8f6f63e997ba83b875635fde1e38fca74604f14c # Parent 2b17b6c5588084f51da8e33ad792d8c585b4758e BciBlock extends AbstractBlockBase diff -r 2b17b6c55880 -r 8f6f63e997ba graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineCompiler.java --- 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"); diff -r 2b17b6c55880 -r 8f6f63e997ba graal/com.oracle.graal.java/src/com/oracle/graal/java/BciBlockMapping.java --- 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 { + public static class BciBlock extends AbstractBlockBase implements Cloneable { public int startBci; public int endBci; @@ -86,8 +86,10 @@ public FixedWithNextNode firstInstruction; public HIRFrameStateBuilder entryState; - public ArrayList successors = new ArrayList<>(2); - public ArrayList predecessors = new ArrayList<>(2); // only used in the baseline + // public ArrayList successors = new ArrayList<>(2); + // public ArrayList 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 getPredecessors() { - return predecessors; - } - - public int getPredecessorCount() { - return predecessors.size(); - } - - public List 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 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)); } diff -r 2b17b6c55880 -r 8f6f63e997ba graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java --- 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 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; } } diff -r 2b17b6c55880 -r 8f6f63e997ba 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 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("\" "); }