src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.loop.phases/src/org/graalvm/compiler/loop/phases/LoopPeelingPhase.java
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.loop.phases/src/org/graalvm/compiler/loop/phases/LoopPeelingPhase.java Thu Oct 31 14:23:06 2019 -0700
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.loop.phases/src/org/graalvm/compiler/loop/phases/LoopPeelingPhase.java Thu Oct 31 16:54:16 2019 -0700
@@ -24,6 +24,7 @@
package org.graalvm.compiler.loop.phases;
+import org.graalvm.compiler.debug.CounterKey;
import org.graalvm.compiler.debug.DebugContext;
import org.graalvm.compiler.loop.LoopEx;
import org.graalvm.compiler.loop.LoopPolicies;
@@ -33,6 +34,8 @@
public class LoopPeelingPhase extends LoopPhase<LoopPolicies> {
+ public static final CounterKey PEELED = DebugContext.counter("Peeled");
+
public LoopPeelingPhase(LoopPolicies policies) {
super(policies);
}
@@ -45,10 +48,13 @@
LoopsData data = new LoopsData(graph);
try (DebugContext.Scope s = debug.scope("peeling", data.getCFG())) {
for (LoopEx loop : data.outerFirst()) {
- if (getPolicies().shouldPeel(loop, data.getCFG(), context.getMetaAccess())) {
- debug.log("Peeling %s", loop);
- LoopTransformations.peel(loop);
- debug.dump(DebugContext.DETAILED_LEVEL, graph, "Peeling %s", loop);
+ if (loop.canDuplicateLoop() && loop.loopBegin().getLoopEndCount() > 0) {
+ if (LoopPolicies.Options.PeelALot.getValue(graph.getOptions()) || getPolicies().shouldPeel(loop, data.getCFG(), context.getMetaAccess())) {
+ debug.log("Peeling %s", loop);
+ PEELED.add(debug, 1);
+ LoopTransformations.peel(loop);
+ debug.dump(DebugContext.DETAILED_LEVEL, graph, "Peeling %s", loop);
+ }
}
}
data.deleteUnusedNodes();