LLVM OpenMP 20.0.0git
intfor.c
Go to the documentation of this file.
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.
13static int tilesize(int i) {
14 printf("tilesize(%d)\n", i);
15 return 3;
16}
17
18int 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
int main()
Definition: intfor.c:9
#define i
Definition: kmp_stub.cpp:87
int tilesize
Definition: negtile_intfor.c:9