diff graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineControlFlowGraph.java @ 18863:7a44368257f0

BaselineCompiler: fix predecessor calculation.
author Josef Eisl <josef.eisl@jku.at>
date Tue, 13 Jan 2015 19:45:42 +0100
parents ade7699e160e
children
line wrap: on
line diff
--- 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) {