changeset 18863:7a44368257f0

BaselineCompiler: fix predecessor calculation.
author Josef Eisl <josef.eisl@jku.at>
date Tue, 13 Jan 2015 19:45:42 +0100
parents be2351580c7d
children 552993e5795a
files graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineBytecodeParser.java graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineControlFlowGraph.java
diffstat 2 files changed, 17 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineBytecodeParser.java	Wed Jan 14 02:45:49 2015 +0100
+++ b/graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineBytecodeParser.java	Tue Jan 13 19:45:42 2015 +0100
@@ -103,12 +103,6 @@
             loopHeaders = blockMap.getLoopHeaders();
             liveness = blockMap.liveness;
             blockVisited = new BciBlockBitMap(blockMap);
-            // add predecessors
-            for (BciBlock block : blockMap.getBlocks()) {
-                for (BciBlock successor : block.getSuccessors()) {
-                    successor.getPredecessors().add(block);
-                }
-            }
 
             if (method.isSynchronized()) {
                 throw GraalInternalError.unimplemented("Handle synchronized methods");
--- a/graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineControlFlowGraph.java	Wed Jan 14 02:45:49 2015 +0100
+++ b/graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineControlFlowGraph.java	Tue Jan 13 19:45:42 2015 +0100
@@ -38,6 +38,7 @@
     public static BaselineControlFlowGraph compute(BciBlockMapping blockMap) {
         try (Scope ds = Debug.scope("BaselineCFG", blockMap)) {
             BaselineControlFlowGraph cfg = new BaselineControlFlowGraph(blockMap);
+            cfg.computePredecessors();
             cfg.computeLoopInformation(blockMap);
             AbstractControlFlowGraph.computeDominators(cfg);
 
@@ -69,6 +70,22 @@
         return null;
     }
 
+    /**
+     * Create and populate the predecessor list.
+     */
+    private void computePredecessors() {
+        // set predecessors
+        for (BciBlock block : blocks) {
+            block.setPredecessors(new ArrayList<>(4));
+        }
+        // calculate predecessors
+        for (BciBlock block : blocks) {
+            for (BciBlock succ : block.getSuccessors()) {
+                succ.getPredecessors().add(block);
+            }
+        }
+    }
+
     private void computeLoopInformation(BciBlockMapping blockMap) {
         try (Indent indent = Debug.logAndIndent("computeLoopInformation")) {
             for (BciBlock block : blocks) {