1 /* { dg-do run { target int128 } } */
2 /* { dg-additional-options "-fgcse-after-reload" } */
3 
4 typedef unsigned char u8;
5 typedef unsigned short u16;
6 typedef unsigned int u32;
7 typedef unsigned long long u64;
8 int a, b, c;
9 int
d(u16 e,u64 f)10 d (u16 e, u64 f)
11 {
12   b |= e;
13 #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
14   __builtin_memset (&f, e, 2);
15 #elif (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ \
16        || __BYTE_ORDER__ == __ORDER_PDP_ENDIAN__)
17   __builtin_memset ((char *) &f + sizeof (f) - 2, e, 2);
18 #else
19 #error "endian unknown?"
20 #endif
21   a = (u16) - e >= 2 ? : __builtin_popcountll (f);
22   return a + c;
23 }
24 
25 int
main(void)26 main (void)
27 {
28   __int128 x = d (~0, 0);
29   if (x != 16)
30     __builtin_abort ();
31   return 0;
32 }
33