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

Alan Lawrence <alan.lawrence at arm dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |alan.lawrence at arm dot com

--- Comment #8 from Alan Lawrence <alan.lawrence at arm dot com> ---
Passing a vector of one double as argument also ICE'd prior to this patch, so
no worries there. Likewise passing such a vector in as varargs.

Regarding struct layout:

*IIUC, gcc generally lays out structs in memory according to the sizes of the
data members, which hasn't changed.

*The AAPCS64 does not mention gcc vector extensions explicitly, only the
architectural concept of short vectors, but if we consider gcc vector
extensions as mapping to these short vectors (as they have done) - then there
is no dependency on gcc's concept of "mode".

*I've verified this with some by-hand testcases, using
typedef double gcc_vector_f64x1 __attribute__ ((__vector_size__ ((8))));
passing and returning by value
    *a small struct of a single gcc_vector_f64x1
    *a small struct of a char and a gcc_vector_f64x1
    *a struct of four gcc_vector_f64x1's (classed as a Homogenous Vector
Aggregate)
....all passed in registers, and
    *a large struct (of over 16 bytes, containing char, gcc_vector_f64x1, char,
gcc_vector_f64x2)
...written to memory and passing a pointer. Also explicitly passing pointers to
structs in memory. In all cases the layout (in registers/memory) is the same
regardless of whether we have V1DFmode or the gcc_vector_f64x1 is just assigned
BLKmode. (FWIW code generation is usually, tho not in all cases, better with
V1DFmode.)

Do you believe the ABI has changed, or are you merely concerned that it may
have? Whilst I can never claim my checks have been exhaustive, at this point I
don't see reason for concern.

Reply via email to