changeset 23272:724a078f7410

Peeling: also peel counted loops
author Gilles Duboscq <gilles.m.duboscq@oracle.com>
date Fri, 08 Jan 2016 17:22:37 +0100
parents 8b7b4f1e3274
children 760c71be4a4a
files graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/CountedLoopTest.java graal/com.oracle.graal.loop/src/com/oracle/graal/loop/DefaultLoopPolicies.java
diffstat 2 files changed, 6 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/CountedLoopTest.java	Thu Jan 07 10:31:36 2016 -0800
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/CountedLoopTest.java	Fri Jan 08 17:22:37 2016 +0100
@@ -22,9 +22,6 @@
  */
 package com.oracle.graal.compiler.test;
 
-import jdk.vm.ci.meta.JavaKind;
-import jdk.vm.ci.meta.ResolvedJavaMethod;
-
 import org.junit.Test;
 
 import com.oracle.graal.api.directives.GraalDirectives;
@@ -35,13 +32,16 @@
 import com.oracle.graal.nodes.StructuredGraph;
 import com.oracle.graal.nodes.ValueNode;
 import com.oracle.graal.nodes.calc.FloatingNode;
+import com.oracle.graal.nodes.graphbuilderconf.GraphBuilderConfiguration.Plugins;
 import com.oracle.graal.nodes.graphbuilderconf.GraphBuilderContext;
 import com.oracle.graal.nodes.graphbuilderconf.InvocationPlugin;
-import com.oracle.graal.nodes.graphbuilderconf.GraphBuilderConfiguration.Plugins;
 import com.oracle.graal.nodes.graphbuilderconf.InvocationPlugins.Registration;
 import com.oracle.graal.nodes.spi.LIRLowerable;
 import com.oracle.graal.nodes.spi.NodeLIRBuilderTool;
 
+import jdk.vm.ci.meta.JavaKind;
+import jdk.vm.ci.meta.ResolvedJavaMethod;
+
 public class CountedLoopTest extends GraalCompilerTest {
 
     @FunctionalInterface
@@ -199,6 +199,7 @@
         int j = 0;
         for (int i = 0; i < 1024; i++) {
             j += 5;
+            GraalDirectives.controlFlowAnchor();
             ret.extremum = get(InductionVariable::extremumNode, j);
         }
         ret.exitValue = get(InductionVariable::exitValueNode, j);
@@ -226,6 +227,7 @@
 
         public void rewrite(LoopsData loops) {
             InductionVariable inductionVariable = loops.getInductionVariable(iv);
+            assert inductionVariable != null;
             ValueNode node = property.get(inductionVariable);
             replaceAtUsagesAndDelete(node);
         }
--- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/DefaultLoopPolicies.java	Thu Jan 07 10:31:36 2016 -0800
+++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/DefaultLoopPolicies.java	Fri Jan 08 17:22:37 2016 +0100
@@ -56,12 +56,8 @@
     @Option(help = "", type = OptionType.Expert) public static final OptionValue<Integer> FullUnrollMaxIterations = new OptionValue<>(600);
     @Option(help = "", type = OptionType.Expert) public static final OptionValue<Integer> ExactFullUnrollMaxNodes = new OptionValue<>(1200);
 
-    // TODO (gd) change when inversion is available
     @Override
     public boolean shouldPeel(LoopEx loop, ControlFlowGraph cfg) {
-        if (loop.detectCounted()) {
-            return false;
-        }
         LoopBeginNode loopBegin = loop.loopBegin();
         double entryProbability = cfg.blockFor(loopBegin.forwardEnd()).probability();
         if (entryProbability > MinimumPeelProbability.getValue() && loop.size() + loopBegin.graph().getNodeCount() < MaximumDesiredSize.getValue()) {