xref: /llvm-project/openmp/runtime/test/transform/tile/parallel-wsloop-collapse-intfor.cpp (revision b0b6c16b470a7d5d9c63765058cca0ebe07ad57d)
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 
main()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 tile sizes(3, 3)
14     for (int j = 0; j < 4; ++j)
15       for (int k = 0; k < 5; ++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 
25 // Full tile
26 // CHECK-NEXT: i=0 j=0 k=0
27 // CHECK-NEXT: i=0 j=0 k=1
28 // CHECK-NEXT: i=0 j=0 k=2
29 // CHECK-NEXT: i=0 j=1 k=0
30 // CHECK-NEXT: i=0 j=1 k=1
31 // CHECK-NEXT: i=0 j=1 k=2
32 // CHECK-NEXT: i=0 j=2 k=0
33 // CHECK-NEXT: i=0 j=2 k=1
34 // CHECK-NEXT: i=0 j=2 k=2
35 
36 // Partial tile
37 // CHECK-NEXT: i=0 j=0 k=3
38 // CHECK-NEXT: i=0 j=0 k=4
39 // CHECK-NEXT: i=0 j=1 k=3
40 // CHECK-NEXT: i=0 j=1 k=4
41 // CHECK-NEXT: i=0 j=2 k=3
42 // CHECK-NEXT: i=0 j=2 k=4
43 
44 // Partial tile
45 // CHECK-NEXT: i=0 j=3 k=0
46 // CHECK-NEXT: i=0 j=3 k=1
47 // CHECK-NEXT: i=0 j=3 k=2
48 
49 // Partial tile
50 // CHECK-NEXT: i=0 j=3 k=3
51 // CHECK-NEXT: i=0 j=3 k=4
52 
53 // Full tile
54 // CHECK-NEXT: i=1 j=0 k=0
55 // CHECK-NEXT: i=1 j=0 k=1
56 // CHECK-NEXT: i=1 j=0 k=2
57 // CHECK-NEXT: i=1 j=1 k=0
58 // CHECK-NEXT: i=1 j=1 k=1
59 // CHECK-NEXT: i=1 j=1 k=2
60 // CHECK-NEXT: i=1 j=2 k=0
61 // CHECK-NEXT: i=1 j=2 k=1
62 // CHECK-NEXT: i=1 j=2 k=2
63 
64 // Partial tiles
65 // CHECK-NEXT: i=1 j=0 k=3
66 // CHECK-NEXT: i=1 j=0 k=4
67 // CHECK-NEXT: i=1 j=1 k=3
68 // CHECK-NEXT: i=1 j=1 k=4
69 // CHECK-NEXT: i=1 j=2 k=3
70 // CHECK-NEXT: i=1 j=2 k=4
71 // CHECK-NEXT: i=1 j=3 k=0
72 // CHECK-NEXT: i=1 j=3 k=1
73 // CHECK-NEXT: i=1 j=3 k=2
74 // CHECK-NEXT: i=1 j=3 k=3
75 // CHECK-NEXT: i=1 j=3 k=4
76 
77 // Full tile
78 // CHECK-NEXT: i=2 j=0 k=0
79 // CHECK-NEXT: i=2 j=0 k=1
80 // CHECK-NEXT: i=2 j=0 k=2
81 // CHECK-NEXT: i=2 j=1 k=0
82 // CHECK-NEXT: i=2 j=1 k=1
83 // CHECK-NEXT: i=2 j=1 k=2
84 // CHECK-NEXT: i=2 j=2 k=0
85 // CHECK-NEXT: i=2 j=2 k=1
86 // CHECK-NEXT: i=2 j=2 k=2
87 
88 // Partial tiles
89 // CHECK-NEXT: i=2 j=0 k=3
90 // CHECK-NEXT: i=2 j=0 k=4
91 // CHECK-NEXT: i=2 j=1 k=3
92 // CHECK-NEXT: i=2 j=1 k=4
93 // CHECK-NEXT: i=2 j=2 k=3
94 // CHECK-NEXT: i=2 j=2 k=4
95 // CHECK-NEXT: i=2 j=3 k=0
96 // CHECK-NEXT: i=2 j=3 k=1
97 // CHECK-NEXT: i=2 j=3 k=2
98 // CHECK-NEXT: i=2 j=3 k=3
99 // CHECK-NEXT: i=2 j=3 k=4
100 // CHECK-NEXT: done
101