Mercurial > hg > truffle
diff graal/GraalCompiler/src/com/sun/c1x/ir/BlockBegin.java @ 2674:6ab73784566a
* BlockBegin.predecessors changed to List<BlockEnd>
* Node: add input/successor with given back edge index, allows for explicit ordering of predecessors/usages
* Graphviz: PDF output, option to omit FrameStates
* runscimark.sh: forward additional options to JVM
author | Lukas Stadler <lukas.stadler@jku.at> |
---|---|
date | Fri, 13 May 2011 15:18:41 +0200 |
parents | b2c1e959be46 |
children | 0ea5f12e873a |
line wrap: on
line diff
--- a/graal/GraalCompiler/src/com/sun/c1x/ir/BlockBegin.java Fri May 13 11:19:25 2011 +0200 +++ b/graal/GraalCompiler/src/com/sun/c1x/ir/BlockBegin.java Fri May 13 15:18:41 2011 +0200 @@ -76,12 +76,12 @@ if (old != null) { // disconnect this block from its current successors for (BlockBegin s : old.blockSuccessors()) { - s.blockPredecessors().remove(this); + s.blockPredecessors().remove(this.end()); } } successors().set(super.successorCount() + SUCCESSOR_END, end); for (BlockBegin s : end.blockSuccessors()) { - s.addPredecessor(this); + s.addPredecessor(end); } } } @@ -120,7 +120,7 @@ /** * The {@link BlockBegin} nodes for which this node is a successor. */ - private final List<BlockBegin> predecessors; + private final List<BlockEnd> predecessors; private int depthFirstNumber; private int linearScanNumber; @@ -145,7 +145,7 @@ this.blockID = blockID; depthFirstNumber = -1; linearScanNumber = -1; - predecessors = new ArrayList<BlockBegin>(2); + predecessors = new ArrayList<BlockEnd>(2); loopIndex = -1; setBCI(bci); } @@ -154,8 +154,9 @@ * Gets the list of predecessors of this block. * @return the predecessor list */ - public List<BlockBegin> blockPredecessors() { - return predecessors; + public List<BlockEnd> blockPredecessors() { +// return Collections.unmodifiableList(predecessors); + return predecessors; } /** @@ -289,7 +290,9 @@ closure.apply(block); queueBlocks(queue, block.exceptionHandlerBlocks(), mark); queueBlocks(queue, block.end().blockSuccessors(), mark); - queueBlocks(queue, predecessors ? block.predecessors : null, mark); + if (predecessors) { + queueBlockEnds(queue, block.predecessors, mark); + } } } @@ -304,6 +307,18 @@ } } + private void queueBlockEnds(LinkedList<BlockBegin> queue, List<BlockEnd> list, IdentityHashMap<BlockBegin, BlockBegin> mark) { + if (list != null) { + for (BlockEnd end : list) { + BlockBegin b = end.begin(); + if (!mark.containsKey(b)) { + queue.offer(b); + mark.put(b, b); + } + } + } + } + private void iterate(IdentityHashMap<BlockBegin, BlockBegin> mark, BlockClosure closure) { if (!mark.containsKey(this)) { mark.put(this, this); @@ -359,7 +374,8 @@ * Add a predecessor to this block. * @param pred the predecessor to add */ - public void addPredecessor(BlockBegin pred) { + public void addPredecessor(BlockEnd pred) { + assert pred != null; predecessors.add(pred); } @@ -367,7 +383,7 @@ * Removes all occurrences of the specified block from the predecessor list of this block. * @param pred the predecessor to remove */ - public void removePredecessor(BlockBegin pred) { + public void removePredecessor(BlockEnd pred) { while (predecessors.remove(pred)) { // the block may appear multiple times in the list // XXX: this is not very efficient, consider Util.removeAllFromList @@ -603,6 +619,7 @@ * @return the number of predecessors */ public int numberOfPreds() { +// assert predecessors.size() == predecessors().size(); return predecessors.size(); } @@ -644,7 +661,8 @@ return exceptionHandlerBlocks.get(i); } - public BlockBegin predAt(int j) { + public BlockEnd predAt(int j) { +// assert predecessors.get(j) == predecessors().get(j); return predecessors.get(j); } @@ -664,8 +682,9 @@ lirBlock.lastLirInstructionID = lastLirInstructionId; } - public boolean isPredecessor(BlockBegin block) { - return this.predecessors.contains(block); + public boolean isPredecessor(BlockEnd block) { +// assert predecessors.contains(block) == predecessors().contains(block); + return predecessors.contains(block); } public void printWithoutPhis(LogStream out) { @@ -721,8 +740,8 @@ // print predecessors if (!blockPredecessors().isEmpty()) { out.print(" pred:"); - for (BlockBegin pred : blockPredecessors()) { - out.print(" B").print(pred.blockID); + for (BlockEnd pred : blockPredecessors()) { + out.print(" B").print(pred.begin().blockID); } } } @@ -849,4 +868,11 @@ } return sb.toString(); } + + @Override + public String shortName() { + return "BlockBegin #" + blockID; + } + + }