# HG changeset patch # User Thomas Wuerthinger # Date 1305902432 -7200 # Node ID b72e6638b9e63ef7dea556a8d2d4c26e8cf43ce9 # Parent 0c5791bc90fb70440b148bf75b45fb86e5219036 Removed the link from BlockBegin to LIRBlock. diff -r 0c5791bc90fb -r b72e6638b9e6 graal/GraalCompiler/src/com/oracle/max/graal/schedule/Schedule.java --- a/graal/GraalCompiler/src/com/oracle/max/graal/schedule/Schedule.java Fri May 20 16:31:31 2011 +0200 +++ b/graal/GraalCompiler/src/com/oracle/max/graal/schedule/Schedule.java Fri May 20 16:40:32 2011 +0200 @@ -84,7 +84,7 @@ assignBlock(n); blockBeginNodes.add(n); } else { - // We have a single predecessor => its successor count. + // We have a single predecessor => check its successor count. int successorCount = 0; for (Node succ : singlePred.successors()) { if (succ != null && combinedBitMap.isMarked(succ)) { diff -r 0c5791bc90fb -r b72e6638b9e6 graal/GraalCompiler/src/com/sun/c1x/debug/CFGPrinter.java --- a/graal/GraalCompiler/src/com/sun/c1x/debug/CFGPrinter.java Fri May 20 16:31:31 2011 +0200 +++ b/graal/GraalCompiler/src/com/sun/c1x/debug/CFGPrinter.java Fri May 20 16:40:32 2011 +0200 @@ -158,9 +158,10 @@ printHIR(block); } - if (printLIR) { - printLIR(block.lirBlock()); - } + // TODO(tw): Add possibility to print LIR. + //if (printLIR) { + // printLIR(block.lirBlock()); + //} end("block"); } diff -r 0c5791bc90fb -r b72e6638b9e6 graal/GraalCompiler/src/com/sun/c1x/gen/LIRGenerator.java --- a/graal/GraalCompiler/src/com/sun/c1x/gen/LIRGenerator.java Fri May 20 16:31:31 2011 +0200 +++ b/graal/GraalCompiler/src/com/sun/c1x/gen/LIRGenerator.java Fri May 20 16:40:32 2011 +0200 @@ -582,7 +582,7 @@ protected LIRBlock getLIRBlock(Instruction b) { assert b instanceof BlockBegin : "only BlockBegin, for now..."; - return ((BlockBegin) b).lirBlock(); + return ir.valueToBlock.get(b); } @Override diff -r 0c5791bc90fb -r b72e6638b9e6 graal/GraalCompiler/src/com/sun/c1x/graph/IR.java --- 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 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 computeLinearScanOrder() { + return makeLinearScanOrder(); } - private void makeLinearScanOrder() { + private Map makeLinearScanOrder() { + + Map valueToBlock = new HashMap(); + 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; } /** diff -r 0c5791bc90fb -r b72e6638b9e6 graal/GraalCompiler/src/com/sun/c1x/ir/BlockBegin.java --- a/graal/GraalCompiler/src/com/sun/c1x/ir/BlockBegin.java Fri May 20 16:31:31 2011 +0200 +++ b/graal/GraalCompiler/src/com/sun/c1x/ir/BlockBegin.java Fri May 20 16:40:32 2011 +0200 @@ -26,7 +26,6 @@ import com.oracle.graal.graph.*; import com.sun.c1x.debug.*; -import com.sun.c1x.lir.*; import com.sun.c1x.util.*; import com.sun.c1x.value.*; import com.sun.cri.ci.*; @@ -76,17 +75,6 @@ private int linearScanNumber; - // LIR block - public LIRBlock lirBlock; - - public void setLIRBlock(LIRBlock block) { - this.lirBlock = block; - } - - public LIRBlock lirBlock() { - return lirBlock; - } - /** * Index of bytecode that generated this node when appended in a basic block. * Negative values indicate special cases. diff -r 0c5791bc90fb -r b72e6638b9e6 graal/GraalGraph/src/com/oracle/graal/graph/Node.java --- a/graal/GraalGraph/src/com/oracle/graal/graph/Node.java Fri May 20 16:31:31 2011 +0200 +++ b/graal/GraalGraph/src/com/oracle/graal/graph/Node.java Fri May 20 16:40:32 2011 +0200 @@ -23,7 +23,6 @@ package com.oracle.graal.graph; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List;