/* { dg-do run } */ /* { dg-require-effective-target ultrasparc_vis2_hw } */ /* { dg-options "-mcpu=ultrasparc3 -O" } */ typedef unsigned int Vect __attribute__((vector_size(8))); extern void abort (void); Vect a, b, c, d; __attribute__((noinline, noclone)) void test (void) { Vect mask = { 2, 2 }; int i; c = __builtin_shuffle (a, mask); d = __builtin_shuffle (a, b, mask); __asm__ ("" : : "r" (&c), "r" (&d) : "memory"); for (i = 0; i < 2; ++i) if (c[i] != a[mask[i] & 1]) abort (); else if (mask[i] & 2) { if (d[i] != b[mask[i] & 1]) abort (); } } int main (void) { int i; for (i = 0; i < 2; ++i) { a[i] = i + 2; b[i] = 2 + i + 2; } test (); return 0; }