2013-11-05 Balaji V. Iyer <balaji.v.iyer@intel.com>
[official-gcc.git] / gcc / testsuite / c-c++-common / cilk-plus / CK / fib_no_return.c
blob47ebef52030c0cc725461aa3ea9e715b7fc1bcc3
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 void fib (int *, int);
12 int fib_serial (int);
14 int main(void)
16 int ii = 0, error = 0;
17 int fib_result[FIB_ITERATION+1], fib_serial_result[FIB_ITERATION+1];
19 #if HAVE_IO
20 for (ii = 0; ii <= FIB_ITERATION; ii++)
22 int result = 0;
23 fib (&result, ii);
24 printf("fib (%2d) = %10d\n", ii, result);
26 #else
27 for (ii = 0; ii <= FIB_ITERATION; ii++)
29 fib (&fib_result[ii], ii);
32 fib_serial_result[0] = 0;
33 fib_serial_result[1] = 1;
35 for (ii = 2; ii <= FIB_ITERATION; ii++)
36 fib_serial_result[ii] = fib_serial_result[ii-1] + fib_serial_result[ii-2];
38 for (ii = 0; ii <= FIB_ITERATION; ii++)
40 if (fib_result[ii] != fib_serial_result[ii])
41 __builtin_abort ();
43 #endif
45 return 0;
48 int fib_serial (int n)
50 int x = 0, y = 0;
51 if (n < 2)
52 return n;
53 else
55 x = fib_serial (n-1);
56 y = fib_serial (n-2);
57 return (x+y);
61 void fib(int *result, int n)
63 int x = 0, y = 0;
64 if (n < 2)
65 x = n;
66 else
68 _Cilk_spawn fib(&x, n-1);
69 fib(&y, n-2);
70 _Cilk_sync;
72 *result = (x+y);