Mercurial > hg > graal-jvmci-8
diff graal/GraalCompiler/src/com/sun/c1x/graph/GraphBuilder.java @ 2602:0c6564c254af
new node layout: BlockBegin, BlockEnd
-Dc1x.dot=regex for pdf output
escape dot graph labels (<, >, &)
author | Lukas Stadler <lukas.stadler@jku.at> |
---|---|
date | Fri, 06 May 2011 10:25:37 +0200 |
parents | f1bc67c2d453 |
children | 01c5c0443158 |
line wrap: on
line diff
--- a/graal/GraalCompiler/src/com/sun/c1x/graph/GraphBuilder.java Thu May 05 16:33:12 2011 +0200 +++ b/graal/GraalCompiler/src/com/sun/c1x/graph/GraphBuilder.java Fri May 06 10:25:37 2011 +0200 @@ -124,18 +124,16 @@ boolean skipBlock; // skip processing of the rest of this block private Value rootMethodSynchronizedObject; - - - private Graph graph = new Graph(); - + private final Graph graph; /** * Creates a new, initialized, {@code GraphBuilder} instance for a given compilation. * * @param compilation the compilation * @param ir the IR to build the graph into + * @param graph */ - public GraphBuilder(C1XCompilation compilation, IR ir) { + public GraphBuilder(C1XCompilation compilation, IR ir, Graph graph) { this.compilation = compilation; this.ir = ir; this.stats = compilation.stats; @@ -144,6 +142,7 @@ log = C1XOptions.TraceBytecodeParserLevel > 0 ? new LogStream(TTY.out()) : null; stream = new BytecodeStream(compilation.method.code()); constantPool = compilation.runtime.getConstantPool(compilation.method); + this.graph = graph; } /** @@ -163,7 +162,7 @@ } // 1. create the start block - ir.startBlock = new BlockBegin(0, ir.nextBlockNumber()); + ir.startBlock = new BlockBegin(0, ir.nextBlockNumber(), graph); BlockBegin startBlock = ir.startBlock; // 2. compute the block map, setup exception handlers and get the entrypoint(s) @@ -200,7 +199,7 @@ finishStartBlock(startBlock, stdEntry); // 4A.3 setup an exception handler to unlock the root method synchronized object - syncHandler = new BlockBegin(Instruction.SYNCHRONIZATION_ENTRY_BCI, ir.nextBlockNumber()); + syncHandler = new BlockBegin(Instruction.SYNCHRONIZATION_ENTRY_BCI, ir.nextBlockNumber(), graph); syncHandler.setExceptionEntry(); syncHandler.setBlockFlag(BlockBegin.BlockFlag.IsOnWorkList); syncHandler.setBlockFlag(BlockBegin.BlockFlag.DefaultExceptionHandler); @@ -227,7 +226,7 @@ private void finishStartBlock(BlockBegin startBlock, BlockBegin stdEntry) { assert curBlock == startBlock; - Base base = new Base(stdEntry); + Base base = new Base(stdEntry, graph); appendWithoutOptimization(base, 0); FrameState stateAfter = curState.immutableCopy(bci()); base.setStateAfter(stateAfter); @@ -600,7 +599,7 @@ void genGoto(int fromBCI, int toBCI) { boolean isSafepoint = !noSafepoints() && toBCI <= fromBCI; - append(new Goto(blockAt(toBCI), null, isSafepoint)); + append(new Goto(blockAt(toBCI), null, isSafepoint, graph)); } void ifNode(Value x, Condition cond, Value y, FrameState stateBefore) { @@ -608,7 +607,7 @@ BlockBegin fsucc = blockAt(stream().nextBCI()); int bci = stream().currentBCI(); boolean isSafepoint = !noSafepoints() && tsucc.bci() <= bci || fsucc.bci() <= bci; - append(new If(x, cond, y, tsucc, fsucc, isSafepoint ? stateBefore : null, isSafepoint)); + append(new If(x, cond, y, tsucc, fsucc, isSafepoint ? stateBefore : null, isSafepoint, graph)); } void genIfZero(Condition cond) { @@ -634,7 +633,7 @@ void genThrow(int bci) { FrameState stateBefore = curState.immutableCopy(bci()); - Throw t = new Throw(apop(), stateBefore, !noSafepoints()); + Throw t = new Throw(apop(), stateBefore, !noSafepoints(), graph); appendWithoutOptimization(t, bci); } @@ -1018,13 +1017,13 @@ int lockNumber = curState.locksSize() - 1; MonitorAddress lockAddress = null; if (compilation.runtime.sizeOfBasicObjectLock() != 0) { - lockAddress = new MonitorAddress(lockNumber); + lockAddress = new MonitorAddress(lockNumber, graph); append(lockAddress); } append(new MonitorExit(rootMethodSynchronizedObject, lockAddress, lockNumber, stateBefore, graph)); curState.unlock(); } - append(new Return(x, !noSafepoints())); + append(new Return(x, !noSafepoints(), graph)); } /** @@ -1038,7 +1037,7 @@ int lockNumber = locksSize(); MonitorAddress lockAddress = null; if (compilation.runtime.sizeOfBasicObjectLock() != 0) { - lockAddress = new MonitorAddress(lockNumber); + lockAddress = new MonitorAddress(lockNumber, graph); append(lockAddress); } MonitorEnter monitorEnter = new MonitorEnter(x, lockAddress, lockNumber, null, graph); @@ -1055,7 +1054,7 @@ } MonitorAddress lockAddress = null; if (compilation.runtime.sizeOfBasicObjectLock() != 0) { - lockAddress = new MonitorAddress(lockNumber); + lockAddress = new MonitorAddress(lockNumber, graph); append(lockAddress); } appendWithoutOptimization(new MonitorExit(x, lockAddress, lockNumber, null, graph), bci); @@ -1088,7 +1087,7 @@ list.add(blockAt(bci + offset)); boolean isSafepoint = isBackwards && !noSafepoints(); FrameState stateBefore = isSafepoint ? curState.immutableCopy(bci()) : null; - append(new TableSwitch(ipop(), list, ts.lowKey(), stateBefore, isSafepoint)); + append(new TableSwitch(ipop(), list, ts.lowKey(), stateBefore, isSafepoint, graph)); } void genLookupswitch() { @@ -1110,7 +1109,7 @@ list.add(blockAt(bci + offset)); boolean isSafepoint = isBackwards && !noSafepoints(); FrameState stateBefore = isSafepoint ? curState.immutableCopy(bci()) : null; - append(new LookupSwitch(ipop(), list, keys, stateBefore, isSafepoint)); + append(new LookupSwitch(ipop(), list, keys, stateBefore, isSafepoint, graph)); } /** @@ -1262,7 +1261,7 @@ curState = syncHandler.stateBefore().copy(); int bci = Instruction.SYNCHRONIZATION_ENTRY_BCI; - Value exception = appendWithoutOptimization(new ExceptionObject(curState.immutableCopy(bci)), bci); + Value exception = appendWithoutOptimization(new ExceptionObject(curState.immutableCopy(bci), graph), bci); assert lock != null; assert curState.locksSize() > 0 && curState.lockAt(locksSize() - 1) == lock; @@ -1327,7 +1326,7 @@ } if (nextBlock != null && nextBlock != block) { // we fell through to the next block, add a goto and break - end = new Goto(nextBlock, null, false); + end = new Goto(nextBlock, null, false, graph); lastInstr = lastInstr.appendNext(end, prevBCI); break; } @@ -1337,7 +1336,7 @@ // push an exception object onto the stack if we are parsing an exception handler if (pushException) { FrameState stateBefore = curState.immutableCopy(bci()); - apush(append(new ExceptionObject(stateBefore))); + apush(append(new ExceptionObject(stateBefore, graph))); pushException = false; }