< prev index next >
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.loop.phases/src/org/graalvm/compiler/loop/phases/LoopPartialUnrollPhase.java
Print this page
@@ -43,40 +43,41 @@
@Override
@SuppressWarnings("try")
protected void run(StructuredGraph graph, PhaseContext context) {
if (graph.hasLoops()) {
HashSetNodeEventListener listener = new HashSetNodeEventListener();
- try (Graph.NodeEventScope nes = graph.trackNodeEvents(listener)) {
boolean changed = true;
while (changed) {
+ changed = false;
+ try (Graph.NodeEventScope nes = graph.trackNodeEvents(listener)) {
LoopsData dataCounted = new LoopsData(graph);
dataCounted.detectedCountedLoops();
- changed = false;
for (LoopEx loop : dataCounted.countedLoops()) {
if (!LoopTransformations.isUnrollableLoop(loop)) {
continue;
}
if (getPolicies().shouldPartiallyUnroll(loop)) {
if (loop.loopBegin().isSimpleLoop()) {
// First perform the pre/post transformation and do the partial
// unroll when we come around again.
LoopTransformations.insertPrePostLoops(loop, graph);
- changed = true;
} else {
- changed |= LoopTransformations.partialUnroll(loop, graph);
+ LoopTransformations.partialUnroll(loop, graph);
}
+ changed = true;
}
}
dataCounted.deleteUnusedNodes();
- }
- }
+
if (!listener.getNodes().isEmpty()) {
canonicalizer.applyIncremental(graph, context, listener.getNodes());
listener.getNodes().clear();
}
}
}
+ }
+ }
@Override
public boolean checkContract() {
return false;
}
< prev index next >