http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53265



--- Comment #24 from Richard Biener <rguenth at gcc dot gnu.org> 2013-03-13 
11:00:11 UTC ---

(In reply to comment #23)

> Created attachment 29661 [details]

> gcc48-pr53265.patch

> 

> Updated patch as per IRC discussions.  Still need to look at longbranch2.C and

> do_1.f90, then test it.



Looks good.  Few comments:



+  number_of_latch_executions (loop);



add a comment what side-effect you are interested in.



+

+  /* If we know the exact number of iterations of this loop avoid all the

+     work below and most importantly do not break code with undefined

+     behavior by recording smaller maximum number of iterations.  */

+  if (loop->nb_iterations

+      && TREE_CODE (loop->nb_iterations) == INTEGER_CST

+      && loop->any_upper_bound

+      && loop->nb_iterations_upper_bound.ucmp

+          (tree_to_double_int (loop->nb_iterations)) < 0)

+    loop->nb_iterations_upper_bound = tree_to_double_int

(loop->nb_iterations);



We don't avoid any work, so adjust the comment.  I'd also simply do:



   /* If we know the exact number of iterations record that as the

      upper bound as well.  This avoids breaking code with undefined

      behavior by eventually recording a smaller maximum.  */

   if (loop->nb_iterations

       && TREE_CODE (loop->nb_iterations) == INTEGER_CST)

     {

       loop->any_upper_bound = true;

       loop->nb_iterations_upper_bound = tree_to_double_int

(loop->nb_iterations);

     }



that's always correct.

Reply via email to