Mercurial > hg > truffle
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);