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

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Target|x86_64                      |x86_64 aarch64

--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Here is another example, using 64/128 on aarch64:
```
#define vect64 __attribute__((vector_size(8) ))
#define vect128 __attribute__((vector_size(16) ))

vect128 unsigned int f(vect64 unsigned int a)
{
  vect64 unsigned int zero={0, 0};
  return __builtin_shufflevector (a, zero, 0, 1, 2, 3);
}
```

We get:
```
f:
        movi    v31.4s, 0
        fmov    d0, d0
        zip1    v0.2d, v0.2d, v31.2d
```

This should just produce the `fmov` for little-endian and `mov/ins` for
big-endian.

Note for this part of the issue the aarch64 back-end represents zip using
UNSPEC where it could use VEC_CONCAT instead. And it would do the correct thing
there ...

Reply via email to