changeset 23361:1dc168caec9f

modify the default loop unroll policy: allow 0 and 1 iteration loops to always be unrolled
author Lukas Stadler <lukas.stadler@oracle.com>
date Thu, 28 Jan 2016 18:44:59 +0100
parents 0dee85d7e73e
children 58fa03b34d5f
files graal/com.oracle.graal.loop/src/com/oracle/graal/loop/DefaultLoopPolicies.java
diffstat 1 files changed, 2 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/DefaultLoopPolicies.java	Thu Jan 28 16:24:50 2016 +0100
+++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/DefaultLoopPolicies.java	Thu Jan 28 18:44:59 2016 +0100
@@ -87,9 +87,9 @@
         CountedLoopInfo counted = loop.counted();
         long maxTrips = counted.constantMaxTripCount();
         int maxNodes = (counted.isExactTripCount() && counted.isConstantExactTripCount()) ? ExactFullUnrollMaxNodes.getValue() : FullUnrollMaxNodes.getValue();
-        maxNodes = Math.min(maxNodes, MaximumDesiredSize.getValue() - loop.loopBegin().graph().getNodeCount());
+        maxNodes = Math.min(maxNodes, Math.max(0, MaximumDesiredSize.getValue() - loop.loopBegin().graph().getNodeCount()));
         int size = Math.max(1, loop.size() - 1 - loop.loopBegin().phis().count());
-        if (maxTrips <= FullUnrollMaxIterations.getValue() && size * maxTrips <= maxNodes) {
+        if (maxTrips <= FullUnrollMaxIterations.getValue() && size * (maxTrips - 1) <= maxNodes) {
             // check whether we're allowed to unroll this loop
             for (Node node : loop.inside().nodes()) {
                 if (node instanceof ControlFlowAnchorNode) {