1*404b540aSrobert /* Trivial test of ordered. */
2*404b540aSrobert
3*404b540aSrobert /* { dg-require-effective-target sync_int_long } */
4*404b540aSrobert
5*404b540aSrobert #include <omp.h>
6*404b540aSrobert #include <string.h>
7*404b540aSrobert #include <assert.h>
8*404b540aSrobert #include "libgomp_g.h"
9*404b540aSrobert
10*404b540aSrobert
11*404b540aSrobert #define N 100
12*404b540aSrobert static int next;
13*404b540aSrobert static int CHUNK, NTHR;
14*404b540aSrobert
clean_data(void)15*404b540aSrobert static void clean_data (void)
16*404b540aSrobert {
17*404b540aSrobert next = 0;
18*404b540aSrobert }
19*404b540aSrobert
set_data(long i)20*404b540aSrobert static void set_data (long i)
21*404b540aSrobert {
22*404b540aSrobert int n = __sync_fetch_and_add (&next, 1);
23*404b540aSrobert assert (n == i);
24*404b540aSrobert }
25*404b540aSrobert
26*404b540aSrobert
27*404b540aSrobert #define TMPL_1(sched) \
28*404b540aSrobert static void f_##sched##_1 (void *dummy) \
29*404b540aSrobert { \
30*404b540aSrobert long s0, e0, i; \
31*404b540aSrobert if (GOMP_loop_ordered_##sched##_start (0, N, 1, CHUNK, &s0, &e0)) \
32*404b540aSrobert do \
33*404b540aSrobert { \
34*404b540aSrobert for (i = s0; i < e0; ++i) \
35*404b540aSrobert { \
36*404b540aSrobert GOMP_ordered_start (); \
37*404b540aSrobert set_data (i); \
38*404b540aSrobert GOMP_ordered_end (); \
39*404b540aSrobert } \
40*404b540aSrobert } \
41*404b540aSrobert while (GOMP_loop_ordered_##sched##_next (&s0, &e0)); \
42*404b540aSrobert GOMP_loop_end (); \
43*404b540aSrobert } \
44*404b540aSrobert static void t_##sched##_1 (void) \
45*404b540aSrobert { \
46*404b540aSrobert clean_data (); \
47*404b540aSrobert GOMP_parallel_start (f_##sched##_1, NULL, NTHR); \
48*404b540aSrobert f_##sched##_1 (NULL); \
49*404b540aSrobert GOMP_parallel_end (); \
50*404b540aSrobert }
51*404b540aSrobert
52*404b540aSrobert TMPL_1(static)
TMPL_1(dynamic)53*404b540aSrobert TMPL_1(dynamic)
54*404b540aSrobert TMPL_1(guided)
55*404b540aSrobert
56*404b540aSrobert static void test (void)
57*404b540aSrobert {
58*404b540aSrobert t_static_1 ();
59*404b540aSrobert t_dynamic_1 ();
60*404b540aSrobert t_guided_1 ();
61*404b540aSrobert }
62*404b540aSrobert
main()63*404b540aSrobert int main()
64*404b540aSrobert {
65*404b540aSrobert omp_set_dynamic (0);
66*404b540aSrobert
67*404b540aSrobert NTHR = 4;
68*404b540aSrobert
69*404b540aSrobert CHUNK = 1;
70*404b540aSrobert test ();
71*404b540aSrobert
72*404b540aSrobert CHUNK = 5;
73*404b540aSrobert test ();
74*404b540aSrobert
75*404b540aSrobert CHUNK = 7;
76*404b540aSrobert test ();
77*404b540aSrobert
78*404b540aSrobert CHUNK = 0;
79*404b540aSrobert t_static_1 ();
80*404b540aSrobert
81*404b540aSrobert return 0;
82*404b540aSrobert }
83