xref: /llvm-project/openmp/runtime/test/transform/interchange/parallel-wsloop-collapse-intfor.cpp (revision 5c93a94f5adaa304922a936842162cba91785211)
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(4) num_threads(1)
12   for (int i = 0; i < 3; ++i)
13 #pragma omp interchange
14     for (int j = 0; j < 3; ++j)
15       for (int k = 0; k < 3; ++k)
16         for (int l = 0; l < 3; ++l)
17           printf("i=%d j=%d k=%d l=%d\n", i, j, k, l);
18   printf("done\n");
19   return EXIT_SUCCESS;
20 }
21 
22 #endif /* HEADER */
23 
24 // CHECK:      do
25 // CHECK-NEXT: i=0 j=0 k=0 l=0
26 // CHECK-NEXT: i=0 j=0 k=0 l=1
27 // CHECK-NEXT: i=0 j=0 k=0 l=2
28 // CHECK-NEXT: i=0 j=1 k=0 l=0
29 // CHECK-NEXT: i=0 j=1 k=0 l=1
30 // CHECK-NEXT: i=0 j=1 k=0 l=2
31 // CHECK-NEXT: i=0 j=2 k=0 l=0
32 // CHECK-NEXT: i=0 j=2 k=0 l=1
33 // CHECK-NEXT: i=0 j=2 k=0 l=2
34 // CHECK-NEXT: i=0 j=0 k=1 l=0
35 // CHECK-NEXT: i=0 j=0 k=1 l=1
36 // CHECK-NEXT: i=0 j=0 k=1 l=2
37 // CHECK-NEXT: i=0 j=1 k=1 l=0
38 // CHECK-NEXT: i=0 j=1 k=1 l=1
39 // CHECK-NEXT: i=0 j=1 k=1 l=2
40 // CHECK-NEXT: i=0 j=2 k=1 l=0
41 // CHECK-NEXT: i=0 j=2 k=1 l=1
42 // CHECK-NEXT: i=0 j=2 k=1 l=2
43 // CHECK-NEXT: i=0 j=0 k=2 l=0
44 // CHECK-NEXT: i=0 j=0 k=2 l=1
45 // CHECK-NEXT: i=0 j=0 k=2 l=2
46 // CHECK-NEXT: i=0 j=1 k=2 l=0
47 // CHECK-NEXT: i=0 j=1 k=2 l=1
48 // CHECK-NEXT: i=0 j=1 k=2 l=2
49 // CHECK-NEXT: i=0 j=2 k=2 l=0
50 // CHECK-NEXT: i=0 j=2 k=2 l=1
51 // CHECK-NEXT: i=0 j=2 k=2 l=2
52 // CHECK-NEXT: i=1 j=0 k=0 l=0
53 // CHECK-NEXT: i=1 j=0 k=0 l=1
54 // CHECK-NEXT: i=1 j=0 k=0 l=2
55 // CHECK-NEXT: i=1 j=1 k=0 l=0
56 // CHECK-NEXT: i=1 j=1 k=0 l=1
57 // CHECK-NEXT: i=1 j=1 k=0 l=2
58 // CHECK-NEXT: i=1 j=2 k=0 l=0
59 // CHECK-NEXT: i=1 j=2 k=0 l=1
60 // CHECK-NEXT: i=1 j=2 k=0 l=2
61 // CHECK-NEXT: i=1 j=0 k=1 l=0
62 // CHECK-NEXT: i=1 j=0 k=1 l=1
63 // CHECK-NEXT: i=1 j=0 k=1 l=2
64 // CHECK-NEXT: i=1 j=1 k=1 l=0
65 // CHECK-NEXT: i=1 j=1 k=1 l=1
66 // CHECK-NEXT: i=1 j=1 k=1 l=2
67 // CHECK-NEXT: i=1 j=2 k=1 l=0
68 // CHECK-NEXT: i=1 j=2 k=1 l=1
69 // CHECK-NEXT: i=1 j=2 k=1 l=2
70 // CHECK-NEXT: i=1 j=0 k=2 l=0
71 // CHECK-NEXT: i=1 j=0 k=2 l=1
72 // CHECK-NEXT: i=1 j=0 k=2 l=2
73 // CHECK-NEXT: i=1 j=1 k=2 l=0
74 // CHECK-NEXT: i=1 j=1 k=2 l=1
75 // CHECK-NEXT: i=1 j=1 k=2 l=2
76 // CHECK-NEXT: i=1 j=2 k=2 l=0
77 // CHECK-NEXT: i=1 j=2 k=2 l=1
78 // CHECK-NEXT: i=1 j=2 k=2 l=2
79 // CHECK-NEXT: i=2 j=0 k=0 l=0
80 // CHECK-NEXT: i=2 j=0 k=0 l=1
81 // CHECK-NEXT: i=2 j=0 k=0 l=2
82 // CHECK-NEXT: i=2 j=1 k=0 l=0
83 // CHECK-NEXT: i=2 j=1 k=0 l=1
84 // CHECK-NEXT: i=2 j=1 k=0 l=2
85 // CHECK-NEXT: i=2 j=2 k=0 l=0
86 // CHECK-NEXT: i=2 j=2 k=0 l=1
87 // CHECK-NEXT: i=2 j=2 k=0 l=2
88 // CHECK-NEXT: i=2 j=0 k=1 l=0
89 // CHECK-NEXT: i=2 j=0 k=1 l=1
90 // CHECK-NEXT: i=2 j=0 k=1 l=2
91 // CHECK-NEXT: i=2 j=1 k=1 l=0
92 // CHECK-NEXT: i=2 j=1 k=1 l=1
93 // CHECK-NEXT: i=2 j=1 k=1 l=2
94 // CHECK-NEXT: i=2 j=2 k=1 l=0
95 // CHECK-NEXT: i=2 j=2 k=1 l=1
96 // CHECK-NEXT: i=2 j=2 k=1 l=2
97 // CHECK-NEXT: i=2 j=0 k=2 l=0
98 // CHECK-NEXT: i=2 j=0 k=2 l=1
99 // CHECK-NEXT: i=2 j=0 k=2 l=2
100 // CHECK-NEXT: i=2 j=1 k=2 l=0
101 // CHECK-NEXT: i=2 j=1 k=2 l=1
102 // CHECK-NEXT: i=2 j=1 k=2 l=2
103 // CHECK-NEXT: i=2 j=2 k=2 l=0
104 // CHECK-NEXT: i=2 j=2 k=2 l=1
105 // CHECK-NEXT: i=2 j=2 k=2 l=2
106 // CHECK-NEXT: done
107