Mercurial > hg > graal-compiler
changeset 15108:b6711b514576
Remove LoopBeginNode loopBegin() from Loop.
line wrap: on
line diff
--- a/graal/com.oracle.graal.alloc/src/com/oracle/graal/alloc/ComputeBlockOrder.java Wed Apr 09 17:11:48 2014 +0200 +++ b/graal/com.oracle.graal.alloc/src/com/oracle/graal/alloc/ComputeBlockOrder.java Wed Apr 09 17:38:16 2014 +0200 @@ -229,8 +229,8 @@ * Skip the loop header block if the loop consists of more than one block and it has only a * single loop end block. */ - private static boolean skipLoopHeader(AbstractBlock<?> block) { - return (block.isLoopHeader() && !block.isLoopEnd() && block.getLoop().loopBegin().loopEnds().count() == 1); + private static <T extends AbstractBlock<T>> boolean skipLoopHeader(AbstractBlock<T> block) { + return (block.isLoopHeader() && !block.isLoopEnd() && block.getLoop().numBackedges() == 1); } /**
--- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopEx.java Wed Apr 09 17:11:48 2014 +0200 +++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopEx.java Wed Apr 09 17:38:16 2014 +0200 @@ -88,7 +88,7 @@ } public LoopBeginNode loopBegin() { - return lirLoop().loopBegin(); + return (LoopBeginNode) lirLoop().header.getBeginNode(); } public FixedNode predecessor() {
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/cfg/Loop.java Wed Apr 09 17:11:48 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/cfg/Loop.java Wed Apr 09 17:38:16 2014 +0200 @@ -24,8 +24,6 @@ import java.util.*; -import com.oracle.graal.nodes.*; - public class Loop<T extends AbstractBlock<T>> { public final Loop<T> parent; @@ -52,12 +50,12 @@ this.exits = new ArrayList<>(); } + public long numBackedges() { + return header.getPredecessors().stream().filter(b -> b.getId() >= header.getId()).count(); + } + @Override public String toString() { return "loop " + index + " depth " + depth + (parent != null ? " outer " + parent.index : ""); } - - public LoopBeginNode loopBegin() { - return (LoopBeginNode) ((Block) header).getBeginNode(); - } }
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/DeoptimizationGroupingPhase.java Wed Apr 09 17:11:48 2014 +0200 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/DeoptimizationGroupingPhase.java Wed Apr 09 17:38:16 2014 +0200 @@ -92,9 +92,9 @@ private static void exitLoops(AbstractDeoptimizeNode deopt, EndNode end, ControlFlowGraph cfg) { Block block = cfg.blockFor(deopt); - Loop<?> loop = block.getLoop(); + Loop<Block> loop = block.getLoop(); while (loop != null) { - end.graph().addBeforeFixed(end, end.graph().add(new LoopExitNode(loop.loopBegin()))); + end.graph().addBeforeFixed(end, end.graph().add(new LoopExitNode((LoopBeginNode) loop.header.getBeginNode()))); loop = loop.parent; } }
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/GuardLoweringPhase.java Wed Apr 09 17:11:48 2014 +0200 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/GuardLoweringPhase.java Wed Apr 09 17:38:16 2014 +0200 @@ -174,10 +174,10 @@ } private void insertLoopExits(DeoptimizeNode deopt) { - Loop<?> loop = block.getLoop(); + Loop<Block> loop = block.getLoop(); StructuredGraph graph = deopt.graph(); while (loop != null) { - LoopExitNode exit = graph.add(new LoopExitNode(loop.loopBegin())); + LoopExitNode exit = graph.add(new LoopExitNode((LoopBeginNode) loop.header.getBeginNode())); graph.addBeforeFixed(deopt, exit); loop = loop.parent; }
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ProfileCompiledMethodsPhase.java Wed Apr 09 17:11:48 2014 +0200 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ProfileCompiledMethodsPhase.java Wed Apr 09 17:38:16 2014 +0200 @@ -66,9 +66,9 @@ ControlFlowGraph cfg = ControlFlowGraph.compute(graph, true, true, true, true); for (Loop<Block> loop : cfg.getLoops()) { - double loopProbability = probabilities.get(loop.loopBegin()); + double loopProbability = probabilities.get(loop.header.getBeginNode()); if (loopProbability > (1D / Integer.MAX_VALUE)) { - addSectionCounters(loop.loopBegin(), loop.blocks, loop.children, schedule, probabilities); + addSectionCounters(loop.header.getBeginNode(), loop.blocks, loop.children, schedule, probabilities); } } addSectionCounters(graph.start(), Arrays.asList(cfg.getBlocks()), cfg.getLoops(), schedule, probabilities);
--- a/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/graph/ComputeInliningRelevanceClosure.java Wed Apr 09 17:11:48 2014 +0200 +++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/graph/ComputeInliningRelevanceClosure.java Wed Apr 09 17:38:16 2014 +0200 @@ -124,7 +124,7 @@ if (parent == null) { parent = createScope(loop.parent, processedLoops); } - Scope result = new Scope(loop.loopBegin(), parent); + Scope result = new Scope(loop.header.getBeginNode(), parent); processedLoops.put(loop, result); return result; }
--- a/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/graph/ReentrantBlockIterator.java Wed Apr 09 17:11:48 2014 +0200 +++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/graph/ReentrantBlockIterator.java Wed Apr 09 17:38:16 2014 +0200 @@ -102,7 +102,7 @@ } else { // recurse into the loop Loop<Block> loop = successor.getLoop(); - LoopBeginNode loopBegin = loop.loopBegin(); + LoopBeginNode loopBegin = (LoopBeginNode) loop.header.getBeginNode(); assert successor.getBeginNode() == loopBegin; List<StateT> exitStates = closure.processLoop(loop, state);
--- a/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/EffectsClosure.java Wed Apr 09 17:11:48 2014 +0200 +++ b/graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/EffectsClosure.java Wed Apr 09 17:38:16 2014 +0200 @@ -174,7 +174,7 @@ loopMergeEffects.put(loop, mergeProcessor.afterMergeEffects); assert info.exitStates.size() == loop.exits.size(); - loopEntryStates.put(loop.loopBegin(), loopEntryState); + loopEntryStates.put((LoopBeginNode) loop.header.getBeginNode(), loopEntryState); for (int i = 0; i < loop.exits.size(); i++) { assert info.exitStates.get(i) != null : "no loop exit state at " + loop.exits.get(i) + " / " + loop.header; }