diff options
Diffstat (limited to 'gcc/tree-ssa-loop-ivcanon.c')
-rw-r--r-- | gcc/tree-ssa-loop-ivcanon.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/gcc/tree-ssa-loop-ivcanon.c b/gcc/tree-ssa-loop-ivcanon.c index dc863f8b8a5..00965465342 100644 --- a/gcc/tree-ssa-loop-ivcanon.c +++ b/gcc/tree-ssa-loop-ivcanon.c @@ -184,10 +184,6 @@ try_unroll_loop_completely (struct loop *loop, ninsns = tree_num_loop_insns (loop, &eni_size_weights); - if (n_unroll * ninsns - > (unsigned) PARAM_VALUE (PARAM_MAX_COMPLETELY_PEELED_INSNS)) - return false; - unr_insns = estimated_unrolled_size (ninsns, n_unroll); if (dump_file && (dump_flags & TDF_DETAILS)) { @@ -196,6 +192,17 @@ try_unroll_loop_completely (struct loop *loop, (int) unr_insns); } + if (unr_insns > ninsns + && (unr_insns + > (unsigned) PARAM_VALUE (PARAM_MAX_COMPLETELY_PEELED_INSNS))) + { + if (dump_file && (dump_flags & TDF_DETAILS)) + fprintf (dump_file, "Not unrolling loop %d " + "(--param max-completely-peeled-insns limit reached).\n", + loop->num); + return false; + } + if (ul == UL_NO_GROWTH && unr_insns > ninsns) { |