/* { dg-do run } */ typedef long v4di __attribute__((vector_size(4 * sizeof (long)))); typedef int v4si __attribute__((vector_size(4 * sizeof (int)))); typedef int v8si __attribute__((vector_size(8 * sizeof (int)))); v4si res[5], a, b; v4di resl, al, bl; v8si res8[3], a8, b8; void __attribute__((noipa)) foo (void) { res[0] = __builtin_shufflevector (a, b, 0, 1, 4, 5); res[1] = __builtin_shufflevector (a, b, 0, 1, -1, 5); res8[0] = __builtin_shufflevector (a, b, 0, 1, 2, 2 + 1, 4, 5, 6, 7); res[2] = __builtin_shufflevector (a8, b8, 0, 8, 1, 9); res[3] = __builtin_shufflevector (a8, b, 0, 8, 1, 9); res[4] = __builtin_shufflevector (a, b8, 0, 4, 1, 5); res8[1] = __builtin_shufflevector (a8, b, 0, 8, 1, 9, 10, 11, 2, 3); res8[2] = __builtin_shufflevector (a, b8, 0, 4, 1, 5, -1, -1, -1, -1); } #define comp(a, b, n) \ for (unsigned i = 0; i < n; ++i) \ if ((a)[i] != (b)[i]) \ __builtin_abort (); int main() { a = (v4si) { 0, 1, 2, 3 }; b = (v4si) { 4, 5, 6, 7 }; a8 = (v8si) { 0, 1, 2, 3, 4, 5, 6, 7 }; b8 = (v8si) { 8, 9, 10, 11, 12, 13, 14, 15 }; foo (); comp (res[0], ((v4si) { 0, 1, 4, 5}), 4) res[1][2] = 9; comp (res[1], ((v4si) { 0, 1, 9, 5}), 4) comp (res8[0], ((v8si) { 0, 1, 2, 3, 4, 5, 6, 7 }), 8) comp (res[2], ((v4si) { 0, 8, 1, 9}), 4) comp (res[3], ((v4si) { 0, 4, 1, 5}), 4) comp (res[4], ((v4si) { 0, 8, 1, 9}), 4) comp (res8[1], ((v8si) { 0, 4, 1, 5, 6, 7, 2, 3 }), 8) res8[2][4] = 42; res8[2][5] = 42; res8[2][6] = 42; res8[2][7] = 42; comp (res8[2], ((v8si) { 0, 8, 1, 9, 42, 42, 42, 42 }), 8) return 0; }