1  /* { dg-do run } */
       2  
       3  typedef long v4di __attribute__((vector_size(4 * sizeof (long))));
       4  typedef int v4si __attribute__((vector_size(4 * sizeof (int))));
       5  typedef int v8si __attribute__((vector_size(8 * sizeof (int))));
       6  
       7  v4si res[5], a, b;
       8  v4di resl, al, bl;
       9  v8si res8[3], a8, b8;
      10  void __attribute__((noipa))
      11  foo (void)
      12  {
      13    res[0] = __builtin_shufflevector (a, b, 0, 1, 4, 5);
      14    res[1] = __builtin_shufflevector (a, b, 0, 1, -1, 5);
      15    res8[0] = __builtin_shufflevector (a, b, 0, 1, 2, 2 + 1, 4, 5, 6, 7);
      16    res[2] = __builtin_shufflevector (a8, b8, 0, 8, 1, 9);
      17    res[3] = __builtin_shufflevector (a8, b, 0, 8, 1, 9);
      18    res[4] = __builtin_shufflevector (a, b8, 0, 4, 1, 5);
      19    res8[1] = __builtin_shufflevector (a8, b, 0, 8, 1, 9, 10, 11, 2, 3);
      20    res8[2] = __builtin_shufflevector (a, b8, 0, 4, 1, 5, -1, -1, -1, -1);
      21  }
      22  
      23  #define comp(a, b, n) \
      24    for (unsigned i = 0; i < n; ++i) \
      25      if ((a)[i] != (b)[i]) \
      26        __builtin_abort ();
      27  
      28  int main()
      29  {
      30    a = (v4si) { 0, 1, 2, 3 };
      31    b = (v4si) { 4, 5, 6, 7 };
      32    a8 = (v8si) { 0, 1, 2, 3, 4, 5, 6, 7 };
      33    b8 = (v8si) { 8, 9, 10, 11, 12, 13, 14, 15 };
      34    foo ();
      35    comp (res[0], ((v4si) { 0, 1, 4, 5}), 4)
      36    res[1][2] = 9;
      37    comp (res[1], ((v4si) { 0, 1, 9, 5}), 4)
      38    comp (res8[0], ((v8si) { 0, 1, 2, 3, 4, 5, 6, 7 }), 8)
      39    comp (res[2], ((v4si) { 0, 8, 1, 9}), 4)
      40    comp (res[3], ((v4si) { 0, 4, 1, 5}), 4)
      41    comp (res[4], ((v4si) { 0, 8, 1, 9}), 4)
      42    comp (res8[1], ((v8si) { 0, 4, 1, 5, 6, 7, 2, 3 }), 8)
      43    res8[2][4] = 42;
      44    res8[2][5] = 42;
      45    res8[2][6] = 42;
      46    res8[2][7] = 42;
      47    comp (res8[2], ((v8si) { 0, 8, 1, 9, 42, 42, 42, 42 }), 8)
      48    return 0;
      49  }