1 /* PR middle-end/69909 */
2 /* { dg-do run { target int128 } } */
3 /* { dg-additional-options "-w" } */
4 
5 typedef unsigned V __attribute__ ((vector_size (32)));
6 typedef __int128 T;
7 typedef __int128 U __attribute__ ((vector_size (32)));
8 
9 __attribute__((noinline, noclone)) T
foo(T a,V b,V c,V d,V e,U f)10 foo (T a, V b, V c, V d, V e, U f)
11 {
12   d[6] ^= 0x10;
13   f -= (U) d;
14   f[1] |= f[1] << (a & 127);
15   c ^= d;
16   return b[7] + c[2] + c[2] + d[6] + e[2] + f[1];
17 }
18 
19 int
main()20 main ()
21 {
22   if (__CHAR_BIT__ != 8 || sizeof (unsigned) != 4 || sizeof (T) != 16)
23     return 0;
24 
25   T x = foo (1, (V) { 9, 2, 5, 8, 1, 2, 9, 3 },
26 		(V) { 1, 2, 3, 4, 5, 6, 7, 8 },
27 		(V) { 4, 1, 2, 9, 8, 3, 5, 2 },
28 		(V) { 3, 6, 1, 3, 2, 9, 4, 8 }, (U) { 3, 5 });
29   if (((unsigned long long) (x >> 64) != 0xffffffffffffffffULL
30        || (unsigned long long) x != 0xfffffffe0000001aULL)
31       && ((unsigned long long) (x >> 64) != 0xfffffffffffffffdULL
32 	  || (unsigned long long) x != 0xffffffff00000022ULL))
33     __builtin_abort ();
34   return 0;
35 }
36