hotspot/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.loop.phases/src/org/graalvm/compiler/loop/phases/LoopPartialUnrollPhase.java
changeset 46762 f7defa99f173
parent 46640 70bdce04c59b
child 46963 089674d9949b
--- a/hotspot/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.loop.phases/src/org/graalvm/compiler/loop/phases/LoopPartialUnrollPhase.java	Sat Aug 05 03:05:06 2017 +0200
+++ b/hotspot/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.loop.phases/src/org/graalvm/compiler/loop/phases/LoopPartialUnrollPhase.java	Fri Aug 04 19:59:33 2017 -0700
@@ -45,12 +45,12 @@
     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) {
+            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;
@@ -60,19 +60,20 @@
                                 // 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();
+                    }
                 }
             }
-            if (!listener.getNodes().isEmpty()) {
-                canonicalizer.applyIncremental(graph, context, listener.getNodes());
-                listener.getNodes().clear();
-            }
         }
     }