1 /* PR target/69549 */
2 /* { dg-do run { target sse2_runtime } } */
3 /* { dg-options "-O2 -msse2" } */
4 
5 typedef unsigned char u8;
6 typedef unsigned short u16;
7 typedef unsigned int u32;
8 typedef unsigned long long u64;
9 typedef unsigned char v16u8 __attribute__ ((vector_size (16)));
10 typedef unsigned short v16u16 __attribute__ ((vector_size (16)));
11 typedef unsigned int v16u32 __attribute__ ((vector_size (16)));
12 typedef unsigned long long v16u64 __attribute__ ((vector_size (16)));
13 
14 u64 __attribute__((noinline, noclone))
foo(u8 u8_0,u16 u16_3,v16u8 v16u8_0,v16u16 v16u16_0,v16u32 v16u32_0,v16u64 v16u64_0,v16u8 v16u8_1,v16u16 v16u16_1,v16u32 v16u32_1,v16u64 v16u64_1,v16u8 v16u8_2,v16u16 v16u16_2,v16u32 v16u32_2,v16u64 v16u64_2,v16u8 v16u8_3,v16u16 v16u16_3,v16u32 v16u32_3,v16u64 v16u64_3)15 foo (u8 u8_0, u16 u16_3, v16u8 v16u8_0, v16u16 v16u16_0, v16u32 v16u32_0, v16u64 v16u64_0, v16u8 v16u8_1, v16u16 v16u16_1, v16u32 v16u32_1, v16u64 v16u64_1, v16u8 v16u8_2, v16u16 v16u16_2, v16u32 v16u32_2, v16u64 v16u64_2, v16u8 v16u8_3, v16u16 v16u16_3, v16u32 v16u32_3, v16u64 v16u64_3)
16 {
17   v16u64_0 /= (v16u64){u16_3, ((0))} | 1;
18   v16u64_1 += (v16u64)~v16u32_0;
19   v16u16_1 /= (v16u16){-v16u64_3[1]} | 1;
20   v16u64_3[1] -= 0x1fffffff;
21   v16u32_2 /= (v16u32)-v16u64_0 | 1;
22   v16u32_1 += ~v16u32_1;
23   v16u16_3 %= (v16u16){0xfff, v16u32_2[3], v16u8_0[14]} | 1;
24   v16u64_3 -= (v16u64)v16u32_2;
25   if (v16u64_1[1] >= 1) {
26     v16u64_0 %= (v16u64){v16u32_0[1]} | 1;
27     v16u32_1[1] %= 0x5fb856;
28     v16u64_1 |= -v16u64_0;
29   }
30   v16u8_0 *= (v16u8)v16u32_1;
31   return u8_0 + v16u8_0 [12] + v16u8_0 [13] + v16u8_0 [14] + v16u8_0 [15] + v16u16_0 [0] + v16u16_0 [1] + v16u32_0 [0] + v16u32_0 [1] + v16u32_0 [2] + v16u32_0 [3] + v16u64_0 [0] + v16u64_0 [1] + v16u8_1 [9] + v16u8_1 [10] + v16u8_1 [11] + v16u8_1 [15] + v16u16_1 [0] + v16u16_1 [1] + v16u16_1 [3] + v16u64_1 [0] + v16u64_1 [1] + v16u8_2 [3] + v16u8_2 [4] + v16u8_2 [5] + v16u8_2 [0] + v16u32_2 [1] + v16u32_2 [2] + v16u32_2 [3] + v16u64_2 [0] + v16u64_2 [1] + v16u8_3 [0] + v16u16_3 [6] + v16u16_3[7] + v16u32_3[1] + v16u32_3[2] + v16u64_3[0] + v16u64_3[1];
32 }
33 
34 int
main()35 main ()
36 {
37   u64 x = foo(1, 1, (v16u8){1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, (v16u16){1, 1}, (v16u32){1}, (v16u64){1}, (v16u8){1}, (v16u16){1, 1}, (v16u32){1}, (v16u64){1}, (v16u8){1, 1, 1, 1, 1}, (v16u16){1}, (v16u32){1}, (v16u64){1}, (v16u8){1}, (v16u16){1}, (v16u32){1}, (v16u64){1});
38 
39   if (x != 0xffffffffe0000209)
40     __builtin_abort();
41   return 0;
42 }
43