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 $*