Clang Project

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