diff options
author | Bernd Schmidt <bernd.schmidt@analog.com> | 2006-09-15 11:17:18 +0000 |
---|---|---|
committer | Bernd Schmidt <bernds@gcc.gnu.org> | 2006-09-15 11:17:18 +0000 |
commit | 45b9a14bd655c1526f66a5b4e88e16a290ea01c9 (patch) | |
tree | 760d109441f8836d466cfee8c2c84acab7dcf3e4 /gcc/loop-doloop.c | |
parent | 21cc37194e7036e89ac7823a78539056fc802dbb (diff) | |
download | gcc-45b9a14bd655c1526f66a5b4e88e16a290ea01c9.zip gcc-45b9a14bd655c1526f66a5b4e88e16a290ea01c9.tar.gz gcc-45b9a14bd655c1526f66a5b4e88e16a290ea01c9.tar.bz2 |
params.def (PARAM_MAX_ITERATIONS_COMPUTATION_COST): New.
* params.def (PARAM_MAX_ITERATIONS_COMPUTATION_COST): New.
* loop-doloop.c (doloop_optimize): Use it to limit costs of
expanding the number of iterations.
From-SVN: r116966
Diffstat (limited to 'gcc/loop-doloop.c')
-rw-r--r-- | gcc/loop-doloop.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/gcc/loop-doloop.c b/gcc/loop-doloop.c index f63e342..f2bb9ba 100644 --- a/gcc/loop-doloop.c +++ b/gcc/loop-doloop.c @@ -484,7 +484,7 @@ doloop_optimize (struct loop *loop) rtx iterations_max; rtx start_label; rtx condition; - unsigned level, est_niter; + unsigned level, est_niter, max_cost; struct niter_desc *desc; unsigned word_mode_size; unsigned HOST_WIDE_INT word_mode_max; @@ -525,6 +525,17 @@ doloop_optimize (struct loop *loop) return false; } + max_cost + = COSTS_N_INSNS (PARAM_VALUE (PARAM_MAX_ITERATIONS_COMPUTATION_COST)); + if (rtx_cost (desc->niter_expr, SET) > max_cost) + { + if (dump_file) + fprintf (dump_file, + "Doloop: number of iterations too costly to compute.\n", + est_niter); + return false; + } + count = copy_rtx (desc->niter_expr); iterations = desc->const_iter ? desc->niter_expr : const0_rtx; iterations_max = GEN_INT (desc->niter_max); |