public inbox for java-prs@sourceware.org help / color / mirror / Atom feed
From: "dnovillo at gcc dot gnu dot org" <gcc-bugzilla@gcc.gnu.org> To: java-prs@gcc.gnu.org Subject: [Bug tree-optimization/21855] array bounds checking elimination Date: Fri, 03 Jun 2005 14:34:00 -0000 [thread overview] Message-ID: <20050603143422.26069.qmail@sourceware.org> (raw) In-Reply-To: <20050601015434.21855.tromey@gcc.gnu.org> ------- Additional Comments From dnovillo at gcc dot gnu dot org 2005-06-03 14:34 ------- Aliasing is getting in the way of range propagation here. We don't realize that args.length does not change during the loop, which means that we don't eliminate the redundant load and fail to see the equivalence between the ranges. Analysis from an IRC discussion: <dnovillo> tromey: so, this is how we get ourselves tied up in a knot. This is the IL inside the loop body (21855): <dnovillo> <L0>:; <dnovillo> D.671_6 = args_5->length; <dnovillo> if (i_2 >= D.671_6) goto <L10>; else goto <L1>; <dnovillo> [ ... ] <dnovillo> i.4_13 = (unsigned int) i_12; <dnovillo> D.680_14 = args_5->length; <dnovillo> D.681_15 = (unsigned int) D.680_14; <dnovillo> if (i.4_13 < D.681_15) goto <L6>; else goto <L4>; <dnovillo> <L4>:; <dnovillo> D.682_27 = _Jv_ThrowBadArrayIndex (i_12); <dnovillo> the first if() controls the iteration of the loop. <dnovillo> the second if () is the redundancy we want to remove. <dnovillo> when we get to this point, i_12 has the range we want, namely [-INF, D.671_6 - 1]. <dnovillo> Two things go wrong: <dnovillo> 1- The cast to unsigned int is an euphemism for ABS_EXPR here. VRP doesn't see that and sets i.4_13's range to VARYING. That's trivial to fix. <dnovillo> 2- We load from 'args_5->length' inside the loop even though the memory has not changed. This is the aliasing problem. If we realized that args_5->length doesn't change, FRE would've removed the redundant load and the inner if <dnovillo> would look like: 'if (i.4_13 < D.671_6)' <dnovillo> which we would immediately toss away <DannyB> dnovillo: my proposal to solve #2 is to have multiple name tags per pointer (one for each offset that is accessed off that pointer), so that we can say that args_5->length only is modified by args_5->length <DannyB> (or whatever else happens to alias that field) <dnovillo> DannyB: not making args point-to call-clobbered vars would suffice here. <dnovillo> DannyB: there are System. calls in the loop. <DannyB> Isn't args an incoming pointer? <dnovillo> nope. <dnovillo> DannyB: bah. yes. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21855
next prev parent reply other threads:[~2005-06-03 14:34 UTC|newest] Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top 2005-06-01 1:55 [Bug java/21855] New: " tromey at gcc dot gnu dot org 2005-06-01 20:31 ` [Bug tree-optimization/21855] " pinskia at gcc dot gnu dot org 2005-06-03 14:08 ` dnovillo at gcc dot gnu dot org 2005-06-03 14:34 ` dnovillo at gcc dot gnu dot org [this message] 2005-06-04 17:00 ` dnovillo at gcc dot gnu dot org [not found] <bug-21855-360@http.gcc.gnu.org/bugzilla/> 2009-04-03 12:07 ` rguenth at gcc dot gnu dot org 2009-04-03 19:18 ` pinskia at gcc dot gnu dot org 2009-04-08 16:37 ` tromey at gcc dot gnu dot org 2009-04-08 20:33 ` rguenth at gcc dot gnu dot org 2009-04-23 16:15 ` aph at gcc dot gnu dot org 2009-04-23 16:17 ` paolo dot carlini at oracle dot com 2009-04-23 16:23 ` aph at gcc dot gnu dot org 2009-04-23 16:26 ` paolo dot carlini at oracle dot com 2010-07-15 22:43 ` steven at gcc dot gnu dot org [not found] <bug-21855-8172@http.gcc.gnu.org/bugzilla/> 2012-01-10 15:43 ` rguenth at gcc dot gnu.org 2012-01-10 15:53 ` aph at gcc dot gnu.org
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20050603143422.26069.qmail@sourceware.org \ --to=gcc-bugzilla@gcc.gnu.org \ --cc=java-prs@gcc.gnu.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).