xref: /aosp_15_r20/external/clang/test/OpenMP/schedule_codegen.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -fopenmp -x c++ -triple x86_64-unknown-unknown -emit-llvm -fexceptions -fcxx-exceptions -o - %s | FileCheck %s
2*67e74705SXin Li 
main()3*67e74705SXin Li int main() {
4*67e74705SXin Li // CHECK: @__kmpc_for_static_init
5*67e74705SXin Li // CHECK-NOT: !llvm.mem.parallel_loop_access
6*67e74705SXin Li // CHECK: @__kmpc_for_static_fini
7*67e74705SXin Li #pragma omp for
8*67e74705SXin Li   for(int i = 0; i < 10; ++i);
9*67e74705SXin Li // CHECK: @__kmpc_for_static_init
10*67e74705SXin Li // CHECK-NOT: !llvm.mem.parallel_loop_access
11*67e74705SXin Li // CHECK: @__kmpc_for_static_fini
12*67e74705SXin Li #pragma omp for simd
13*67e74705SXin Li   for(int i = 0; i < 10; ++i);
14*67e74705SXin Li // CHECK: @__kmpc_for_static_init
15*67e74705SXin Li // CHECK-NOT: !llvm.mem.parallel_loop_access
16*67e74705SXin Li // CHECK: @__kmpc_for_static_fini
17*67e74705SXin Li #pragma omp for schedule(static)
18*67e74705SXin Li   for(int i = 0; i < 10; ++i);
19*67e74705SXin Li // CHECK: @__kmpc_for_static_init
20*67e74705SXin Li // CHECK-NOT: !llvm.mem.parallel_loop_access
21*67e74705SXin Li // CHECK: @__kmpc_for_static_fini
22*67e74705SXin Li #pragma omp for simd schedule(static)
23*67e74705SXin Li   for(int i = 0; i < 10; ++i);
24*67e74705SXin Li // CHECK: @__kmpc_for_static_init
25*67e74705SXin Li // CHECK-NOT: !llvm.mem.parallel_loop_access
26*67e74705SXin Li // CHECK: @__kmpc_for_static_fini
27*67e74705SXin Li #pragma omp for schedule(static, 2)
28*67e74705SXin Li   for(int i = 0; i < 10; ++i);
29*67e74705SXin Li // CHECK: @__kmpc_for_static_init
30*67e74705SXin Li // CHECK-NOT: !llvm.mem.parallel_loop_access
31*67e74705SXin Li // CHECK: @__kmpc_for_static_fini
32*67e74705SXin Li #pragma omp for simd schedule(static, 2)
33*67e74705SXin Li   for(int i = 0; i < 10; ++i);
34*67e74705SXin Li // CHECK: @__kmpc_dispatch_init
35*67e74705SXin Li // CHECK: !llvm.mem.parallel_loop_access
36*67e74705SXin Li #pragma omp for schedule(auto)
37*67e74705SXin Li   for(int i = 0; i < 10; ++i);
38*67e74705SXin Li // CHECK: @__kmpc_dispatch_init
39*67e74705SXin Li // CHECK: !llvm.mem.parallel_loop_access
40*67e74705SXin Li #pragma omp for simd schedule(auto)
41*67e74705SXin Li   for(int i = 0; i < 10; ++i);
42*67e74705SXin Li // CHECK: @__kmpc_dispatch_init
43*67e74705SXin Li // CHECK: !llvm.mem.parallel_loop_access
44*67e74705SXin Li #pragma omp for schedule(runtime)
45*67e74705SXin Li   for(int i = 0; i < 10; ++i);
46*67e74705SXin Li // CHECK: @__kmpc_dispatch_init
47*67e74705SXin Li // CHECK: !llvm.mem.parallel_loop_access
48*67e74705SXin Li #pragma omp for simd schedule(runtime)
49*67e74705SXin Li   for(int i = 0; i < 10; ++i);
50*67e74705SXin Li // CHECK: @__kmpc_dispatch_init
51*67e74705SXin Li // CHECK: !llvm.mem.parallel_loop_access
52*67e74705SXin Li #pragma omp for schedule(guided)
53*67e74705SXin Li   for(int i = 0; i < 10; ++i);
54*67e74705SXin Li // CHECK: @__kmpc_dispatch_init
55*67e74705SXin Li // CHECK: !llvm.mem.parallel_loop_access
56*67e74705SXin Li #pragma omp for simd schedule(guided)
57*67e74705SXin Li   for(int i = 0; i < 10; ++i);
58*67e74705SXin Li // CHECK: @__kmpc_dispatch_init
59*67e74705SXin Li // CHECK: !llvm.mem.parallel_loop_access
60*67e74705SXin Li #pragma omp for schedule(dynamic)
61*67e74705SXin Li   for(int i = 0; i < 10; ++i);
62*67e74705SXin Li // CHECK: @__kmpc_dispatch_init
63*67e74705SXin Li // CHECK: !llvm.mem.parallel_loop_access
64*67e74705SXin Li #pragma omp for simd schedule(dynamic)
65*67e74705SXin Li   for(int i = 0; i < 10; ++i);
66*67e74705SXin Li // CHECK: @__kmpc_for_static_init
67*67e74705SXin Li // CHECK-NOT: !llvm.mem.parallel_loop_access
68*67e74705SXin Li // CHECK: @__kmpc_for_static_fini
69*67e74705SXin Li #pragma omp for schedule(monotonic: static)
70*67e74705SXin Li   for(int i = 0; i < 10; ++i);
71*67e74705SXin Li // CHECK: @__kmpc_for_static_init
72*67e74705SXin Li // CHECK-NOT: !llvm.mem.parallel_loop_access
73*67e74705SXin Li // CHECK: @__kmpc_for_static_fini
74*67e74705SXin Li #pragma omp for simd schedule(monotonic: static)
75*67e74705SXin Li   for(int i = 0; i < 10; ++i);
76*67e74705SXin Li // CHECK: @__kmpc_for_static_init
77*67e74705SXin Li // CHECK-NOT: !llvm.mem.parallel_loop_access
78*67e74705SXin Li // CHECK: @__kmpc_for_static_fini
79*67e74705SXin Li #pragma omp for schedule(monotonic: static, 2)
80*67e74705SXin Li   for(int i = 0; i < 10; ++i);
81*67e74705SXin Li // CHECK: @__kmpc_for_static_init
82*67e74705SXin Li // CHECK-NOT: !llvm.mem.parallel_loop_access
83*67e74705SXin Li // CHECK: @__kmpc_for_static_fini
84*67e74705SXin Li #pragma omp for simd schedule(monotonic: static, 2)
85*67e74705SXin Li   for(int i = 0; i < 10; ++i);
86*67e74705SXin Li // CHECK: @__kmpc_dispatch_init
87*67e74705SXin Li // CHECK-NOT: !llvm.mem.parallel_loop_access
88*67e74705SXin Li #pragma omp for schedule(monotonic: auto)
89*67e74705SXin Li   for(int i = 0; i < 10; ++i);
90*67e74705SXin Li // CHECK: @__kmpc_dispatch_init
91*67e74705SXin Li // CHECK-NOT: !llvm.mem.parallel_loop_access
92*67e74705SXin Li #pragma omp for simd schedule(monotonic: auto)
93*67e74705SXin Li   for(int i = 0; i < 10; ++i);
94*67e74705SXin Li // CHECK: @__kmpc_dispatch_init
95*67e74705SXin Li // CHECK-NOT: !llvm.mem.parallel_loop_access
96*67e74705SXin Li #pragma omp for schedule(monotonic: runtime)
97*67e74705SXin Li   for(int i = 0; i < 10; ++i);
98*67e74705SXin Li // CHECK: @__kmpc_dispatch_init
99*67e74705SXin Li // CHECK-NOT: !llvm.mem.parallel_loop_access
100*67e74705SXin Li #pragma omp for simd schedule(monotonic: runtime)
101*67e74705SXin Li   for(int i = 0; i < 10; ++i);
102*67e74705SXin Li // CHECK: @__kmpc_dispatch_init
103*67e74705SXin Li // CHECK-NOT: !llvm.mem.parallel_loop_access
104*67e74705SXin Li #pragma omp for schedule(monotonic: guided)
105*67e74705SXin Li   for(int i = 0; i < 10; ++i);
106*67e74705SXin Li // CHECK: @__kmpc_dispatch_init
107*67e74705SXin Li // CHECK-NOT: !llvm.mem.parallel_loop_access
108*67e74705SXin Li #pragma omp for simd schedule(monotonic: guided)
109*67e74705SXin Li   for(int i = 0; i < 10; ++i);
110*67e74705SXin Li // CHECK: @__kmpc_dispatch_init
111*67e74705SXin Li // CHECK-NOT: !llvm.mem.parallel_loop_access
112*67e74705SXin Li #pragma omp for schedule(monotonic: dynamic)
113*67e74705SXin Li   for(int i = 0; i < 10; ++i);
114*67e74705SXin Li // CHECK: @__kmpc_dispatch_init
115*67e74705SXin Li // CHECK-NOT: !llvm.mem.parallel_loop_access
116*67e74705SXin Li #pragma omp for simd schedule(monotonic: dynamic)
117*67e74705SXin Li   for(int i = 0; i < 10; ++i);
118*67e74705SXin Li // CHECK: @__kmpc_dispatch_init
119*67e74705SXin Li // CHECK: !llvm.mem.parallel_loop_access
120*67e74705SXin Li #pragma omp for schedule(nonmonotonic: guided)
121*67e74705SXin Li   for(int i = 0; i < 10; ++i);
122*67e74705SXin Li // CHECK: @__kmpc_dispatch_init
123*67e74705SXin Li // CHECK: !llvm.mem.parallel_loop_access
124*67e74705SXin Li #pragma omp for simd schedule(nonmonotonic: guided)
125*67e74705SXin Li   for(int i = 0; i < 10; ++i);
126*67e74705SXin Li // CHECK: @__kmpc_dispatch_init
127*67e74705SXin Li // CHECK: !llvm.mem.parallel_loop_access
128*67e74705SXin Li #pragma omp for schedule(nonmonotonic: dynamic)
129*67e74705SXin Li   for(int i = 0; i < 10; ++i);
130*67e74705SXin Li // CHECK: @__kmpc_dispatch_init
131*67e74705SXin Li // CHECK: !llvm.mem.parallel_loop_access
132*67e74705SXin Li #pragma omp for simd schedule(nonmonotonic: dynamic)
133*67e74705SXin Li   for(int i = 0; i < 10; ++i);
134*67e74705SXin Li // CHECK: @__kmpc_dispatch_init
135*67e74705SXin Li // CHECK-NOT: !llvm.mem.parallel_loop_access
136*67e74705SXin Li // CHECK: @__kmpc_dispatch_next
137*67e74705SXin Li #pragma omp for schedule(static) ordered
138*67e74705SXin Li   for(int i = 0; i < 10; ++i);
139*67e74705SXin Li // CHECK: @__kmpc_dispatch_init
140*67e74705SXin Li // CHECK-NOT: !llvm.mem.parallel_loop_access
141*67e74705SXin Li // CHECK: @__kmpc_dispatch_next
142*67e74705SXin Li #pragma omp for simd schedule(static) ordered
143*67e74705SXin Li   for(int i = 0; i < 10; ++i);
144*67e74705SXin Li // CHECK: @__kmpc_dispatch_init
145*67e74705SXin Li // CHECK-NOT: !llvm.mem.parallel_loop_access
146*67e74705SXin Li // CHECK: @__kmpc_dispatch_next
147*67e74705SXin Li #pragma omp for schedule(static, 2) ordered(1)
148*67e74705SXin Li   for(int i = 0; i < 10; ++i);
149*67e74705SXin Li // CHECK: @__kmpc_dispatch_init
150*67e74705SXin Li // CHECK-NOT: !llvm.mem.parallel_loop_access
151*67e74705SXin Li // CHECK: @__kmpc_dispatch_next
152*67e74705SXin Li #pragma omp for simd schedule(static, 2) ordered
153*67e74705SXin Li   for(int i = 0; i < 10; ++i);
154*67e74705SXin Li // CHECK: @__kmpc_dispatch_init
155*67e74705SXin Li // CHECK-NOT: !llvm.mem.parallel_loop_access
156*67e74705SXin Li // CHECK: @__kmpc_dispatch_next
157*67e74705SXin Li #pragma omp for schedule(auto) ordered(1)
158*67e74705SXin Li   for(int i = 0; i < 10; ++i);
159*67e74705SXin Li // CHECK: @__kmpc_dispatch_init
160*67e74705SXin Li // CHECK-NOT: !llvm.mem.parallel_loop_access
161*67e74705SXin Li #pragma omp for simd schedule(auto) ordered
162*67e74705SXin Li   for(int i = 0; i < 10; ++i);
163*67e74705SXin Li // CHECK: @__kmpc_dispatch_init
164*67e74705SXin Li // CHECK-NOT: !llvm.mem.parallel_loop_access
165*67e74705SXin Li // CHECK: @__kmpc_dispatch_next
166*67e74705SXin Li #pragma omp for schedule(runtime) ordered
167*67e74705SXin Li   for(int i = 0; i < 10; ++i);
168*67e74705SXin Li // CHECK: @__kmpc_dispatch_init
169*67e74705SXin Li // CHECK-NOT: !llvm.mem.parallel_loop_access
170*67e74705SXin Li // CHECK: @__kmpc_dispatch_next
171*67e74705SXin Li #pragma omp for simd schedule(runtime) ordered
172*67e74705SXin Li   for(int i = 0; i < 10; ++i);
173*67e74705SXin Li // CHECK: @__kmpc_dispatch_init
174*67e74705SXin Li // CHECK-NOT: !llvm.mem.parallel_loop_access
175*67e74705SXin Li // CHECK: @__kmpc_dispatch_next
176*67e74705SXin Li #pragma omp for schedule(guided) ordered(1)
177*67e74705SXin Li   for(int i = 0; i < 10; ++i);
178*67e74705SXin Li // CHECK: @__kmpc_dispatch_init
179*67e74705SXin Li // CHECK-NOT: !llvm.mem.parallel_loop_access
180*67e74705SXin Li // CHECK: @__kmpc_dispatch_next
181*67e74705SXin Li #pragma omp for simd schedule(guided) ordered
182*67e74705SXin Li   for(int i = 0; i < 10; ++i);
183*67e74705SXin Li // CHECK: @__kmpc_dispatch_init
184*67e74705SXin Li // CHECK-NOT: !llvm.mem.parallel_loop_access
185*67e74705SXin Li // CHECK: @__kmpc_dispatch_next
186*67e74705SXin Li #pragma omp for schedule(dynamic) ordered(1)
187*67e74705SXin Li   for(int i = 0; i < 10; ++i);
188*67e74705SXin Li // CHECK: @__kmpc_dispatch_init
189*67e74705SXin Li // CHECK-NOT: !llvm.mem.parallel_loop_access
190*67e74705SXin Li // CHECK: @__kmpc_dispatch_next
191*67e74705SXin Li #pragma omp for simd schedule(dynamic)
192*67e74705SXin Li   for(int i = 0; i < 10; ++i);
193*67e74705SXin Li   return 0;
194*67e74705SXin Li }
195