# HG changeset patch # User Josef Eisl # Date 1405360514 -7200 # Node ID b3800429f5438857270cdbd72607da9f9da6daa9 # Parent 5f458fcc4f5a4a84174376734cb46e077b635495 Move commonDominator to AbstractControlFlowGraph. diff -r 5f458fcc4f5a -r b3800429f543 graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/cfg/AbstractControlFlowGraph.java --- 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> 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 commonDominatorTyped(T a, T b) { + return (T) commonDominator(a, b); + } } diff -r 5f458fcc4f5a -r b3800429f543 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/cfg/ControlFlowGraph.java --- 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 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()) { diff -r 5f458fcc4f5a -r b3800429f543 graal/com.oracle.graal.phases/src/com/oracle/graal/phases/schedule/SchedulePhase.java --- 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); } } diff -r 5f458fcc4f5a -r b3800429f543 graal/com.oracle.graal.printer/src/com/oracle/graal/printer/CFGPrinter.java --- 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);