public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Richard Guenther <richard.guenther@gmail.com>
To: Jakub Jelinek <jakub@redhat.com>
Cc: Jeff Law <law@redhat.com>, gcc-patches@gcc.gnu.org
Subject: Re: [PATCH] Improve VEC_BASE
Date: Mon, 07 Nov 2011 23:25:00 -0000	[thread overview]
Message-ID: <CAFiYyc3N90CWZsQre972gzZg0b_nvsKXgkr4=J_fSvNystj4mA@mail.gmail.com> (raw)
In-Reply-To: <20111107212547.GO27375@tyan-ft48-01.lab.bos.redhat.com>

On Mon, Nov 7, 2011 at 10:25 PM, Jakub Jelinek <jakub@redhat.com> wrote:
> Hi!
>
> This patch attempts to optimize VEC_BASE if we know
> that offsetof of base is 0 (unless the compiler is doing something
> strange, it is true).
> It doesn't have a clear code size effect, some .text sections
> grew, supposedly because of more inlining, some .text sections shrunk.
>
> Bootstrapped/regtested on x86_64-linux and i686-linux.

I wonder why the compiler doesn't optimize this ... certainly it looks
backward to, in

<bb 2>:
  if (c_2(D) != 0B)
    goto <bb 3>;
  else
    goto <bb 4>;

<bb 3>:
  D.2948_3 = &c_2(D)->fld;
  goto <bb 5>;

<bb 4>:
  D.2948_4 = 0B;

<bb 5>:
  # D.2948_1 = PHI <D.2948_3(3), 0B(4)>
  return D.2948_1;

see that D.2948_4 is equal to D.2948_3 for c_2 == 0, so I'm not
sure which pass would be able to detect this (but the optimziation
opportunity would be on the PHI node, so maybe it should be
done in phiopt).

Would you open a bugreport for this please?

Ok.
Thanks,
Richard.

> 2011-11-07  Jakub Jelinek  <jakub@redhat.com>
>
>        * vec.h (VEC_BASE): If base is at offset 0 in the structure,
>        use &(P)->base even if P is NULL.
>
> --- gcc/vec.h.jj        2011-09-08 11:21:10.000000000 +0200
> +++ gcc/vec.h   2011-11-07 18:45:33.000000000 +0100
> @@ -549,7 +549,12 @@ typedef struct VEC(T,A)                                                      \
>  } VEC(T,A)
>
>  /* Convert to base type.  */
> +#if GCC_VERSION >= 4000
> +#define VEC_BASE(P) \
> +  ((offsetof (__typeof (*P), base) == 0 || (P)) ? &(P)->base : 0)
> +#else
>  #define VEC_BASE(P)  ((P) ? &(P)->base : 0)
> +#endif
>
>  /* Vector of integer-like object.  */
>  #define DEF_VEC_I(T)                                                     \
>
>        Jakub
>

  reply	other threads:[~2011-11-07 22:53 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-11-07 21:34 Jakub Jelinek
2011-11-07 23:25 ` Richard Guenther [this message]
2011-11-08  0:34   ` Jeff Law
2011-11-08 10:12     ` Richard Guenther
2011-11-08 10:29       ` Richard Guenther
2011-11-08 19:35       ` Jeff Law
2011-11-08 19:54   ` Jeff Law
2011-11-09  9:42     ` Richard Guenther
2011-11-11  8:27 ` Jeff Law
2011-11-11  9:42   ` Jakub Jelinek
2011-11-11 20:21     ` Jeff Law

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='CAFiYyc3N90CWZsQre972gzZg0b_nvsKXgkr4=J_fSvNystj4mA@mail.gmail.com' \
    --to=richard.guenther@gmail.com \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=jakub@redhat.com \
    --cc=law@redhat.com \
    /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: link
Be 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).