1 /* { dg-do run } */
2 /* { dg-require-effective-target arm_arch_v7a_ok } */
3 /* { dg-options "-Os -w -fno-expensive-optimizations -fschedule-insns -mtpcs-leaf-frame -fira-algorithm=priority" } */
4 
5 
6 typedef unsigned short u16;
7 typedef unsigned short v16u16 __attribute__ ((vector_size (16)));
8 typedef unsigned int u32;
9 typedef unsigned int v16u32 __attribute__ ((vector_size (16)));
10 typedef unsigned long long u64;
11 typedef unsigned long long v16u64 __attribute__ ((vector_size (16)));
12 
13 u64 __attribute__ ((noinline, noclone))
foo(u16 u16_0,u32 u32_0,u64 u64_0,u16 u16_1,u32 u32_1,u64 u64_1,v16u16 v16u16_0,v16u32 v16u32_0,v16u64 v16u64_0,v16u16 v16u16_1,v16u32 v16u32_1,v16u64 v16u64_1)14 foo(u16 u16_0, u32 u32_0, u64 u64_0, u16 u16_1, u32 u32_1, u64 u64_1,
15     v16u16 v16u16_0, v16u32 v16u32_0, v16u64 v16u64_0, v16u16 v16u16_1, v16u32 v16u32_1, v16u64 v16u64_1)
16 {
17   v16u64_0 %= (v16u64){(u16) v16u16_0[5], ~v16u64_1[1]};
18   v16u64_0[1] = 1;
19   v16u32_1[3] >>= 31;
20   v16u64_1 ^= (v16u64){v16u16_1[4], u64_1};
21   v16u64_1[0] = (v16u64_1[0] >> 63) | (v16u64_1[0] << 1);
22   u16_0 -= 1;
23   v16u32_1 %= (v16u32)-v16u64_0 | 1;
24   v16u16_0 /= (v16u16){-u64_1} | 1;
25   v16u32_0[2] |= (u16)~u16_1;
26     return u16_0 + u64_0 + u32_1 + u64_1 +
27                 v16u16_0[0] + v16u16_0[1] + v16u16_0[2] + v16u16_0[3] + v16u16_0[4] + v16u16_0[5] + v16u16_0[6] + v16u32_0[2] + v16u32_0[3] + v16u64_0[0] +
28       v16u16_1[2] + v16u16_1[4] + v16u32_1[0] + v16u32_1[1] + v16u32_1[2] + v16u32_1[3] + v16u64_1[0] + v16u64_1[1];
29 }
30 
31 int
main()32 main ()
33 {
34   u64 x = foo(0, 0, 1, 0, 0, 1, (v16u16){-1, 0, 0, 0, 0, 1}, (v16u32){0}, (v16u64){0}, (v16u16){0}, (v16u32){0}, (v16u64){0x67784fdb22, 1});
35   __builtin_printf ("%016llx\n", (unsigned long long) (x >> 0));
36   if (x != 0x000000cef0a1b646)
37     __builtin_abort();
38   return 0;
39 }
40