public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Alan Modra <amodra@gmail.com>
To: Jakub Jelinek <jakub@redhat.com>
Cc: Edmar Wienskoski <edmarwjr@gmail.com>,
	gcc-patches@gcc.gnu.org,	David Edelsohn <dje.gcc@gmail.com>
Subject: Re: [PATCH] DATA_ALIGNMENT vs. DATA_ABI_ALIGNMENT (PR target/56564)
Date: Fri, 14 Jun 2013 14:57:00 -0000	[thread overview]
Message-ID: <20130614145725.GM21523@bubble.grove.modra.org> (raw)
In-Reply-To: <20130614105440.GJ2336@tucnak.redhat.com>

On Fri, Jun 14, 2013 at 12:54:40PM +0200, Jakub Jelinek wrote:
> On Fri, Jun 14, 2013 at 08:12:02PM +0930, Alan Modra wrote:
> > I see your point, but for there to be a real problem we'd need
> > a) A library exporting such a type with (supposed) increased
> >    alignment, and,
> > b) gcc would need to make use of the increased alignment.
> > 
> > (a) must be rare or non-existent or you'd think we would have had a
> > bug report about lack of user alignment in vector typedefs.  The code
> > has been like this since 2001-11-07, so users have had a long time to
> > discover it.  (Of course, this is an argument for just ignoring the
> > bug too.)
> 
> It doesn't have to be an exported symbol from a library, it is enough to
> compile some objects using one compiler and other objects using another
> compiler, then link into the same library.

OK.

> Try (long) &x & 31; ?  That &x & -32 not being optimized into &x
> is guess a missed optimization.

Huh, trust me to hit another bug. :)

> Consider if you put:
> typedef int vec_align __attribute__ ((vector_size(16), aligned(32)));
> vec_align x = { 0, 0, 0, 0 };
> into one TU and compile with gcc 4.8.1, then
> typedef int vec_align __attribute__ ((vector_size(16), aligned(32)));
> extern vec_align x;
> 
> long f1 (void)
> {
>   return (long) &x & 31;
> }
> in another TU and compile with gcc trunk after your patch.  I bet
> it will be optimized into return 0; by the trunk + your patch compiler,
> while the alignment will be actually just 16 byte.

Right.  Counterpoint is that gcc made exactly the same sort of error
across TUs and even in the same TU prior to my change.  eg.

typedef int vec_align __attribute__ ((vector_size(16), aligned(32)));
vec_align x = { 0, 0, 0, 0 };
long f1 (void) { return (long)&x & 31; }
int y __attribute__ ((vector_size(16), aligned(32))) = { 0, 0, 0, 0 };
long f2 (void) { return (long)&y & 31; }

compiles to

.L.f1:
        li 3,0
        blr
..
.L.f2:
        li 3,0
        blr
..
        .globl y
        .lcomm  y,16,32
        .type   y, @object
        .globl x
        .lcomm  x,16,16
        .type   x, @object
        .ident  "GCC: (GNU) 4.7.2 20120921 (Red Hat 4.7.2-2)"

My implementation of rs6000_data_alignment therefore doesn't introduce
a *new* ABI incompatibility.  I question whether it is worth
complicating rs6000_data_alignment, especially since your suggestion
of using the older buggy alignment in DATA_ABI_ALIGNMENT then
increasing in DATA_ALIGNMENT isn't as simple as it sounds.  We're
not talking about some fixed increase in DATA_ALIGNMENT but what we
want is the value of alignment before DATA_ABI_ALIGNMENT.  Perhaps
that could be retrieved from TYPE_ALIGN (type) and
MAX_OFILE_ALIGNMENT, but that would make our DATA_ALIGNMENT the only
target to need such tricks.

-- 
Alan Modra
Australia Development Lab, IBM

  reply	other threads:[~2013-06-14 14:57 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-06-07 19:26 Jakub Jelinek
2013-06-07 20:43 ` Richard Henderson
2013-06-07 21:14   ` Jakub Jelinek
2013-06-08 15:13     ` Jakub Jelinek
2013-06-10 14:52     ` Richard Henderson
2013-06-10 15:45       ` Jakub Jelinek
2013-06-10 19:44         ` David Edelsohn
2013-06-11  0:44         ` DJ Delorie
2013-06-11  6:06           ` Jakub Jelinek
2013-06-11 15:20             ` DJ Delorie
2013-06-07 22:56   ` Hans-Peter Nilsson
2013-06-08 15:05     ` Jakub Jelinek
2013-06-10 10:51   ` Bernd Schmidt
2013-06-10 10:56     ` Jakub Jelinek
2013-06-10 11:03       ` Bernd Schmidt
2013-06-10 11:52   ` Ulrich Weigand
2013-06-12 17:52   ` Edmar Wienskoski
2013-06-13  7:41     ` Alan Modra
2013-06-13 15:37       ` Alan Modra
2013-06-13 15:42         ` Jakub Jelinek
2013-06-13 22:48           ` Alan Modra
2013-06-14  9:00             ` Jakub Jelinek
2013-06-14 10:42               ` Alan Modra
2013-06-14 10:54                 ` Jakub Jelinek
2013-06-14 14:57                   ` Alan Modra [this message]
2013-06-17 23:37         ` David Edelsohn
     [not found] ` <0EFAB2BDD0F67E4FB6CCC8B9F87D75692B5204DB@IRSMSX101.ger.corp.intel.com>
2013-06-19  7:02   ` FW: " Igor Zamyatin
2013-06-19  7:05     ` Jakub Jelinek
2013-06-19  7:12 Igor Zamyatin
2013-06-19  7:22 ` Jakub Jelinek
2013-06-19  8:38   ` Richard Biener
2013-06-19  8:44     ` Jakub Jelinek
2013-06-19 16:32       ` Mike Stump
2013-06-19 16:25     ` Mike Stump
2013-06-19 19:27   ` Kirill Yukhin

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=20130614145725.GM21523@bubble.grove.modra.org \
    --to=amodra@gmail.com \
    --cc=dje.gcc@gmail.com \
    --cc=edmarwjr@gmail.com \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=jakub@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).