1 /* PR target/69613.  */
2 /* { dg-do run { target int128 } } */
3 /* { dg-options "-w -Wno-psabi" } */
4 /* { dg-additional-options "-mavx" { target avx_runtime } } */
5 
6 typedef unsigned short u16;
7 typedef unsigned short v32u16 __attribute__ ((vector_size (32)));
8 typedef unsigned int u32;
9 typedef unsigned int v32u32 __attribute__ ((vector_size (32)));
10 typedef unsigned long long u64;
11 typedef unsigned long long v32u64 __attribute__ ((vector_size (32)));
12 typedef unsigned __int128 u128;
13 typedef unsigned __int128 v32u128 __attribute__ ((vector_size (32)));
14 
15 u128 __attribute__ ((noinline, noclone))
foo(u32 u32_0,u64 u64_1,u128 u128_1,v32u16 v32u16_0,v32u128 v32u128_0,v32u16 v32u16_1,v32u32 v32u32_1,v32u64 v32u64_1,v32u128 v32u128_1)16 foo (u32 u32_0, u64 u64_1, u128 u128_1, v32u16 v32u16_0, v32u128 v32u128_0,
17      v32u16 v32u16_1, v32u32 v32u32_1, v32u64 v32u64_1, v32u128 v32u128_1)
18 {
19   u128 temp = (v32u128_1[0] << ((-u32_0) & 127));
20   u32 t2 = (u32_0 & 127);
21   v32u128_1[0] = (v32u128_1[0] >> t2);
22 
23   v32u128_1[0] ^= temp;
24   v32u128_1 |= (v32u128){ v32u128_0[1] };
25 
26   return u64_1 + u128_1 + v32u16_0[0] + v32u16_0[1] + v32u16_1[11]
27 	 + v32u16_1[12] + v32u16_1[13] + v32u32_1[0] + v32u32_1[1]
28 	 + v32u32_1[2] + v32u64_1[1] + v32u64_1[2] + v32u64_1[3] + v32u128_1[0]
29 	 + v32u128_1[1];
30 }
31 
32 int
main()33 main ()
34 {
35   u128 x
36       = foo (1, 1, 1, (v32u16){ 1, 1, 1 }, (v32u128){ 1 }, (v32u16){ 1, 1, 1 },
37 	     (v32u32){ 1 }, (v32u64){ 1, 1, 1 }, (v32u128){ -1 });
38   if (x != 6)
39     __builtin_abort ();
40   return 0;
41 }
42