aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/c-c++-common/cilk-plus/CK/spawnee_inline.c
blob: 233a371f140e6a54abf8b63c6f6f8a9a840352e7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
/* { dg-do run  { target { i?86-*-* x86_64-*-* } } } */
/* { dg-options "-fcilkplus -w" } */
/* { dg-additional-options "-lcilkrts" { target { i?86-*-* x86_64-*-* } } } */

#include <stdio.h>
#include <stdlib.h>
#define DEFAULT_VALUE "30"

int fib (char *n_char)
{
  int n;
  char n_char_minus_one[20], n_char_minus_two[20];
  if (n_char)
    n = atoi (n_char);
  else
    n = atoi(DEFAULT_VALUE);
  
  if (n < 2)
    return n;
  else
    {	   
      int x, y;
      sprintf (n_char_minus_one,"%d", n-1); 
      sprintf (n_char_minus_two,"%d", n-2); 
      x = _Cilk_spawn fib (n_char_minus_one);
      y = _Cilk_spawn fib (n_char_minus_two);
      _Cilk_sync;
      return (x+y);
    }
}

int fib_serial (int n)
{
  int x, y;
  if (n < 2)
    return n;
  else
    {
      x = fib_serial (n-1);
      y = fib_serial (n-2);
      return (x+y);
    }
  return 0;
}

int main2_parallel (int argc, char *argv[])
{
  int n, result_parallel = 0;

  if (argc == 2)
    {
      result_parallel = _Cilk_spawn fib (argv[1]);
      _Cilk_sync; 
    }
  else
    {
      result_parallel = _Cilk_spawn fib((char *)"30");
      _Cilk_sync; 
    }
  return result_parallel;
}

int main2_serial (int argc, char *argv[])
{
  int n, result_serial = 0;
  if (argc == 2) 
    result_serial = fib_serial (atoi (argv[1]));
  else
    result_serial = fib_serial (atoi (DEFAULT_VALUE));

  return result_serial;
}

int main (void)
{
  if (main2_serial (1, 0) != main2_parallel (1,0))
    return 1;
  return 0;
}