Mercurial > hg > truffle
diff graal/GraalCompiler/src/com/sun/c1x/graph/IR.java @ 2759:b72e6638b9e6
Removed the link from BlockBegin to LIRBlock.
author | Thomas Wuerthinger <thomas@wuerthinger.net> |
---|---|
date | Fri, 20 May 2011 16:40:32 +0200 |
parents | bfcdda4fdd73 |
children | 127db58b044e |
line wrap: on
line diff
--- a/graal/GraalCompiler/src/com/sun/c1x/graph/IR.java Fri May 20 16:31:31 2011 +0200 +++ b/graal/GraalCompiler/src/com/sun/c1x/graph/IR.java Fri May 20 16:40:32 2011 +0200 @@ -66,6 +66,8 @@ this.compilation = compilation; } + public Map<Value, LIRBlock> valueToBlock; + /** * Builds the graph, optimizes it, and computes the linear scan block order. */ @@ -83,7 +85,8 @@ Schedule schedule = new Schedule(this.compilation.graph); - computeLinearScanOrder(); + valueToBlock = computeLinearScanOrder(); + verifyAndPrint("After linear scan order"); if (C1XOptions.PrintTimers) { C1XTimers.HIR_OPTIMIZE.stop(); @@ -100,14 +103,14 @@ } } - private void computeLinearScanOrder() { - if (C1XOptions.GenLIR) { - makeLinearScanOrder(); - verifyAndPrint("After linear scan order"); - } + private Map<Value, LIRBlock> computeLinearScanOrder() { + return makeLinearScanOrder(); } - private void makeLinearScanOrder() { + private Map<Value, LIRBlock> makeLinearScanOrder() { + + Map<Value, LIRBlock> valueToBlock = new HashMap<Value, LIRBlock>(); + if (orderedBlocks == null) { CriticalEdgeFinder finder = new CriticalEdgeFinder(this); getHIRStartBlock().iteratePreOrder(finder); @@ -119,7 +122,7 @@ int z = 0; for (BlockBegin bb : blocks) { LIRBlock lirBlock = new LIRBlock(z); - bb.setLIRBlock(lirBlock); + valueToBlock.put(bb, lirBlock); lirBlock.setLinearScanNumber(bb.linearScanNumber()); // TODO(tw): Initialize LIRBlock.linearScanLoopHeader and LIRBlock.linearScanLoopEnd lirBlock.setStateBefore(bb.stateBefore()); @@ -127,14 +130,15 @@ ++z; } + z = 0; for (BlockBegin bb : blocks) { - LIRBlock lirBlock = bb.lirBlock(); + LIRBlock lirBlock = orderedBlocks.get(z); for (int i = 0; i < bb.numberOfPreds(); ++i) { - lirBlock.blockPredecessors().add(bb.predAt(i).block().lirBlock()); + lirBlock.blockPredecessors().add(valueToBlock.get(bb.predAt(i).block())); } for (int i = 0; i < bb.numberOfSux(); ++i) { - lirBlock.blockSuccessors().add(bb.suxAt(i).lirBlock()); + lirBlock.blockSuccessors().add(valueToBlock.get(bb.suxAt(i))); } Instruction first = bb; @@ -142,12 +146,14 @@ lirBlock.getInstructions().add(first); first = first.next(); } + ++z; } - startBlock = getHIRStartBlock().lirBlock(); + startBlock = valueToBlock.get(getHIRStartBlock()); assert startBlock != null; compilation.stats.loopCount = computeLinearScanOrder.numLoops(); } + return valueToBlock; } /**