Make do_loop use estimated_num_iterations/expected_num_iterations
Richard Biener
rguenther@suse.de
Fri May 20 09:39:00 GMT 2016
On Thu, 19 May 2016, Jan Hubicka wrote:
> Hi,
> this patch makes doloop_optimize to use the
> get_estimated_loop_iterations_int/get_max_loop_iterations_int instead of weakter
> check for const_iter. Bootstrapped/regtested x86_64-linux, OK?
Ok.
Thanks,
Richard.
> Honza
>
> * loop-doloop.c (doloop_optimize): Use get_estimated_loop_iterations_int
> and get_max_loop_iterations_int.
> Index: loop-doloop.c
> ===================================================================
> --- loop-doloop.c (revision 236450)
> +++ loop-doloop.c (working copy)
> @@ -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);
> + est_niter = get_estimated_loop_iterations_int (loop);
> + if (est_niter == -1)
> + est_niter = get_max_loop_iterations_int (loop);
>
> - if (est_niter < 3)
> + 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;
> }
>
>
>
--
Richard Biener <rguenther@suse.de>
SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham Norton, HRB 21284 (AG Nuernberg)
More information about the Gcc-patches
mailing list