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?