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