On Mon, 22 Oct 2012, Jan Hubicka wrote:

> Hi,
> with profile feedback we may misupdate the profile and start to believe that 
> loops
> iterate more times than they do.  This patch makes at least 
> nb_iterations_estimate
> no greater than nb_iterations_upper_bound.  This makes the 
> unrolling/peeling/unswitching
> heuristics to behave more consistently.
> Bootstrapped/regtested x86_64-linux, OK?

Ok with ...

> Honza
> 
>       * tree-sssa-loop-niter.c (record_niter_bound): Be sure that realistic
>       estimate is not bigger than upper bound.
> Index: tree-ssa-loop-niter.c
> ===================================================================
> --- tree-ssa-loop-niter.c     (revision 192632)
> +++ tree-ssa-loop-niter.c     (working copy)
> @@ -2506,13 +2506,20 @@ record_niter_bound (struct loop *loop, d
>      {
>        loop->any_upper_bound = true;
>        loop->nb_iterations_upper_bound = i_bound;
> +      if (loop->any_estimate
> +       && i_bound.ult (loop->nb_iterations_estimate))
> +        loop->nb_iterations_estimate = i_bound;
>      }
>    if (realistic
>        && (!loop->any_estimate
>         || i_bound.ult (loop->nb_iterations_estimate)))
>      {
>        loop->any_estimate = true;
> -      loop->nb_iterations_estimate = i_bound;
> +      if (loop->nb_iterations_upper_bound.ult (i_bound)
> +        && loop->any_upper_bound)

testing any_upper_bound before accessing loop->nb_iterations_upper_bound

> +        loop->nb_iterations_estimate = loop->nb_iterations_upper_bound;
> +      else
> +        loop->nb_iterations_estimate = i_bound;
>      }
>  
>    /* If an upper bound is smaller than the realistic estimate of the
> 
> 

-- 
Richard Biener <rguent...@suse.de>
SUSE / SUSE Labs
SUSE LINUX Products GmbH - Nuernberg - AG Nuernberg - HRB 16746
GF: Jeff Hawn, Jennifer Guild, Felix Imend

Reply via email to