changeset 16503:b3800429f543

Move commonDominator to AbstractControlFlowGraph.
author Josef Eisl <josef.eisl@jku.at>
date Mon, 14 Jul 2014 19:55:14 +0200
parents 5f458fcc4f5a
children b07f96c783ad
files graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/cfg/AbstractControlFlowGraph.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/cfg/ControlFlowGraph.java graal/com.oracle.graal.phases/src/com/oracle/graal/phases/schedule/SchedulePhase.java graal/com.oracle.graal.printer/src/com/oracle/graal/printer/CFGPrinter.java
diffstat 4 files changed, 29 insertions(+), 24 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/cfg/AbstractControlFlowGraph.java	Mon Jul 14 20:23:09 2014 +0200
+++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/cfg/AbstractControlFlowGraph.java	Mon Jul 14 19:55:14 2014 +0200
@@ -34,4 +34,29 @@
     Collection<Loop<T>> getLoops();
 
     T getStartBlock();
+
+    public static AbstractBlock<?> commonDominator(AbstractBlock<?> a, AbstractBlock<?> b) {
+        if (a == null) {
+            return b;
+        }
+        if (b == null) {
+            return a;
+        }
+        AbstractBlock<?> iterA = a;
+        AbstractBlock<?> iterB = b;
+        while (iterA != iterB) {
+            if (iterA.getId() > iterB.getId()) {
+                iterA = iterA.getDominator();
+            } else {
+                assert iterB.getId() > iterA.getId();
+                iterB = iterB.getDominator();
+            }
+        }
+        return iterA;
+    }
+
+    @SuppressWarnings("unchecked")
+    public static <T extends AbstractBlock<T>> T commonDominatorTyped(T a, T b) {
+        return (T) commonDominator(a, b);
+    }
 }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/cfg/ControlFlowGraph.java	Mon Jul 14 20:23:09 2014 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/cfg/ControlFlowGraph.java	Mon Jul 14 19:55:14 2014 +0200
@@ -317,7 +317,7 @@
             Block dominator = null;
             for (Block pred : block.getPredecessors()) {
                 if (!pred.isLoopEnd()) {
-                    dominator = commonDominator(dominator, pred);
+                    dominator = AbstractControlFlowGraph.commonDominatorTyped(dominator, pred);
                 }
             }
             setDominator(block, dominator);
@@ -332,26 +332,6 @@
         dominator.dominated.add(block);
     }
 
-    public static <T extends AbstractBlock<T>> T commonDominator(T a, T b) {
-        if (a == null) {
-            return b;
-        }
-        if (b == null) {
-            return a;
-        }
-        T iterA = a;
-        T iterB = b;
-        while (iterA != iterB) {
-            if (iterA.getId() > iterB.getId()) {
-                iterA = iterA.getDominator();
-            } else {
-                assert iterB.getId() > iterA.getId();
-                iterB = iterB.getDominator();
-            }
-        }
-        return iterA;
-    }
-
     private void computePostdominators() {
         outer: for (Block block : postOrder()) {
             if (block.isLoopEnd()) {
--- a/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/schedule/SchedulePhase.java	Mon Jul 14 20:23:09 2014 +0200
+++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/schedule/SchedulePhase.java	Mon Jul 14 19:55:14 2014 +0200
@@ -24,8 +24,8 @@
 
 import static com.oracle.graal.api.meta.LocationIdentity.*;
 import static com.oracle.graal.compiler.common.GraalOptions.*;
-import static com.oracle.graal.nodes.cfg.ControlFlowGraph.*;
 import static com.oracle.graal.compiler.common.cfg.AbstractBlock.*;
+import static com.oracle.graal.compiler.common.cfg.AbstractControlFlowGraph.*;
 
 import java.util.*;
 
@@ -654,7 +654,7 @@
 
         @Override
         public void apply(Block newBlock) {
-            this.block = commonDominator(this.block, newBlock);
+            this.block = commonDominatorTyped(this.block, newBlock);
         }
     }
 
--- a/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/CFGPrinter.java	Mon Jul 14 20:23:09 2014 +0200
+++ b/graal/com.oracle.graal.printer/src/com/oracle/graal/printer/CFGPrinter.java	Mon Jul 14 19:55:14 2014 +0200
@@ -186,7 +186,7 @@
         if (!inFixedSchedule(input)) {
             Block inputBlock = block;
             if (latestScheduling.get(input) != null) {
-                inputBlock = ControlFlowGraph.commonDominator(inputBlock, latestScheduling.get(input));
+                inputBlock = AbstractControlFlowGraph.commonDominatorTyped(inputBlock, latestScheduling.get(input));
             }
             if (inputBlock != latestScheduling.get(input)) {
                 latestScheduling.set(input, inputBlock);