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 
f1(__int128 x,__int128 y)11 W f1 (__int128 x, __int128 y) { return (W) ((V) { x, y }); }
f2(W x)12 __int128 f2 (W x) { return ((V)x)[0]; }
f3(W x)13 __int128 f3 (W x) { return ((V)x)[1]; }
f4(X x,X y)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 }); }
f5(W x)15 X f5 (W x) { return (X)(((V)x)[0]); }
f6(W x)16 X f6 (W x) { return (X)(((V)x)[1]); }
f7(void)17 W f7 (void) { return (W) ((V) { 2, 3 }); }
f8(X x)18 W f8 (X x) { union { X x; __int128 i; } u = { .x = x }; return (W) ((V) { u.i, 3 }); }
f9(X x)19 W f9 (X x) { union { X x; __int128 i; } u = { .x = x }; return (W) ((V) { 2, u.i }); }
f10(X x)20 W f10 (X x) { union { X x; __int128 i; } u = { .x = x }; return (W) ((V) { u.i, u.i }); }
21 #ifdef __AVX512F__
f11(__int128 x,__int128 y,__int128 z,__int128 a)22 Z f11 (__int128 x, __int128 y, __int128 z, __int128 a) { return (Z) ((Y) { x, y, z, a }); }
f12(Z x)23 __int128 f12 (Z x) { return ((Y)x)[0]; }
f13(Z x)24 __int128 f13 (Z x) { return ((Y)x)[1]; }
f14(Z x)25 __int128 f14 (Z x) { return ((Y)x)[2]; }
f15(Z x)26 __int128 f15 (Z x) { return ((Y)x)[3]; }
f16(X x,X y,X z,X a)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 }); }
f17(Z x)29 X f17 (Z x) { return (X)(((Y)x)[0]); }
f18(Z x)30 X f18 (Z x) { return (X)(((Y)x)[1]); }
f19(Z x)31 X f19 (Z x) { return (X)(((Y)x)[2]); }
f20(Z x)32 X f20 (Z x) { return (X)(((Y)x)[3]); }
f21(void)33 Z f21 (void) { return (Z) ((Y) { 2, 3, 4, 5 }); }
f22(X x)34 Z f22 (X x) { union { X x; __int128 i; } u = { .x = x }; return (Z) ((Y) { u.i, 3, 4, 5 }); }
f23(X x)35 Z f23 (X x) { union { X x; __int128 i; } u = { .x = x }; return (Z) ((Y) { 2, u.i, 4, 5 }); }
f24(X x)36 Z f24 (X x) { union { X x; __int128 i; } u = { .x = x }; return (Z) ((Y) { 2, 3, u.i, 5 }); }
f25(X x)37 Z f25 (X x) { union { X x; __int128 i; } u = { .x = x }; return (Z) ((Y) { 2, 3, 4, u.i }); }
f26(X x)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
40