loop-doloop.c (doloop_optimize): Use get_estimated_loop_iterations_int and get_max_lo...
authorJan Hubicka <hubicka@ucw.cz>
Fri, 20 May 2016 12:59:08 +0000 (14:59 +0200)
committerJan Hubicka <hubicka@gcc.gnu.org>
Fri, 20 May 2016 12:59:08 +0000 (12:59 +0000)
* loop-doloop.c (doloop_optimize): Use get_estimated_loop_iterations_int
and get_max_loop_iterations_int.

From-SVN: r236509

gcc/ChangeLog
gcc/loop-doloop.c

index 1d5bca7131b01a156fbc4fb696af25b762fa5234..021f64e5bd8c0b6690288e8ea7b7a93d5e737657 100644 (file)
@@ -1,3 +1,8 @@
+2016-05-20  Jan Hubicka  <hubicka@ucw.cz>
+
+       * loop-doloop.c (doloop_optimize): Use get_estimated_loop_iterations_int
+       and get_max_loop_iterations_int.
+
 2016-05-20  Jan Hubicka  <hubicka@ucw.cz>
 
        * tree-ssa-loop-niter.c (idx_infer_loop_bounds): We can not produce
index 940c966dc5a8b6b0e2d7d6204ed9ebc836e8ee3f..6996c0bc0ef5b156fcf90d94116d3ea9d76cba6b 100644 (file)
@@ -610,7 +610,8 @@ doloop_optimize (struct loop *loop)
   widest_int iterations, iterations_max;
   rtx_code_label *start_label;
   rtx condition;
-  unsigned level, est_niter;
+  unsigned level;
+  HOST_WIDE_INT est_niter;
   int max_cost;
   struct niter_desc *desc;
   unsigned word_mode_size;
@@ -635,21 +636,16 @@ doloop_optimize (struct loop *loop)
     }
   mode = desc->mode;
 
-  est_niter = 3;
-  if (desc->const_iter)
-    est_niter = desc->niter;
-  /* If the estimate on number of iterations is reliable (comes from profile
-     feedback), use it.  Do not use it normally, since the expected number
-     of iterations of an unrolled loop is 2.  */
-  if (loop->header->count)
-    est_niter = expected_loop_iterations (loop);
-
-  if (est_niter < 3)
+  est_niter = get_estimated_loop_iterations_int (loop);
+  if (est_niter == -1)
+    est_niter = get_max_loop_iterations_int (loop);
+
+  if (est_niter >= 0 && est_niter < 3)
     {
       if (dump_file)
        fprintf (dump_file,
                 "Doloop: Too few iterations (%u) to be profitable.\n",
-                est_niter);
+                (unsigned int)est_niter);
       return false;
     }