> > -  FOR_EACH_VEC_ELT (edge, exits, i, ex)
> > +  if (loop->any_upper_bound)
> >      {
> > -      if (!just_once_each_iteration_p (loop, ex->src))
> > -   continue;
> > +      if (dump_file && (dump_flags & TDF_DETAILS))
> > +   fprintf (dump_file, "Found loop %i to be finite: upper bound is 
> > recorded.\n",
> > +            loop->num);
> > +      return true;
> > +    }
> 
> This looks redundant with ...
> 
> > -      if (number_of_iterations_exit (loop, ex, &desc, false))
> > -        {
> > -     if (dump_file && (dump_flags & TDF_DETAILS))
> > -       {
> > -         fprintf (dump_file, "Found loop %i to be finite: iterating ", 
> > loop->num);
> > -         print_generic_expr (dump_file, desc.niter, TDF_SLIM);
> > -         fprintf (dump_file, " times\n");
> > -       }
> > -     finite = true;
> > -     break;
> > -   }
> > +  if (max_loop_iterations (loop, &nit))
> > +    {
> 
> ... this.  If you want to short-circuit max_loop_iterations ()
> then why not
> 
>    if (loop->any_upper_bound
>        || max_loop_iterations (loop, &nit))
>      {
>        ...
> 
> ?  The different dumping seems not a good reason to obfuscate it.
> 

Sounds good to me.  I only wanted to avoid max_loop_iterations re-trying to
derrive the bound when it is already known to be finite.  I think I will
eventually make max_loop_iterations and friends to do the hard work only once
per loop optimizer queue or when asked to collect the current bounds (since
the pointers to statements are hard to maintain).

OK with that change?
Honza

Reply via email to