params.def (PARAM_MAX_ITERATIONS_COMPUTATION_COST): New.
authorBernd Schmidt <bernd.schmidt@analog.com>
Fri, 15 Sep 2006 11:17:18 +0000 (11:17 +0000)
committerBernd Schmidt <bernds@gcc.gnu.org>
Fri, 15 Sep 2006 11:17:18 +0000 (11:17 +0000)
* 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

gcc/ChangeLog
gcc/loop-doloop.c
gcc/params.def

index 254b64a0ad686541fb6d0fcba072a904469b18a1..51594ac0cc6f30c6c69ff13571d00327aa837182 100644 (file)
@@ -1,3 +1,9 @@
+2005-09-15  Bernd Schmidt  <bernd.schmidt@analog.com>
+
+       * 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  <kazu@codesourcery.com>
 
        * doc/tm.texi (TARGET_FUNCTION_VALUE): Put @deftypefn all in
index f63e3426a47d8675125be0932640a88c662df27a..f2bb9baf1d70ee8b994056ec81ce013f69cf36e5 100644 (file)
@@ -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);
index 6d230fc2cfc3a29bba3cb214fa45d4e1a1f0841e..488a4a92b9b97875477523e9f5aeb2f917ab0416 100644 (file)
@@ -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",