comparison gcc/testsuite/c-c++-common/cilk-plus/CK/fib_no_return.c @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children
comparison
equal deleted inserted replaced
68:561a7518be6b 111:04ced10e8804
1 /* { dg-do run } */
2 /* { dg-require-effective-target cilkplus_runtime } */
3 /* { dg-options "-fcilkplus" } */
4
5 #if HAVE_IO
6 #include <stdio.h>
7 #endif
8
9 #define FIB_ITERATION 30
10
11 void fib (int *, int);
12 int fib_serial (int);
13
14 int main(void)
15 {
16 int ii = 0, error = 0;
17 int fib_result[FIB_ITERATION+1], fib_serial_result[FIB_ITERATION+1];
18
19 #if HAVE_IO
20 for (ii = 0; ii <= FIB_ITERATION; ii++)
21 {
22 int result = 0;
23 fib (&result, ii);
24 printf("fib (%2d) = %10d\n", ii, result);
25 }
26 #else
27 for (ii = 0; ii <= FIB_ITERATION; ii++)
28 {
29 fib (&fib_result[ii], ii);
30 }
31
32 fib_serial_result[0] = 0;
33 fib_serial_result[1] = 1;
34
35 for (ii = 2; ii <= FIB_ITERATION; ii++)
36 fib_serial_result[ii] = fib_serial_result[ii-1] + fib_serial_result[ii-2];
37
38 for (ii = 0; ii <= FIB_ITERATION; ii++)
39 {
40 if (fib_result[ii] != fib_serial_result[ii])
41 __builtin_abort ();
42 }
43 #endif
44
45 return 0;
46 }
47
48 int fib_serial (int n)
49 {
50 int x = 0, y = 0;
51 if (n < 2)
52 return n;
53 else
54 {
55 x = fib_serial (n-1);
56 y = fib_serial (n-2);
57 return (x+y);
58 }
59 }
60
61 void fib(int *result, int n)
62 {
63 int x = 0, y = 0;
64 if (n < 2)
65 x = n;
66 else
67 {
68 _Cilk_spawn fib(&x, n-1);
69 fib(&y, n-2);
70 _Cilk_sync;
71 }
72 *result = (x+y);
73 }