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

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Target|                            |x86_64-*-*, i?86-*-*
          Component|other                       |c++
           Severity|normal                      |enhancement

--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
Note this will need target adjustments unless we go the
targetm.split_complex_arg
way of this (which is esp. ugly and should have been done in the regular ABI
handling way).

The other possibility would be of course to have the FEs handle this
attribute by adjusting calls and prototypes to this argument passing
convention accordingly.

Please specify how that attribute would work semantically and how you'd
name it and where you'd use it?  Sth like

struct X1 { V a, b; } __attribute__((pass_by_value_as_two_vector_args));

struct X2 { V a, b; int x } __attribute__((pass_by_value_as_two_vector_args));
// invalid

?  Or more general

struct X { ... } __attribute__((pass_by_value_as_pieces));

where individual fields are passed instead of the aggregate?  Does that
then mean individual copy-ctors need to be available for the members for
example?

Reply via email to