[Patch] Silent gcc 4.2.0 loop optimization bug with -O2

From: Ed Schouten <ed_at_fxq.nl>
Date: Wed, 4 Jul 2007 14:12:08 +0200
Hello,

This morning I received the following message from GCC's Bugzilla:

----- Forwarded message from rguenth at gcc dot gnu dot org <gcc-bugzilla_at_gcc.gnu.org> -----
> Date: 4 Jul 2007 10:16:52 -0000
> From: rguenth at gcc dot gnu dot org <gcc-bugzilla_at_gcc.gnu.org>
> To: ed_at_fxq.nl
> Reply-To: gcc-bugzilla_at_gcc.gnu.org
> Subject: [Bug tree-optimization/32500] [4.2 Regression] Loop optimization
> 	limits range to size of array used inside loop
> 
> [snip]
> 
> scev_probably_wraps_p() returns false for the above chrec because for
> the loop in question estimated_nb_iterations is 4(!) which is derived
> from infer_loop_bounds_from_undefined.  On the trunk this is fixed
> by rewriting number of iterations analysis.  On the 4.2 branch we
> can fix this conservatively by
> 
> Index: tree-ssa-loop-niter.c
> ===================================================================
> --- tree-ssa-loop-niter.c       (revision 126260)
> +++ tree-ssa-loop-niter.c       (working copy)
> _at__at_ -1747,6 +1747,12 _at__at_ infer_loop_bounds_from_undefined (struct
>      {
>        bb = bbs[i];
> 
> +      /* If BB is not executed in each iteration of the loop, we cannot
> +        use the operations in it to infer reliable upper bound on the
> +        # of iterations of the loop.  */
> +      if (!dominated_by_p (CDI_DOMINATORS, loop->latch, bb))
> +       continue;
> +
>        for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
>          {
>           tree stmt = bsi_stmt (bsi);
> 
> I'm going to test this.
> 
----- End forwarded message -----

I just tested the patch on my desktop and it seems to work. The test
code now compiles like it should. Hopefully it will be part of 4.2.1.

Yours,
-- 
 Ed Schouten <ed_at_fxq.nl>
 WWW: http://g-rave.nl/

Received on Wed Jul 04 2007 - 10:12:11 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:13 UTC