1  /* PR target/80846 */
       2  /* { dg-do compile { target int128 } } */
       3  /* { dg-options "-O2 -mavx -mno-avx2" } */
       4  
       5  typedef __int128 V __attribute__((vector_size (32)));
       6  typedef long long W __attribute__((vector_size (32)));
       7  typedef int X __attribute__((vector_size (16)));
       8  typedef __int128 Y __attribute__((vector_size (64)));
       9  typedef long long Z __attribute__((vector_size (64)));
      10  
      11  W f1 (__int128 x, __int128 y) { return (W) ((V) { x, y }); }
      12  __int128 f2 (W x) { return ((V)x)[0]; }
      13  __int128 f3 (W x) { return ((V)x)[1]; }
      14  W f4 (X x, X y) { union { X x; __int128 i; } u = { .x = x }, v = { .x = y }; return (W) ((V) { u.i, v.i }); }
      15  X f5 (W x) { return (X)(((V)x)[0]); }
      16  X f6 (W x) { return (X)(((V)x)[1]); }
      17  W f7 (void) { return (W) ((V) { 2, 3 }); }
      18  W f8 (X x) { union { X x; __int128 i; } u = { .x = x }; return (W) ((V) { u.i, 3 }); }
      19  W f9 (X x) { union { X x; __int128 i; } u = { .x = x }; return (W) ((V) { 2, u.i }); }
      20  W f10 (X x) { union { X x; __int128 i; } u = { .x = x }; return (W) ((V) { u.i, u.i }); }
      21  #ifdef __AVX512F__
      22  Z f11 (__int128 x, __int128 y, __int128 z, __int128 a) { return (Z) ((Y) { x, y, z, a }); }
      23  __int128 f12 (Z x) { return ((Y)x)[0]; }
      24  __int128 f13 (Z x) { return ((Y)x)[1]; }
      25  __int128 f14 (Z x) { return ((Y)x)[2]; }
      26  __int128 f15 (Z x) { return ((Y)x)[3]; }
      27  Z f16 (X x, X y, X z, X a) { union { X x; __int128 i; } u = { .x = x }, v = { .x = y }, w = { .x = z }, t = { .x = a };
      28    return (Z) ((Y) { u.i, v.i, w.i, t.i }); }
      29  X f17 (Z x) { return (X)(((Y)x)[0]); }
      30  X f18 (Z x) { return (X)(((Y)x)[1]); }
      31  X f19 (Z x) { return (X)(((Y)x)[2]); }
      32  X f20 (Z x) { return (X)(((Y)x)[3]); }
      33  Z f21 (void) { return (Z) ((Y) { 2, 3, 4, 5 }); }
      34  Z f22 (X x) { union { X x; __int128 i; } u = { .x = x }; return (Z) ((Y) { u.i, 3, 4, 5 }); }
      35  Z f23 (X x) { union { X x; __int128 i; } u = { .x = x }; return (Z) ((Y) { 2, u.i, 4, 5 }); }
      36  Z f24 (X x) { union { X x; __int128 i; } u = { .x = x }; return (Z) ((Y) { 2, 3, u.i, 5 }); }
      37  Z f25 (X x) { union { X x; __int128 i; } u = { .x = x }; return (Z) ((Y) { 2, 3, 4, u.i }); }
      38  Z f26 (X x) { union { X x; __int128 i; } u = { .x = x }; return (Z) ((Y) { u.i, u.i, u.i, u.i }); }
      39  #endif