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

--- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Note it is not just about constants either.
Take:
```
#define vect64 __attribute__((vector_size(8) ))
#define vect128 __attribute__((vector_size(16) ))

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

We get:
```
  _1 = {a_3(D), { 0, 0 }};
  _2 = {b_4(D), { 0, 0 }};
  _5 = VEC_PERM_EXPR <_1, _2, { 0, 1, 4, 5 }>;
```

Which obvious could be done to just:
`_5 = {a_3(D), b_4(D)};`

Reply via email to