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

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 /* { dg-do run } */
kono
parents:
diff changeset
2 /* { dg-require-effective-target cilkplus_runtime } */
kono
parents:
diff changeset
3 /* { dg-options "-fcilkplus" } */
kono
parents:
diff changeset
4
kono
parents:
diff changeset
5 #ifdef __cplusplus
kono
parents:
diff changeset
6 extern "C" {
kono
parents:
diff changeset
7 #endif
kono
parents:
diff changeset
8
kono
parents:
diff changeset
9 extern int __cilkrts_set_param (const char *, const char *);
kono
parents:
diff changeset
10
kono
parents:
diff changeset
11 #ifdef __cplusplus
kono
parents:
diff changeset
12 }
kono
parents:
diff changeset
13 #endif
kono
parents:
diff changeset
14
kono
parents:
diff changeset
15
kono
parents:
diff changeset
16 void f0(volatile int *steal_flag)
kono
parents:
diff changeset
17 {
kono
parents:
diff changeset
18 int i = 0;
kono
parents:
diff changeset
19 /* Wait for steal_flag to be set */
kono
parents:
diff changeset
20 while (!*steal_flag)
kono
parents:
diff changeset
21 ;
kono
parents:
diff changeset
22 }
kono
parents:
diff changeset
23
kono
parents:
diff changeset
24 int f1()
kono
parents:
diff changeset
25 {
kono
parents:
diff changeset
26
kono
parents:
diff changeset
27 volatile int steal_flag = 0;
kono
parents:
diff changeset
28 _Cilk_spawn f0(&steal_flag);
kono
parents:
diff changeset
29 steal_flag = 1; // Indicate stolen
kono
parents:
diff changeset
30 _Cilk_sync;
kono
parents:
diff changeset
31 return 0;
kono
parents:
diff changeset
32 }
kono
parents:
diff changeset
33
kono
parents:
diff changeset
34 void f2(int q)
kono
parents:
diff changeset
35 {
kono
parents:
diff changeset
36 q = 5;
kono
parents:
diff changeset
37 }
kono
parents:
diff changeset
38
kono
parents:
diff changeset
39 void f3()
kono
parents:
diff changeset
40 {
kono
parents:
diff changeset
41 _Cilk_spawn f2(f1());
kono
parents:
diff changeset
42 }
kono
parents:
diff changeset
43
kono
parents:
diff changeset
44 int main()
kono
parents:
diff changeset
45 {
kono
parents:
diff changeset
46 /* Ensure more than one worker. */
kono
parents:
diff changeset
47 if (__cilkrts_set_param("nworkers", "2") != 0)
kono
parents:
diff changeset
48 __builtin_abort();
kono
parents:
diff changeset
49
kono
parents:
diff changeset
50 f3();
kono
parents:
diff changeset
51 return 0;
kono
parents:
diff changeset
52 }