Hi, this patch fixes stupid overflow in tree-ssa-loop-ivcanon.c. If the estimated number of execution of loop is INT_MAX+1 it will get peeled incorrectly.
Bootstrapped/regtested x86_64-linux and committed (it is regression WRT the RTL implementation) Honza * tree-ssa-loop-ivcanon.c (try_peel_loop): Change type of peel to HOST_WIDE_INT Index: tree-ssa-loop-ivcanon.c =================================================================== --- tree-ssa-loop-ivcanon.c (revision 234516) +++ tree-ssa-loop-ivcanon.c (working copy) @@ -935,7 +935,7 @@ try_peel_loop (struct loop *loop, edge exit, tree niter, HOST_WIDE_INT maxiter) { - int npeel; + HOST_WIDE_INT npeel; struct loop_size size; int peeled_size; sbitmap wont_exit; @@ -990,7 +990,7 @@ try_peel_loop (struct loop *loop, { if (dump_file) fprintf (dump_file, "Not peeling: rolls too much " - "(%i + 1 > --param max-peel-times)\n", npeel); + "(%i + 1 > --param max-peel-times)\n", (int) npeel); return false; } npeel++; @@ -998,7 +998,7 @@ try_peel_loop (struct loop *loop, /* Check peeled loops size. */ tree_estimate_loop_size (loop, exit, NULL, &size, PARAM_VALUE (PARAM_MAX_PEELED_INSNS)); - if ((peeled_size = estimated_peeled_sequence_size (&size, npeel)) + if ((peeled_size = estimated_peeled_sequence_size (&size, (int) npeel)) > PARAM_VALUE (PARAM_MAX_PEELED_INSNS)) { if (dump_file) @@ -1032,7 +1032,7 @@ try_peel_loop (struct loop *loop, if (dump_file && (dump_flags & TDF_DETAILS)) { fprintf (dump_file, "Peeled loop %d, %i times.\n", - loop->num, npeel); + loop->num, (int) npeel); } if (loop->any_upper_bound) loop->nb_iterations_upper_bound -= npeel;