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>