# HG changeset patch # User Josef Eisl # Date 1397057896 -7200 # Node ID b6711b51457660a4365dad46c7f9335b6fe67376 # Parent 1bf700e19e84d3fcd4815988b96127e1ec3c4fbd Remove LoopBeginNode loopBegin() from Loop. diff -r 1bf700e19e84 -r b6711b514576 graal/com.oracle.graal.alloc/src/com/oracle/graal/alloc/ComputeBlockOrder.java --- 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 > boolean skipLoopHeader(AbstractBlock block) { + return (block.isLoopHeader() && !block.isLoopEnd() && block.getLoop().numBackedges() == 1); } /** diff -r 1bf700e19e84 -r b6711b514576 graal/com.oracle.graal.loop/src/com/oracle/graal/loop/LoopEx.java --- 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() { diff -r 1bf700e19e84 -r b6711b514576 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/cfg/Loop.java --- 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> { public final Loop 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(); - } } diff -r 1bf700e19e84 -r b6711b514576 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/DeoptimizationGroupingPhase.java --- 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 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; } } diff -r 1bf700e19e84 -r b6711b514576 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/GuardLoweringPhase.java --- 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 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; } diff -r 1bf700e19e84 -r b6711b514576 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ProfileCompiledMethodsPhase.java --- 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 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); diff -r 1bf700e19e84 -r b6711b514576 graal/com.oracle.graal.phases/src/com/oracle/graal/phases/graph/ComputeInliningRelevanceClosure.java --- 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; } diff -r 1bf700e19e84 -r b6711b514576 graal/com.oracle.graal.phases/src/com/oracle/graal/phases/graph/ReentrantBlockIterator.java --- 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 loop = successor.getLoop(); - LoopBeginNode loopBegin = loop.loopBegin(); + LoopBeginNode loopBegin = (LoopBeginNode) loop.header.getBeginNode(); assert successor.getBeginNode() == loopBegin; List exitStates = closure.processLoop(loop, state); diff -r 1bf700e19e84 -r b6711b514576 graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/EffectsClosure.java --- 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; }