# HG changeset patch # User Gilles Duboscq # Date 1334059514 -7200 # Node ID a9e4b30968d4844c89fc8534d59d300127d18d43 # Parent b64933dc4830c6ead7638025af6e5cb12203e852 Estimate size of loop and peel only if resulting graph is not too big diff -r b64933dc4830 -r a9e4b30968d4 graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/loop/LoopTransformUtil.java --- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/loop/LoopTransformUtil.java Mon Apr 09 20:43:30 2012 +0200 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/loop/LoopTransformUtil.java Tue Apr 10 14:05:14 2012 +0200 @@ -56,4 +56,12 @@ } return new SuperBlock(loop.loopBegin(), loop.loopBegin(), blocks, earlyExits, loop.loopBegin()); } + + public static int estimateSize(Loop loop) { + int fixed = 0; + for (Block b : loop.blocks) { + fixed += b.getBeginNode().getBlockNodes().count(); + } + return fixed * 3; + } } diff -r b64933dc4830 -r a9e4b30968d4 graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/LoopTransformPhase.java --- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/LoopTransformPhase.java Mon Apr 09 20:43:30 2012 +0200 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/LoopTransformPhase.java Tue Apr 10 14:05:14 2012 +0200 @@ -46,7 +46,8 @@ }); for (Loop loop : loops) { double entryProbability = loop.loopBegin().forwardEnd().probability(); - if (entryProbability > GraalOptions.MinimumPeelProbability) { + if (entryProbability > GraalOptions.MinimumPeelProbability + && LoopTransformUtil.estimateSize(loop) + graph.getNodeCount() < GraalOptions.MaximumDesiredSize) { Debug.log("Peeling %s", loop); LoopTransformUtil.peel(loop); Debug.dump(graph, "After peeling %s", loop);