xref: /llvm-project/openmp/runtime/test/worksharing/for/omp_nonmonotonic_nowait.c (revision abe64360ae133e9b07c0a39cc54d09bd5fcb86f9)
1 // RUN: %libomp-compile-and-run
2 
3 // The test checks nonmonotonic scheduling works correctly when threads
4 // may execute different loops concurrently.
5 
6 #include <stdio.h>
7 #include <omp.h>
8 
9 #define N 200
10 #define C 20
main()11 int main()
12 {
13   int i, l0 = 0, l1 = 0;
14   #pragma omp parallel num_threads(8)
15   {
16     #pragma omp for schedule(nonmonotonic:dynamic,C) nowait
17     for (i = 0; i < N; ++i) {
18       #pragma omp atomic
19         l0++;
20     }
21     #pragma omp for schedule(nonmonotonic:dynamic,C) nowait
22     for (i = 0; i < N * N; ++i) {
23       #pragma omp atomic
24         l1++;
25     }
26   }
27   if (l0 != N || l1 != N * N) {
28     printf("failed l0 = %d, l1 = %d, should be %d %d\n", l0, l1, N, N * N);
29     return 1;
30   } else {
31     printf("passed\n");
32     return 0;
33   }
34 }
35