/* { dg-do run } */ | |
/* { dg-options "-O3 -fno-dce -fno-forward-propagate" } */ | |
void __attribute__ ((noinline, noclone)) | |
foo (int *a, int n) | |
{ | |
int *lasta = a + n; | |
for (; a != lasta; a++) | |
{ | |
*a *= 2; | |
a[1] = a[-1] + a[-2]; | |
} | |
} | |
int | |
main () | |
{ | |
int a[16] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 }; | |
int r[16] = { 1, 2, 6, 6, 16, 24, 44, 80, | |
136, 248, 432, 768, 1360, 2400, 4256, 3760 }; | |
unsigned i; | |
foo (&a[2], 13); | |
for (i = 0; i < 8; ++i) | |
if (a[i] != r[i]) | |
__builtin_abort (); | |
return 0; | |
} |