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 
main()6 int main() {
7 // CHECK: @__kmpc_for_static_init
8 // CHECK-NOT: !llvm.mem.parallel_loop_access
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.mem.parallel_loop_access
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.mem.parallel_loop_access
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.mem.parallel_loop_access
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.mem.parallel_loop_access
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.mem.parallel_loop_access
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.mem.parallel_loop_access
39 #pragma omp for schedule(auto)
40   for(int i = 0; i < 10; ++i);
41 // CHECK: @__kmpc_dispatch_init
42 // CHECK: !llvm.mem.parallel_loop_access
43 #pragma omp for simd schedule(auto)
44   for(int i = 0; i < 10; ++i);
45 // CHECK: @__kmpc_dispatch_init
46 // CHECK: !llvm.mem.parallel_loop_access
47 #pragma omp for schedule(runtime)
48   for(int i = 0; i < 10; ++i);
49 // CHECK: @__kmpc_dispatch_init
50 // CHECK: !llvm.mem.parallel_loop_access
51 #pragma omp for simd schedule(runtime)
52   for(int i = 0; i < 10; ++i);
53 // CHECK: @__kmpc_dispatch_init
54 // CHECK: !llvm.mem.parallel_loop_access
55 #pragma omp for schedule(guided)
56   for(int i = 0; i < 10; ++i);
57 // CHECK: @__kmpc_dispatch_init
58 // CHECK: !llvm.mem.parallel_loop_access
59 #pragma omp for simd schedule(guided)
60   for(int i = 0; i < 10; ++i);
61 // CHECK: @__kmpc_dispatch_init
62 // CHECK: !llvm.mem.parallel_loop_access
63 #pragma omp for schedule(dynamic)
64   for(int i = 0; i < 10; ++i);
65 // CHECK: @__kmpc_dispatch_init
66 // CHECK: !llvm.mem.parallel_loop_access
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.mem.parallel_loop_access
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.mem.parallel_loop_access
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.mem.parallel_loop_access
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.mem.parallel_loop_access
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.mem.parallel_loop_access
91 #pragma omp for schedule(monotonic: auto)
92   for(int i = 0; i < 10; ++i);
93 // CHECK: @__kmpc_dispatch_init
94 // CHECK-NOT: !llvm.mem.parallel_loop_access
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.mem.parallel_loop_access
99 #pragma omp for schedule(monotonic: runtime)
100   for(int i = 0; i < 10; ++i);
101 // CHECK: @__kmpc_dispatch_init
102 // CHECK-NOT: !llvm.mem.parallel_loop_access
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.mem.parallel_loop_access
107 #pragma omp for schedule(monotonic: guided)
108   for(int i = 0; i < 10; ++i);
109 // CHECK: @__kmpc_dispatch_init
110 // CHECK-NOT: !llvm.mem.parallel_loop_access
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.mem.parallel_loop_access
115 #pragma omp for schedule(monotonic: dynamic)
116   for(int i = 0; i < 10; ++i);
117 // CHECK: @__kmpc_dispatch_init
118 // CHECK-NOT: !llvm.mem.parallel_loop_access
119 #pragma omp for simd schedule(monotonic: dynamic)
120   for(int i = 0; i < 10; ++i);
121 // CHECK: @__kmpc_dispatch_init
122 // CHECK: !llvm.mem.parallel_loop_access
123 #pragma omp for schedule(nonmonotonic: guided)
124   for(int i = 0; i < 10; ++i);
125 // CHECK: @__kmpc_dispatch_init
126 // CHECK: !llvm.mem.parallel_loop_access
127 #pragma omp for simd schedule(nonmonotonic: guided)
128   for(int i = 0; i < 10; ++i);
129 // CHECK: @__kmpc_dispatch_init
130 // CHECK: !llvm.mem.parallel_loop_access
131 #pragma omp for schedule(nonmonotonic: dynamic)
132   for(int i = 0; i < 10; ++i);
133 // CHECK: @__kmpc_dispatch_init
134 // CHECK: !llvm.mem.parallel_loop_access
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.mem.parallel_loop_access
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.mem.parallel_loop_access
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.mem.parallel_loop_access
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.mem.parallel_loop_access
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.mem.parallel_loop_access
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.mem.parallel_loop_access
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.mem.parallel_loop_access
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.mem.parallel_loop_access
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.mem.parallel_loop_access
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.mem.parallel_loop_access
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.mem.parallel_loop_access
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.mem.parallel_loop_access
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