xref: /llvm-project/openmp/runtime/test/transform/reverse/parallel-wsloop-collapse-intfor.cpp (revision 80865c01e1b8d3a6bea308fda7bbc53047dcc2e7)
1 // RUN: %libomp-cxx-compile-and-run | FileCheck %s --match-full-lines
2 
3 #ifndef HEADER
4 #define HEADER
5 
6 #include <cstdlib>
7 #include <cstdio>
8 
9 int main() {
10   printf("do\n");
11 #pragma omp parallel for collapse(3) num_threads(1)
12   for (int i = 0; i < 3; ++i)
13 #pragma omp reverse
14     for (int j = 0; j < 3; ++j)
15       for (int k = 0; k < 3; ++k)
16         printf("i=%d j=%d k=%d\n", i, j, k);
17   printf("done\n");
18   return EXIT_SUCCESS;
19 }
20 
21 #endif /* HEADER */
22 
23 // CHECK:      do
24 // CHECK-NEXT: i=0 j=2 k=0
25 // CHECK-NEXT: i=0 j=2 k=1
26 // CHECK-NEXT: i=0 j=2 k=2
27 // CHECK-NEXT: i=0 j=1 k=0
28 // CHECK-NEXT: i=0 j=1 k=1
29 // CHECK-NEXT: i=0 j=1 k=2
30 // CHECK-NEXT: i=0 j=0 k=0
31 // CHECK-NEXT: i=0 j=0 k=1
32 // CHECK-NEXT: i=0 j=0 k=2
33 // CHECK-NEXT: i=1 j=2 k=0
34 // CHECK-NEXT: i=1 j=2 k=1
35 // CHECK-NEXT: i=1 j=2 k=2
36 // CHECK-NEXT: i=1 j=1 k=0
37 // CHECK-NEXT: i=1 j=1 k=1
38 // CHECK-NEXT: i=1 j=1 k=2
39 // CHECK-NEXT: i=1 j=0 k=0
40 // CHECK-NEXT: i=1 j=0 k=1
41 // CHECK-NEXT: i=1 j=0 k=2
42 // CHECK-NEXT: i=2 j=2 k=0
43 // CHECK-NEXT: i=2 j=2 k=1
44 // CHECK-NEXT: i=2 j=2 k=2
45 // CHECK-NEXT: i=2 j=1 k=0
46 // CHECK-NEXT: i=2 j=1 k=1
47 // CHECK-NEXT: i=2 j=1 k=2
48 // CHECK-NEXT: i=2 j=0 k=0
49 // CHECK-NEXT: i=2 j=0 k=1
50 // CHECK-NEXT: i=2 j=0 k=2
51 // CHECK-NEXT: done
52