xref: /llvm-project/openmp/runtime/test/tasking/omp_taskloop_taskwait.c (revision 5e111c5df8efde39c62d5e6906f590311782e30b)
1*5e111c5dSAndreyChurbanov // RUN: %libomp-compile-and-run
2*5e111c5dSAndreyChurbanov #include <stdio.h>
3*5e111c5dSAndreyChurbanov #include <omp.h>
main()4*5e111c5dSAndreyChurbanov int main()
5*5e111c5dSAndreyChurbanov {
6*5e111c5dSAndreyChurbanov   enum {ITERS = 500};
7*5e111c5dSAndreyChurbanov   enum {SIZE = 5};
8*5e111c5dSAndreyChurbanov   int err = 0;
9*5e111c5dSAndreyChurbanov   #pragma omp parallel num_threads(2) reduction(+:err)
10*5e111c5dSAndreyChurbanov   {
11*5e111c5dSAndreyChurbanov     int r = 0;
12*5e111c5dSAndreyChurbanov     int i;
13*5e111c5dSAndreyChurbanov     #pragma omp taskloop grainsize(SIZE) shared(r) nogroup
14*5e111c5dSAndreyChurbanov     for(i=0; i<ITERS; i++) {
15*5e111c5dSAndreyChurbanov       #pragma omp atomic
16*5e111c5dSAndreyChurbanov         ++r;
17*5e111c5dSAndreyChurbanov     }
18*5e111c5dSAndreyChurbanov     #pragma omp taskwait
19*5e111c5dSAndreyChurbanov     printf("%d\n", r);
20*5e111c5dSAndreyChurbanov     if (r != ITERS)
21*5e111c5dSAndreyChurbanov       err++;
22*5e111c5dSAndreyChurbanov   } // end of parallel
23*5e111c5dSAndreyChurbanov   if (err != 0) {
24*5e111c5dSAndreyChurbanov     printf("failed, err = %d\n", err);
25*5e111c5dSAndreyChurbanov     return 1;
26*5e111c5dSAndreyChurbanov   } else {
27*5e111c5dSAndreyChurbanov     printf("passed\n");
28*5e111c5dSAndreyChurbanov     return 0;
29*5e111c5dSAndreyChurbanov   }
30*5e111c5dSAndreyChurbanov }
31