From a9ef98778deaf3b83ca1349ad09e7b15ce908158 Mon Sep 17 00:00:00 2001 From: hubicka Date: Mon, 8 Oct 2012 18:09:41 +0000 Subject: * loop-unswitch.c (unswitch_single_loop): Use estimated_loop_iterations_int to prevent unswitching when loop is known to not roll. * tree-ssa-loop-niter.c (estimated_loop_iterations): Do not segfault when SCEV is not initialized. (max_loop_iterations): Likewise. * tree-ssa-loop-unswitch.c (tree_ssa_unswitch_loops): Use estimated_loop_iterations_int to prevent unswithcing when loop is known to not roll. * tree-scalar-evolution.c (scev_initialized_p): New function. * tree-scalar-evolution.h (scev_initialized_p): Likewise. * loop-unroll.c (decide_peel_once_rolling): Use max_loop_iterations_int. (unroll_loop_constant_iterations): Update nb_iterations_upper_bound and nb_iterations_estimate. (decide_unroll_runtime_iterations): Use estimated_loop_iterations or max_loop_iterations; (unroll_loop_runtime_iterations): fix profile updating. (decide_peel_simple): Use estimated_loop_iterations and max_loop_iterations. (decide_unroll_stupid): Use estimated_loop_iterations ad max_loop_iterations. * loop-doloop.c (doloop_modify): Use max_loop_iterations_int. (doloop_optimize): Likewise. * loop-iv.c (iv_number_of_iterations): Use record_niter_bound. (find_simple_exit): Likewise. * cfgloop.h (struct niter_desc): Remove niter_max. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@192219 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/loop-unswitch.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'gcc/loop-unswitch.c') diff --git a/gcc/loop-unswitch.c b/gcc/loop-unswitch.c index a9089a66cdf..4107048de01 100644 --- a/gcc/loop-unswitch.c +++ b/gcc/loop-unswitch.c @@ -257,6 +257,7 @@ unswitch_single_loop (struct loop *loop, rtx cond_checked, int num) rtx cond, rcond = NULL_RTX, conds, rconds, acond, cinsn; int repeat; edge e; + HOST_WIDE_INT iterations; /* Do not unswitch too much. */ if (num > PARAM_VALUE (PARAM_MAX_UNSWITCH_LEVEL)) @@ -299,7 +300,8 @@ unswitch_single_loop (struct loop *loop, rtx cond_checked, int num) } /* Nor if the loop usually does not roll. */ - if (expected_loop_iterations (loop) < 1) + iterations = estimated_loop_iterations_int (loop); + if (iterations >= 0 && iterations <= 1) { if (dump_file) fprintf (dump_file, ";; Not unswitching, loop iterations < 1\n"); -- cgit v1.2.1