Mercurial > hg > graal-compiler
changeset 3047:4dd57c0f94a8
Debuggin state
author | Gilles Duboscq <gilles.duboscq@oracle.com> |
---|---|
date | Fri, 17 Jun 2011 18:40:30 +0200 |
parents | f9e045cd2c23 |
children | 1745543369ae |
files | graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/debug/IdealGraphPrinter.java graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/EndNode.java graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/GraphBuilderPhase.java graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/Phase.java graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/schedule/IdentifyBlocksPhase.java graal/com.oracle.max.graal.graph/src/com/oracle/max/graal/graph/NodeArray.java rundacapo.sh |
diffstat | 7 files changed, 45 insertions(+), 33 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/debug/IdealGraphPrinter.java Fri Jun 17 14:53:07 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/debug/IdealGraphPrinter.java Fri Jun 17 18:40:30 2011 +0200 @@ -28,6 +28,7 @@ import com.oracle.max.graal.compiler.ir.*; import com.oracle.max.graal.compiler.schedule.*; +import com.oracle.max.graal.compiler.value.*; import com.oracle.max.graal.graph.*; /** @@ -133,7 +134,7 @@ if (schedule != null) { stream.println(" <controlFlow>"); for (Block block : schedule.getBlocks()) { - printBlock(graph, block); + printBlock(graph, block, schedule.getNodeToBlock()); } printNoBlock(); stream.println(" </controlFlow>"); @@ -164,9 +165,13 @@ } stream.printf(" <p name='name'>%s</p>%n", escape(name)); } + stream.printf(" <p name='class'>%s</p>%n", escape(node.getClass().getSimpleName())); Block block = nodeToBlock == null ? null : nodeToBlock.get(node); if (block != null) { stream.printf(" <p name='block'>%d</p>%n", block.blockID()); + if (!(node instanceof Phi || node instanceof FrameState || node instanceof Local) && !block.getInstructions().contains(node)) { + stream.printf(" <p name='notInOwnBlock'>true</p>%n"); + } } else { stream.printf(" <p name='block'>noBlock</p>%n"); noBlockNodes.add(node); @@ -205,7 +210,7 @@ stream.printf(" <edge from='%d' fromIndex='%d' to='%d' toIndex='%d'/>%n", edge.from, edge.fromIndex, edge.to, edge.toIndex); } - private void printBlock(Graph graph, Block block) { + private void printBlock(Graph graph, Block block, NodeMap<Block> nodeToBlock) { stream.printf(" <block name='%d'>%n", block.blockID()); stream.printf(" <successors>%n"); for (Block sux : block.getSuccessors()) { @@ -219,6 +224,19 @@ stream.printf(" <nodes>%n"); Set<Node> nodes = new HashSet<Node>(block.getInstructions()); + + if (nodeToBlock != null) { + for (Node n : graph.getNodes()) { + if (n == null) { + continue; + } + Block blk = nodeToBlock.get(n); + if (blk == block) { + nodes.add(n); + } + } + } + if (nodes.size() > 0) { // if this is the first block: add all locals to this block if (block.getInstructions() == graph.start()) {
--- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/EndNode.java Fri Jun 17 14:53:07 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/EndNode.java Fri Jun 17 18:40:30 2011 +0200 @@ -30,6 +30,7 @@ public final class EndNode extends FixedNode { public static final int SUCCESSOR_COUNT = 0; public static final int INPUT_COUNT = 0; + public EndNode(Graph graph) { super(CiKind.Illegal, INPUT_COUNT, SUCCESSOR_COUNT, graph); }
--- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/GraphBuilderPhase.java Fri Jun 17 14:53:07 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/GraphBuilderPhase.java Fri Jun 17 18:40:30 2011 +0200 @@ -1219,7 +1219,8 @@ loopEnd.delete(); Merge merge = new Merge(graph); EndNode end = new EndNode(graph); - begin.singlePredecessor().successors().replace(begin, end); + int nbrReplacement = begin.singlePredecessor().successors().replace(begin, end); + assert nbrReplacement > 0; merge.addEnd(end); merge.setNext(begin.next()); merge.setStateAfter(begin.stateAfter());
--- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/Phase.java Fri Jun 17 14:53:07 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/Phase.java Fri Jun 17 18:40:30 2011 +0200 @@ -54,7 +54,9 @@ } GraalTimers.get(getName()).start(); } + //System.out.println("Starting Phase " + getName()); run(graph); + //System.out.println("Finished Phase " + getName()); if (GraalOptions.Time) { GraalTimers.get(getName()).stop(); if (oldCurrentPhase != null) {
--- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/schedule/IdentifyBlocksPhase.java Fri Jun 17 14:53:07 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/schedule/IdentifyBlocksPhase.java Fri Jun 17 18:40:30 2011 +0200 @@ -33,6 +33,7 @@ public class IdentifyBlocksPhase extends Phase { + private static final int MAX_DOMINATOR_ITER = 50; private final List<Block> blocks = new ArrayList<Block>(); private NodeMap<Block> nodeToBlock; private Graph graph; @@ -94,6 +95,8 @@ } private void print() { + Block dominatorRoot = nodeToBlock.get(graph.start()); + System.out.println("Root = " + dominatorRoot); System.out.println("nodeToBlock :"); System.out.println(nodeToBlock); System.out.println("Blocks :"); @@ -134,7 +137,7 @@ } } -// System.out.println("identify blocks"); + //System.out.println("identify blocks"); // print(); // Connect blocks. @@ -142,9 +145,8 @@ Node n = block.firstNode(); if (n instanceof Merge) { Merge m = (Merge) n; - for (int i = 0; i < m.endCount(); ++i) { - EndNode end = m.endAt(i); - Block predBlock = nodeToBlock.get(end); + for (Node pred : m.phiPointPredecessors()) { + Block predBlock = nodeToBlock.get(pred); predBlock.addSuccessor(block); } } else { @@ -156,8 +158,8 @@ } } } -// System.out.println("connect"); -// print(); + //System.out.println("connect"); + //print(); computeDominators(); @@ -174,14 +176,14 @@ } } -// System.out.println("dom + cycles"); + //System.out.println("dom + cycles"); // print(); assignLatestPossibleBlockToNodes(); -// System.out.println("assign last"); + //System.out.println("assign last"); // print(); sortNodesWithinBlocks(); -// System.out.println("sort"); + //System.out.println("sort"); // print(); } else { computeJavaBlocks(); @@ -270,14 +272,8 @@ Block block = nodeToBlock.get(((LoopCounter) n).loopBegin()); nodeToBlock.set(n, block); } - if (n.id() == 142) { - System.out.println("computing common dom for " + n); - } Block block = null; for (Node succ : n.successors()) { - if (n.id() == 142) { - System.out.println("com(assignLatestPossibleBlockToNode(succ)) = com(" + assignLatestPossibleBlockToNode(succ) + ")"); - } block = getCommonDominator(block, assignLatestPossibleBlockToNode(succ)); } for (Node usage : n.usages()) { @@ -294,18 +290,12 @@ TTY.println(merge.phiPointPredecessors().toString()); TTY.println("value count: " + phi.valueCount()); } - if (n.id() == 142) { - System.out.println("com(phi-merge) = com(" + mergeBlock.getPredecessors().get(i) + ")"); - } block = getCommonDominator(block, mergeBlock.getPredecessors().get(i)); } } } else if (usage instanceof FrameState && ((FrameState) usage).block() != null) { PhiPoint merge = ((FrameState) usage).block(); for (Node pred : merge.phiPointPredecessors()) { - if (n.id() == 142) { - System.out.println("com(FS pred) = com(" + nodeToBlock.get(pred) + ")"); - } block = getCommonDominator(block, nodeToBlock.get(pred)); } } else if (usage instanceof LoopCounter) { @@ -313,15 +303,9 @@ if (n == counter.init() || n == counter.stride()) { LoopBegin loopBegin = counter.loopBegin(); Block mergeBlock = nodeToBlock.get(loopBegin); - if (n.id() == 142) { - System.out.println("com(LC dom) = com(" + mergeBlock.dominator() + ")"); - } block = getCommonDominator(block, mergeBlock.dominator()); } } else { - if (n.id() == 142) { - System.out.println("com(usage) = com(" + assignLatestPossibleBlockToNode(usage) + ")"); - } block = getCommonDominator(block, assignLatestPossibleBlockToNode(usage)); } } @@ -430,8 +414,14 @@ visited.set(dominatorRoot.blockID()); LinkedList<Block> workList = new LinkedList<Block>(); workList.add(dominatorRoot); - + int iter = 0; + int maxIter = MAX_DOMINATOR_ITER * blocks.size(); while (!workList.isEmpty()) { + if (iter++ >= maxIter) { + System.out.println("Reached maxIter(" + maxIter + ") !!"); + print(); + throw new CiBailout("Max iteration for dominator computation reached, Cycles in the block graph?"); + } Block b = workList.remove(); List<Block> predecessors = b.getPredecessors();
--- a/graal/com.oracle.max.graal.graph/src/com/oracle/max/graal/graph/NodeArray.java Fri Jun 17 14:53:07 2011 +0200 +++ b/graal/com.oracle.max.graal.graph/src/com/oracle/max/graal/graph/NodeArray.java Fri Jun 17 18:40:30 2011 +0200 @@ -163,7 +163,7 @@ private void checkIndex(int index) { if (index < 0 || index >= size()) { - throw new IndexOutOfBoundsException(); + throw new IndexOutOfBoundsException("Index : " + index); } }
--- a/rundacapo.sh Fri Jun 17 14:53:07 2011 +0200 +++ b/rundacapo.sh Fri Jun 17 18:40:30 2011 +0200 @@ -15,4 +15,4 @@ echo "DACAPO is not defined. It must point to a Dacapo benchmark directory." exit 1; fi -${JDK7}/bin/java -client -d64 -graal -G:PrintIdealGraphLevel=4 -G:PrintFilter=scanContent -XX:CompileCommand=compileonly,*.scanContent -XX:CompileCommand=exclude,com.oracle* -XX:-GraalBailoutIsFatal -XX:+PrintCompilation -Xms1g -Xmx2g -esa -classpath ${DACAPO}/dacapo-9.12-bach.jar Harness --preserve $* +${JDK7}/bin/java -client -d64 -graal -G:+PrintCompilation -G:+DetailedAsserts -G:PrintIdealGraphLevel=4 "-G:PrintFilter=~.*(fill|findBundle).*" -XX:CompileCommand=compileonly,java.io.BufferedReader::fill -XX:-GraalBailoutIsFatal -XX:+PrintCompilation -Xms1g -Xmx2g -esa -classpath ${DACAPO}/dacapo-9.12-bach.jar Harness --preserve $*