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

--- Comment #5 from Oleg Endo <olegendo at gcc dot gnu.org> ---
(In reply to Oleg Endo from comment #3)
> Although this is an ABI issue, passing float vector by reference should not
> actually suffer from this problem, but it does:
> 
> typedef float v4sf __attribute__ ((vector_size (16)));
> 
> void test00 (v4sf& a, const v4sf& b)
> {
>   a += b; 
> }

The reason for that are missing various vec_* patterns, in particular
vec_extractv4sf, vec_setv4sf, movv4sf, etc.  If those are not specified
fallback options will be used by the RTL expansion, which loads/stores the
vectors as SImode subregs.

Adding vector arithmetic patterns such as addv4sf3 is not necessary, but might
simplify a thing or two.

Reply via email to