/* { dg-do run } */ | |
/* { dg-options "-O2" } */ | |
#define LENGTH 4 | |
void abort (void); | |
unsigned | |
__attribute__ ((noinline)) foo (unsigned char *buf, int n) | |
{ | |
unsigned sum = 0, i = 0; | |
do { | |
sum +=(buf)[n-1]; | |
/* Split the BB to test statements are correctly moved to | |
satisfy dependences. */ | |
if (n > LENGTH) | |
i++; | |
sum += buf[n-2]; | |
sum += buf[n-3]; | |
sum += buf[n-4]; | |
n = n-4; | |
} while (n > 0); | |
return sum + i; | |
} | |
unsigned char a[] = {1, 1, 1, 1}; | |
int main() { | |
int sum = foo (a, LENGTH); | |
if (sum != 4) | |
abort (); | |
return 0; | |
} |