Mercurial > hg > graal-compiler
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()) {