From 883bb2bbc9d7d72a953f5bb685d05c13c4039449 Mon Sep 17 00:00:00 2001 From: bernds Date: Fri, 15 Sep 2006 11:17:18 +0000 Subject: [PATCH] * params.def (PARAM_MAX_ITERATIONS_COMPUTATION_COST): New. * loop-doloop.c (doloop_optimize): Use it to limit costs of expanding the number of iterations. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@116966 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 6 ++++++ gcc/loop-doloop.c | 13 ++++++++++++- gcc/params.def | 6 ++++++ 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 254b64a0ad6..51594ac0cc6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2005-09-15 Bernd Schmidt + + * params.def (PARAM_MAX_ITERATIONS_COMPUTATION_COST): New. + * loop-doloop.c (doloop_optimize): Use it to limit costs of + expanding the number of iterations. + 2006-09-15 Kazu Hirata * doc/tm.texi (TARGET_FUNCTION_VALUE): Put @deftypefn all in diff --git a/gcc/loop-doloop.c b/gcc/loop-doloop.c index f63e3426a47..f2bb9baf1d7 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); diff --git a/gcc/params.def b/gcc/params.def index 6d230fc2cfc..488a4a92b9b 100644 --- a/gcc/params.def +++ b/gcc/params.def @@ -292,6 +292,12 @@ DEFPARAM(PARAM_MAX_ITERATIONS_TO_TRACK, "max-iterations-to-track", "Bound on the number of iterations the brute force # of iterations analysis algorithm evaluates", 1000, 0, 0) +/* A cutoff to avoid costly computations of the number of iterations in + the doloop transformation. */ +DEFPARAM(PARAM_MAX_ITERATIONS_COMPUTATION_COST, + "max-iterations-computation-cost", + "Bound on the cost of an expression to compute the number of iterations", + 10, 0, 0) DEFPARAM(PARAM_MAX_SMS_LOOP_NUMBER, "max-sms-loop-number", -- 2.11.4.GIT