public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug target/94452] New: I386 ABI: How to determine the alignment of struct or union determined when passes them on stack?
@ 2020-04-02  2:28 chen3.liu at intel dot com
  2020-04-02  8:12 ` [Bug target/94452] " rguenth at gcc dot gnu.org
                   ` (5 more replies)
  0 siblings, 6 replies; 7+ messages in thread
From: chen3.liu at intel dot com @ 2020-04-02  2:28 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94452

            Bug ID: 94452
           Summary: I386 ABI: How to determine the alignment of struct or
                    union determined when passes them on stack?
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: chen3.liu at intel dot com
  Target Milestone: ---

For example:

#include <immintrin.h>

typedef __attribute__((aligned(16))) int alignedint;
struct __attribute__((aligned(64))) X {
    int x;
//    __m128 y;
// alignedint y;
};

void g(int x, struct X);
_Static_assert(_Alignof(struct X) == 64);

struct X gx;

void f() {
    g(1, gx);
}

In this case, the gx  will align to 4 byte. If we uncomment either the __m128
or alignedint y, and  gcc aligns to 64 bytes.

The logic of gcc alignment we now think is as below: 

StackAlignmentForType(T):
1.      If T's alignment is < 16 bytes(any type, including struct and union),
return 4.
2.      If T is a struct/union/array type, then:
•       recursively calculate on each member's type ( ignores any
attribute((aligned(N))) directly on the fields of a struct, but not those that
appear on typedefs, or the underlying types ?).
•       If all of those calls return alignments < 16, then return 4.
3.      Otherwise, return the alignment of T.

Is this logic correct for gcc?  We want to make clang compatible with gcc.

Thanks.

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2020-04-02 11:56 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-02  2:28 [Bug target/94452] New: I386 ABI: How to determine the alignment of struct or union determined when passes them on stack? chen3.liu at intel dot com
2020-04-02  8:12 ` [Bug target/94452] " rguenth at gcc dot gnu.org
2020-04-02  8:26 ` chen3.liu at intel dot com
2020-04-02  8:50 ` chen3.liu at intel dot com
2020-04-02  9:09 ` [Bug target/94452] I386 ABI: How to determine the alignment arguments on the stack of struct or union for argument passing rguenth at gcc dot gnu.org
2020-04-02  9:18 ` chen3.liu at intel dot com
2020-04-02 11:56 ` hjl.tools at gmail dot com

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).