1/* PR target/47564 */ 2/* { dg-do compile } */ 3/* { dg-options "-O2 -msse2 -std=gnu89" } */ 4 5static inline unsigned long long 6foo (const unsigned char *p) 7{ 8 return 1; 9} 10 11__attribute__ ((__target__ ("sse4"))) void 12bar (unsigned long long *x, const void *b, long long m) 13{ 14 const unsigned char *p = (const unsigned char *) b; 15 const unsigned char *e = p + m; 16 unsigned int l = *x; 17 unsigned long long n = l; 18 19 if ((e - p) >= 8192) 20 { 21 while ((e - p) >= 128) 22 { 23 n = __builtin_ia32_crc32di (n, foo (p)); 24 n = __builtin_ia32_crc32di (n, foo (p)); 25 n = __builtin_ia32_crc32di (n, foo (p)); 26 n = __builtin_ia32_crc32di (n, foo (p)); 27 n = __builtin_ia32_crc32di (n, foo (p)); 28 n = __builtin_ia32_crc32di (n, foo (p)); 29 n = __builtin_ia32_crc32di (n, foo (p)); 30 n = __builtin_ia32_crc32di (n, foo (p)); 31 n = __builtin_ia32_crc32di (n, foo (p)); 32 } 33 } 34 35 while ((e - p) >= 16) 36 { 37 n = __builtin_ia32_crc32di (n, foo (p)); 38 n = __builtin_ia32_crc32di (n, foo (p)); 39 } 40 l = n; 41 *x = l; 42} 43