Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 4 Jul 2007 14:12:08 +0200
From:      Ed Schouten <ed@fxq.nl>
To:        Andrey Chernov <ache@nagual.pp.ru>, Alexander Kabaev <kabaev@gmail.com>, current@freebsd.org, kan@freebsd.org
Subject:   [Patch] Silent gcc 4.2.0 loop optimization bug with -O2
Message-ID:  <20070704121208.GC37187@hoeg.nl>
In-Reply-To: <20070625153840.GP27942@hoeg.nl>
References:  <20070625130913.GA50273@nagual.pp.ru> <20070625133951.GA51324@nagual.pp.ru> <8e5ef5f70706250659v48f64410wb5399985a571087e@mail.gmail.com> <20070625145627.GA53685@nagual.pp.ru> <20070625151508.GO27942@hoeg.nl> <20070625152559.GA54055@nagual.pp.ru> <20070625153840.GP27942@hoeg.nl>

next in thread | previous in thread | raw e-mail | index | archive | help

--s9fJI615cBHmzTOP
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

Hello,

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

----- Forwarded message from rguenth at gcc dot gnu dot org <gcc-bugzilla@g=
cc.gnu.org> -----
> Date: 4 Jul 2007 10:16:52 -0000
> From: rguenth at gcc dot gnu dot org <gcc-bugzilla@gcc.gnu.org>
> To: ed@fxq.nl
> Reply-To: gcc-bugzilla@gcc.gnu.org
> Subject: [Bug tree-optimization/32500] [4.2 Regression] Loop optimization
> 	limits range to size of array used inside loop
>=20
> [snip]
>=20
> 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
>=20
> Index: tree-ssa-loop-niter.c
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
> --- 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 =3D bbs[i];
>=20
> +      /* 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 =3D bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
>          {
>           tree stmt =3D bsi_stmt (bsi);
>=20
> I'm going to test this.
>=20
----- 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,
--=20
 Ed Schouten <ed@fxq.nl>
 WWW: http://g-rave.nl/

--s9fJI615cBHmzTOP
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.7 (FreeBSD)

iD8DBQFGi46Y52SDGA2eCwURAkO8AJ9htSQ7ZhuaJ09/WD/wKzofY78+uACfc+jV
oaACxIeL38uz9qMliIdni8M=
=OFeT
-----END PGP SIGNATURE-----

--s9fJI615cBHmzTOP--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20070704121208.GC37187>