1 /* { dg-do run } */ 2 /* { dg-options "-O2 -funroll-loops --param max-unroll-times=8 -fpredictive-commoning -fdump-tree-pcom-details -fno-tree-pre" } */ 3 4 void abort (void); 5 6 long int fib[1000]; 7 8 __attribute__ ((noinline)) count_fib(void)9void count_fib(void) 10 { 11 int i; 12 13 fib[0] = 0; 14 fib[1] = 1; 15 for (i = 2; i < 1000; i++) 16 fib[i] = (fib[i-1] + fib[i - 2]) & 0xffff; 17 } 18 19 int avg[1000]; 20 21 __attribute__ ((noinline)) count_averages(void)22void count_averages(void) 23 { 24 int i; 25 26 for (i = 1; i < 999; i++) 27 avg[i] = ((fib[i - 1] + fib[i] + fib[i + 1]) / 3) & 0xffff; 28 } 29 main(void)30int main(void) 31 { 32 count_fib (); 33 count_averages (); 34 35 if (fib[19] != 4181 || avg[19] != 4510) 36 abort (); 37 38 if (fib[999] != 162 || avg[998] != 21953) 39 abort (); 40 41 return 0; 42 } 43 44 /* Verify that both loops were transformed and unrolled. */ 45 /* { dg-final { scan-tree-dump-times "Unrolling 2 times." 2 "pcom"} } */ 46