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_(_dot_)_gnu_(_dot_)_org> -----
> Date: 4 Jul 2007 10:16:52 -0000
> From: rguenth at gcc dot gnu dot org <gcc-bugzilla_(_at_)_gcc_(_dot_)_gnu_(_dot_)_org>
> To: ed_(_at_)_fxq_(_dot_)_nl
> Reply-To: gcc-bugzilla_(_at_)_gcc_(_dot_)_gnu_(_dot_)_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)
> @@ -1747,6 +1747,12 @@ 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_(_dot_)_nl>
WWW: http://g-rave.nl/
Attachment:
pgpuEKwawV7jh.pgp
Description: PGP signature