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