# HG changeset patch # User Lukas Stadler # Date 1454003099 -3600 # Node ID 1dc168caec9fc0129b350b6ea30ecb610889773a # Parent 0dee85d7e73efd52408875fdd42bcec5970904ca modify the default loop unroll policy: allow 0 and 1 iteration loops to always be unrolled diff -r 0dee85d7e73e -r 1dc168caec9f graal/com.oracle.graal.loop/src/com/oracle/graal/loop/DefaultLoopPolicies.java --- 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) {