2013-11-05 Balaji V. Iyer <balaji.v.iyer@intel.com>
[official-gcc.git] / gcc / testsuite / c-c++-common / cilk-plus / CK / fib_no_sync.c
bloba23051d48199f4e373245c9ebf3aed287aa02512
1 /* { dg-options "-fcilkplus" } */
2 /* { dg-do run { target i?86-*-* x86_64-*-* } } */
3 /* { dg-options "-fcilkplus -lcilkrts" { target { i?86-*-* x86_64-*-* } } } */
5 #if HAVE_IO
6 #include <stdio.h>
7 #endif
9 #define FIB_ITERATION 30
11 int fib (int);
12 int fib_serial (int);
14 int main(void)
16 int ii = 0;
17 int fib_result[FIB_ITERATION+1], fib_serial_result[FIB_ITERATION+1];
18 #if HAVE_IO
20 for (ii = 0; ii <= FIB_ITERATION; ii++)
21 printf("fib (%2d) = %10d\n", ii, fib (ii));
22 #else
23 for (ii = 0; ii <= FIB_ITERATION; ii++)
25 fib_result[ii] = fib (ii);
28 fib_serial_result[0] = 0;
29 fib_serial_result[1] = 1;
31 for (ii = 2; ii <= FIB_ITERATION; ii++)
32 fib_serial_result[ii] = fib_serial_result[ii-1] + fib_serial_result[ii-2];
34 for (ii = 0; ii <= FIB_ITERATION; ii++)
36 if (fib_result[ii] != fib_serial_result[ii])
37 __builtin_abort ();
40 #endif
41 return 0;
44 int fib_serial (int n)
46 int x = 0, y = 0;
47 if (n < 2)
48 return n;
49 else
51 x = fib_serial (n-1);
52 y = fib_serial (n-2);
53 return (x+y);
57 int fib(int n)
59 if (n < 2)
60 return n;
61 else
63 int x = _Cilk_spawn fib(n-1);
64 int y = fib(n-2);
65 return (x+y);