1 // RUN: %libomp-compile-and-run | FileCheck %s --match-full-lines
2
3 #ifndef HEADER
4 #define HEADER
5
6 #include <stdlib.h>
7 #include <stdio.h>
8
9 // TODO: The OpenMP specification explicitly does not define when and how often
10 // expressions in the clause are evaluated. Currently Clang evaluates it again
11 // whenever needed, but function calls in clauses are not common. A better
12 // implementation would evaluate it just once and reuse the result.
tilesize(int i)13 static int tilesize(int i) {
14 printf("tilesize(%d)\n", i);
15 return 3;
16 }
17
main()18 int main() {
19 printf("do\n");
20 #pragma omp tile sizes(tilesize(1), tilesize(2))
21 for (int i = 7; i < 19; i += 3)
22 for (int j = 7; j < 20; j += 3)
23 printf("i=%d j=%d\n", i, j);
24 printf("done\n");
25 return EXIT_SUCCESS;
26 }
27
28 #endif /* HEADER */
29
30 // CHECK: do
31 // CHECK-NEXT: tilesize(1)
32 // CHECK-NEXT: tilesize(1)
33 // CHECK-NEXT: tilesize(1)
34 // CHECK-NEXT: tilesize(1)
35 // CHECK-NEXT: tilesize(2)
36 // CHECK-NEXT: tilesize(2)
37 // CHECK-NEXT: tilesize(2)
38 // CHECK-NEXT: tilesize(2)
39 // CHECK-NEXT: i=7 j=7
40 // CHECK-NEXT: tilesize(2)
41 // CHECK-NEXT: tilesize(2)
42 // CHECK-NEXT: tilesize(2)
43 // CHECK-NEXT: tilesize(2)
44 // CHECK-NEXT: i=7 j=10
45 // CHECK-NEXT: tilesize(2)
46 // CHECK-NEXT: tilesize(2)
47 // CHECK-NEXT: tilesize(2)
48 // CHECK-NEXT: tilesize(2)
49 // CHECK-NEXT: i=7 j=13
50 // CHECK-NEXT: tilesize(2)
51 // CHECK-NEXT: tilesize(2)
52 // CHECK-NEXT: tilesize(2)
53 // CHECK-NEXT: tilesize(2)
54 // CHECK-NEXT: tilesize(1)
55 // CHECK-NEXT: tilesize(1)
56 // CHECK-NEXT: tilesize(1)
57 // CHECK-NEXT: tilesize(1)
58 // CHECK-NEXT: tilesize(2)
59 // CHECK-NEXT: tilesize(2)
60 // CHECK-NEXT: tilesize(2)
61 // CHECK-NEXT: tilesize(2)
62 // CHECK-NEXT: i=10 j=7
63 // CHECK-NEXT: tilesize(2)
64 // CHECK-NEXT: tilesize(2)
65 // CHECK-NEXT: tilesize(2)
66 // CHECK-NEXT: tilesize(2)
67 // CHECK-NEXT: i=10 j=10
68 // CHECK-NEXT: tilesize(2)
69 // CHECK-NEXT: tilesize(2)
70 // CHECK-NEXT: tilesize(2)
71 // CHECK-NEXT: tilesize(2)
72 // CHECK-NEXT: i=10 j=13
73 // CHECK-NEXT: tilesize(2)
74 // CHECK-NEXT: tilesize(2)
75 // CHECK-NEXT: tilesize(2)
76 // CHECK-NEXT: tilesize(2)
77 // CHECK-NEXT: tilesize(1)
78 // CHECK-NEXT: tilesize(1)
79 // CHECK-NEXT: tilesize(1)
80 // CHECK-NEXT: tilesize(1)
81 // CHECK-NEXT: tilesize(2)
82 // CHECK-NEXT: tilesize(2)
83 // CHECK-NEXT: tilesize(2)
84 // CHECK-NEXT: tilesize(2)
85 // CHECK-NEXT: i=13 j=7
86 // CHECK-NEXT: tilesize(2)
87 // CHECK-NEXT: tilesize(2)
88 // CHECK-NEXT: tilesize(2)
89 // CHECK-NEXT: tilesize(2)
90 // CHECK-NEXT: i=13 j=10
91 // CHECK-NEXT: tilesize(2)
92 // CHECK-NEXT: tilesize(2)
93 // CHECK-NEXT: tilesize(2)
94 // CHECK-NEXT: tilesize(2)
95 // CHECK-NEXT: i=13 j=13
96 // CHECK-NEXT: tilesize(2)
97 // CHECK-NEXT: tilesize(2)
98 // CHECK-NEXT: tilesize(2)
99 // CHECK-NEXT: tilesize(2)
100 // CHECK-NEXT: tilesize(1)
101 // CHECK-NEXT: tilesize(1)
102 // CHECK-NEXT: tilesize(1)
103 // CHECK-NEXT: tilesize(1)
104 // CHECK-NEXT: tilesize(2)
105 // CHECK-NEXT: tilesize(2)
106 // CHECK-NEXT: tilesize(1)
107 // CHECK-NEXT: tilesize(1)
108 // CHECK-NEXT: tilesize(1)
109 // CHECK-NEXT: tilesize(1)
110 // CHECK-NEXT: tilesize(2)
111 // CHECK-NEXT: tilesize(2)
112 // CHECK-NEXT: i=7 j=16
113 // CHECK-NEXT: tilesize(2)
114 // CHECK-NEXT: tilesize(2)
115 // CHECK-NEXT: i=7 j=19
116 // CHECK-NEXT: tilesize(2)
117 // CHECK-NEXT: tilesize(2)
118 // CHECK-NEXT: tilesize(1)
119 // CHECK-NEXT: tilesize(1)
120 // CHECK-NEXT: tilesize(1)
121 // CHECK-NEXT: tilesize(1)
122 // CHECK-NEXT: tilesize(2)
123 // CHECK-NEXT: tilesize(2)
124 // CHECK-NEXT: i=10 j=16
125 // CHECK-NEXT: tilesize(2)
126 // CHECK-NEXT: tilesize(2)
127 // CHECK-NEXT: i=10 j=19
128 // CHECK-NEXT: tilesize(2)
129 // CHECK-NEXT: tilesize(2)
130 // CHECK-NEXT: tilesize(1)
131 // CHECK-NEXT: tilesize(1)
132 // CHECK-NEXT: tilesize(1)
133 // CHECK-NEXT: tilesize(1)
134 // CHECK-NEXT: tilesize(2)
135 // CHECK-NEXT: tilesize(2)
136 // CHECK-NEXT: i=13 j=16
137 // CHECK-NEXT: tilesize(2)
138 // CHECK-NEXT: tilesize(2)
139 // CHECK-NEXT: i=13 j=19
140 // CHECK-NEXT: tilesize(2)
141 // CHECK-NEXT: tilesize(2)
142 // CHECK-NEXT: tilesize(1)
143 // CHECK-NEXT: tilesize(1)
144 // CHECK-NEXT: tilesize(1)
145 // CHECK-NEXT: tilesize(1)
146 // CHECK-NEXT: tilesize(2)
147 // CHECK-NEXT: tilesize(2)
148 // CHECK-NEXT: tilesize(1)
149 // CHECK-NEXT: tilesize(1)
150 // CHECK-NEXT: tilesize(1)
151 // CHECK-NEXT: tilesize(1)
152 // CHECK-NEXT: tilesize(2)
153 // CHECK-NEXT: tilesize(2)
154 // CHECK-NEXT: tilesize(2)
155 // CHECK-NEXT: tilesize(2)
156 // CHECK-NEXT: i=16 j=7
157 // CHECK-NEXT: tilesize(2)
158 // CHECK-NEXT: tilesize(2)
159 // CHECK-NEXT: tilesize(2)
160 // CHECK-NEXT: tilesize(2)
161 // CHECK-NEXT: i=16 j=10
162 // CHECK-NEXT: tilesize(2)
163 // CHECK-NEXT: tilesize(2)
164 // CHECK-NEXT: tilesize(2)
165 // CHECK-NEXT: tilesize(2)
166 // CHECK-NEXT: i=16 j=13
167 // CHECK-NEXT: tilesize(2)
168 // CHECK-NEXT: tilesize(2)
169 // CHECK-NEXT: tilesize(2)
170 // CHECK-NEXT: tilesize(2)
171 // CHECK-NEXT: tilesize(1)
172 // CHECK-NEXT: tilesize(1)
173 // CHECK-NEXT: tilesize(2)
174 // CHECK-NEXT: tilesize(2)
175 // CHECK-NEXT: tilesize(1)
176 // CHECK-NEXT: tilesize(1)
177 // CHECK-NEXT: tilesize(2)
178 // CHECK-NEXT: tilesize(2)
179 // CHECK-NEXT: i=16 j=16
180 // CHECK-NEXT: tilesize(2)
181 // CHECK-NEXT: tilesize(2)
182 // CHECK-NEXT: i=16 j=19
183 // CHECK-NEXT: tilesize(2)
184 // CHECK-NEXT: tilesize(2)
185 // CHECK-NEXT: tilesize(1)
186 // CHECK-NEXT: tilesize(1)
187 // CHECK-NEXT: tilesize(2)
188 // CHECK-NEXT: tilesize(2)
189 // CHECK-NEXT: tilesize(1)
190 // CHECK-NEXT: tilesize(1)
191 // CHECK-NEXT: done