blob: 738bbf34f7250a6ed3baa7ea3cb41b2277fe1e84 [file] [log] [blame]
Alexey Bataev8d8e1232018-08-29 18:32:21 +00001// Test target codegen - host bc file has to be created first.
2// RUN: %clang_cc1 -verify -fopenmp -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=nvptx64-nvidia-cuda -emit-llvm-bc %s -o %t-ppc-host.bc
3// RUN: %clang_cc1 -verify -fopenmp -x c++ -triple nvptx64-unknown-unknown -fopenmp-targets=nvptx64-nvidia-cuda -emit-llvm %s -fopenmp-is-device -fopenmp-host-ir-file-path %t-ppc-host.bc -o - | FileCheck %s
4// RUN: %clang_cc1 -verify -fopenmp -x c++ -triple i386-unknown-unknown -fopenmp-targets=nvptx-nvidia-cuda -emit-llvm-bc %s -o %t-x86-host.bc
5// RUN: %clang_cc1 -verify -fopenmp -x c++ -triple nvptx-unknown-unknown -fopenmp-targets=nvptx-nvidia-cuda -emit-llvm %s -fopenmp-is-device -fopenmp-host-ir-file-path %t-x86-host.bc -o - | FileCheck %s
6// RUN: %clang_cc1 -verify -fopenmp -fexceptions -fcxx-exceptions -x c++ -triple nvptx-unknown-unknown -fopenmp-targets=nvptx-nvidia-cuda -emit-llvm %s -fopenmp-is-device -fopenmp-host-ir-file-path %t-x86-host.bc -o - | FileCheck %s
7// expected-no-diagnostics
8#ifndef HEADER
9#define HEADER
10
11// CHECK-NOT: @__omp_offloading_{{.+}}_exec_mode = weak constant i8 1
Alexey Bataeve8ad4b72018-11-26 18:37:09 +000012// CHECK-DAG: [[DISTR_LIGHT:@.+]] = private unnamed_addr constant %struct.ident_t { i32 0, i32 2050, i32 3, i32 0, i8* getelementptr inbounds
13// CHECK-DAG: [[FOR_LIGHT:@.+]] = private unnamed_addr constant %struct.ident_t { i32 0, i32 514, i32 3, i32 0, i8* getelementptr inbounds
14// CHECK-DAG: [[LIGHT:@.+]] = private unnamed_addr constant %struct.ident_t { i32 0, i32 2, i32 3, i32 0, i8* getelementptr inbounds
15// CHECK-DAG: [[DISTR_FULL:@.+]] = private unnamed_addr constant %struct.ident_t { i32 0, i32 2050, i32 1, i32 0, i8* getelementptr inbounds
16// CHECK-DAG: [[FULL:@.+]] = private unnamed_addr constant %struct.ident_t { i32 0, i32 2, i32 1, i32 0, i8* getelementptr inbounds
17// CHECK-DAG: [[BAR_LIGHT:@.+]] = private unnamed_addr constant %struct.ident_t { i32 0, i32 66, i32 3, i32 0, i8* getelementptr inbounds
18// CHECK-DAG: [[BAR_FULL:@.+]] = private unnamed_addr constant %struct.ident_t { i32 0, i32 66, i32 1, i32 0, i8* getelementptr inbounds
Alexey Bataevceeaa482018-11-21 21:04:34 +000019// CHECK-NOT: @__omp_offloading_{{.+}}_exec_mode = weak constant i8 1
Alexey Bataev8d8e1232018-08-29 18:32:21 +000020
21void foo() {
22// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 0, i16 0)
Alexey Bataeve8ad4b72018-11-26 18:37:09 +000023// CHECK-DAG: [[DISTR_LIGHT]]
24// CHECK-DAG: [[FOR_LIGHT]]
25// CHECK-DAG: [[LIGHT]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +000026// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 0, i16 0)
Alexey Bataeve8ad4b72018-11-26 18:37:09 +000027// CHECK-DAG: [[DISTR_LIGHT]]
28// CHECK-DAG: [[FOR_LIGHT]]
29// CHECK-DAG: [[LIGHT]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +000030// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 0, i16 0)
Alexey Bataeve8ad4b72018-11-26 18:37:09 +000031// CHECK-DAG: [[DISTR_LIGHT]]
32// CHECK-DAG: [[FOR_LIGHT]]
33// CHECK-DAG: [[LIGHT]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +000034// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 1, i16 {{.+}})
Alexey Bataeve8ad4b72018-11-26 18:37:09 +000035// CHECK-DAG: [[DISTR_FULL]]
36// CHECK-DAG: [[FULL]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +000037// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 1, i16 {{.+}})
Alexey Bataeve8ad4b72018-11-26 18:37:09 +000038// CHECK-DAG: [[DISTR_FULL]]
39// CHECK-DAG: [[FULL]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +000040// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 1, i16 {{.+}})
Alexey Bataeve8ad4b72018-11-26 18:37:09 +000041// CHECK-DAG: [[DISTR_FULL]]
42// CHECK-DAG: [[FULL]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +000043// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 1, i16 {{.+}})
Alexey Bataeve8ad4b72018-11-26 18:37:09 +000044// CHECK-DAG: [[DISTR_FULL]]
45// CHECK-DAG: [[FULL]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +000046#pragma omp target teams distribute parallel for simd
47 for (int i = 0; i < 10; ++i)
48 ;
49#pragma omp target teams distribute parallel for simd schedule(static)
50 for (int i = 0; i < 10; ++i)
51 ;
52#pragma omp target teams distribute parallel for simd schedule(static, 1)
53 for (int i = 0; i < 10; ++i)
54 ;
55#pragma omp target teams distribute parallel for simd schedule(auto)
56 for (int i = 0; i < 10; ++i)
57 ;
58#pragma omp target teams distribute parallel for simd schedule(runtime)
59 for (int i = 0; i < 10; ++i)
60 ;
61#pragma omp target teams distribute parallel for simd schedule(dynamic)
62 for (int i = 0; i < 10; ++i)
63 ;
64#pragma omp target teams distribute parallel for simd schedule(guided)
65 for (int i = 0; i < 10; ++i)
66 ;
67int a;
Alexey Bataev8bcc69c2018-11-09 20:03:19 +000068// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 0, i16 0)
Alexey Bataeve8ad4b72018-11-26 18:37:09 +000069// CHECK-DAG: [[DISTR_LIGHT]]
70// CHECK-DAG: [[FOR_LIGHT]]
71// CHECK-DAG: [[LIGHT]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +000072// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 0, i16 0)
Alexey Bataeve8ad4b72018-11-26 18:37:09 +000073// CHECK-DAG: [[DISTR_LIGHT]]
74// CHECK-DAG: [[FOR_LIGHT]]
75// CHECK-DAG: [[LIGHT]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +000076// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 0, i16 0)
Alexey Bataeve8ad4b72018-11-26 18:37:09 +000077// CHECK-DAG: [[DISTR_LIGHT]]
78// CHECK-DAG: [[FOR_LIGHT]]
79// CHECK-DAG: [[LIGHT]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +000080// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 1, i16 {{.+}})
Alexey Bataeve8ad4b72018-11-26 18:37:09 +000081// CHECK-DAG: [[DISTR_FULL]]
82// CHECK-DAG: [[FULL]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +000083// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 1, i16 {{.+}})
Alexey Bataeve8ad4b72018-11-26 18:37:09 +000084// CHECK-DAG: [[DISTR_FULL]]
85// CHECK-DAG: [[FULL]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +000086// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 1, i16 {{.+}})
Alexey Bataeve8ad4b72018-11-26 18:37:09 +000087// CHECK-DAG: [[DISTR_FULL]]
88// CHECK-DAG: [[FULL]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +000089// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 1, i16 {{.+}})
Alexey Bataeve8ad4b72018-11-26 18:37:09 +000090// CHECK-DAG: [[DISTR_FULL]]
91// CHECK-DAG: [[FULL]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +000092#pragma omp target teams distribute parallel for lastprivate(a)
93 for (int i = 0; i < 10; ++i)
94 a = i;
95#pragma omp target teams distribute parallel for schedule(static)
96 for (int i = 0; i < 10; ++i)
97 ;
98#pragma omp target teams distribute parallel for schedule(static, 1)
99 for (int i = 0; i < 10; ++i)
100 ;
101#pragma omp target teams distribute parallel for schedule(auto)
102 for (int i = 0; i < 10; ++i)
103 ;
104#pragma omp target teams distribute parallel for schedule(runtime)
105 for (int i = 0; i < 10; ++i)
106 ;
107#pragma omp target teams distribute parallel for schedule(dynamic)
108 for (int i = 0; i < 10; ++i)
109 ;
110#pragma omp target teams distribute parallel for schedule(guided)
111 for (int i = 0; i < 10; ++i)
112 ;
113// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 0, i16 0)
Alexey Bataeve8ad4b72018-11-26 18:37:09 +0000114// CHECK-DAG: [[DISTR_LIGHT]]
115// CHECK-DAG: [[FOR_LIGHT]]
116// CHECK-DAG: [[LIGHT]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +0000117// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 0, i16 0)
Alexey Bataeve8ad4b72018-11-26 18:37:09 +0000118// CHECK-DAG: [[DISTR_LIGHT]]
119// CHECK-DAG: [[FOR_LIGHT]]
120// CHECK-DAG: [[LIGHT]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +0000121// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 0, i16 0)
Alexey Bataeve8ad4b72018-11-26 18:37:09 +0000122// CHECK-DAG: [[DISTR_LIGHT]]
123// CHECK-DAG: [[FOR_LIGHT]]
124// CHECK-DAG: [[LIGHT]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +0000125// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 1, i16 {{.+}})
Alexey Bataeve8ad4b72018-11-26 18:37:09 +0000126// CHECK-DAG: [[DISTR_FULL]]
127// CHECK-DAG: [[FULL]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +0000128// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 1, i16 {{.+}})
Alexey Bataeve8ad4b72018-11-26 18:37:09 +0000129// CHECK-DAG: [[DISTR_FULL]]
130// CHECK-DAG: [[FULL]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +0000131// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 1, i16 {{.+}})
Alexey Bataeve8ad4b72018-11-26 18:37:09 +0000132// CHECK-DAG: [[DISTR_FULL]]
133// CHECK-DAG: [[FULL]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +0000134// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 1, i16 {{.+}})
Alexey Bataeve8ad4b72018-11-26 18:37:09 +0000135// CHECK-DAG: [[DISTR_FULL]]
136// CHECK-DAG: [[FULL]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +0000137#pragma omp target teams
Alexey Bataev8bcc69c2018-11-09 20:03:19 +0000138 {
139 int b;
Alexey Bataev8d8e1232018-08-29 18:32:21 +0000140#pragma omp distribute parallel for simd
141 for (int i = 0; i < 10; ++i)
142 ;
Alexey Bataev8bcc69c2018-11-09 20:03:19 +0000143 ;
144 }
Alexey Bataev8d8e1232018-08-29 18:32:21 +0000145#pragma omp target teams
Alexey Bataev8bcc69c2018-11-09 20:03:19 +0000146 {
147 int b[] = {2, 3, sizeof(int)};
Alexey Bataev8d8e1232018-08-29 18:32:21 +0000148#pragma omp distribute parallel for simd schedule(static)
149 for (int i = 0; i < 10; ++i)
150 ;
Alexey Bataev8bcc69c2018-11-09 20:03:19 +0000151 }
Alexey Bataev8d8e1232018-08-29 18:32:21 +0000152#pragma omp target teams
Alexey Bataev8bcc69c2018-11-09 20:03:19 +0000153 {
154 int b;
Alexey Bataev8d8e1232018-08-29 18:32:21 +0000155#pragma omp distribute parallel for simd schedule(static, 1)
156 for (int i = 0; i < 10; ++i)
157 ;
Alexey Bataev8bcc69c2018-11-09 20:03:19 +0000158 int &c = b;
159 }
Alexey Bataev8d8e1232018-08-29 18:32:21 +0000160#pragma omp target teams
161#pragma omp distribute parallel for simd schedule(auto)
162 for (int i = 0; i < 10; ++i)
163 ;
164#pragma omp target teams
165#pragma omp distribute parallel for simd schedule(runtime)
166 for (int i = 0; i < 10; ++i)
167 ;
168#pragma omp target teams
169#pragma omp distribute parallel for simd schedule(dynamic)
170 for (int i = 0; i < 10; ++i)
171 ;
172#pragma omp target teams
173#pragma omp distribute parallel for simd schedule(guided)
174 for (int i = 0; i < 10; ++i)
175 ;
176// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 0, i16 0)
Alexey Bataeve8ad4b72018-11-26 18:37:09 +0000177// CHECK-DAG: [[DISTR_LIGHT]]
178// CHECK-DAG: [[FOR_LIGHT]]
179// CHECK-DAG: [[LIGHT]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +0000180// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 0, i16 0)
Alexey Bataeve8ad4b72018-11-26 18:37:09 +0000181// CHECK-DAG: [[DISTR_LIGHT]]
182// CHECK-DAG: [[FOR_LIGHT]]
183// CHECK-DAG: [[LIGHT]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +0000184// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 0, i16 0)
Alexey Bataeve8ad4b72018-11-26 18:37:09 +0000185// CHECK-DAG: [[DISTR_LIGHT]]
186// CHECK-DAG: [[FOR_LIGHT]]
187// CHECK-DAG: [[LIGHT]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +0000188// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 1, i16 {{.+}})
Alexey Bataeve8ad4b72018-11-26 18:37:09 +0000189// CHECK-DAG: [[DISTR_FULL]]
190// CHECK-DAG: [[FULL]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +0000191// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 1, i16 {{.+}})
Alexey Bataeve8ad4b72018-11-26 18:37:09 +0000192// CHECK-DAG: [[DISTR_FULL]]
193// CHECK-DAG: [[FULL]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +0000194// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 1, i16 {{.+}})
Alexey Bataeve8ad4b72018-11-26 18:37:09 +0000195// CHECK-DAG: [[DISTR_FULL]]
196// CHECK-DAG: [[FULL]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +0000197// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 1, i16 {{.+}})
Alexey Bataeve8ad4b72018-11-26 18:37:09 +0000198// CHECK-DAG: [[DISTR_FULL]]
199// CHECK-DAG: [[FULL]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +0000200#pragma omp target teams
201#pragma omp distribute parallel for
202 for (int i = 0; i < 10; ++i)
203 ;
204#pragma omp target teams
205#pragma omp distribute parallel for schedule(static)
206 for (int i = 0; i < 10; ++i)
207 ;
208#pragma omp target teams
209#pragma omp distribute parallel for schedule(static, 1)
210 for (int i = 0; i < 10; ++i)
211 ;
212#pragma omp target teams
213#pragma omp distribute parallel for schedule(auto)
214 for (int i = 0; i < 10; ++i)
215 ;
216#pragma omp target teams
217#pragma omp distribute parallel for schedule(runtime)
218 for (int i = 0; i < 10; ++i)
219 ;
220#pragma omp target teams
221#pragma omp distribute parallel for schedule(dynamic)
222 for (int i = 0; i < 10; ++i)
223 ;
224#pragma omp target teams
225#pragma omp distribute parallel for schedule(guided)
226 for (int i = 0; i < 10; ++i)
227 ;
228// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 0, i16 0)
Alexey Bataeve8ad4b72018-11-26 18:37:09 +0000229// CHECK-DAG: [[DISTR_LIGHT]]
230// CHECK-DAG: [[FOR_LIGHT]]
231// CHECK-DAG: [[LIGHT]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +0000232// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 0, i16 0)
Alexey Bataeve8ad4b72018-11-26 18:37:09 +0000233// CHECK-DAG: [[DISTR_LIGHT]]
234// CHECK-DAG: [[FOR_LIGHT]]
235// CHECK-DAG: [[LIGHT]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +0000236// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 0, i16 0)
Alexey Bataeve8ad4b72018-11-26 18:37:09 +0000237// CHECK-DAG: [[DISTR_LIGHT]]
238// CHECK-DAG: [[FOR_LIGHT]]
239// CHECK-DAG: [[LIGHT]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +0000240// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 1, i16 {{.+}})
Alexey Bataeve8ad4b72018-11-26 18:37:09 +0000241// CHECK-DAG: [[DISTR_FULL]]
242// CHECK-DAG: [[FULL]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +0000243// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 1, i16 {{.+}})
Alexey Bataeve8ad4b72018-11-26 18:37:09 +0000244// CHECK-DAG: [[DISTR_FULL]]
245// CHECK-DAG: [[FULL]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +0000246// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 1, i16 {{.+}})
Alexey Bataeve8ad4b72018-11-26 18:37:09 +0000247// CHECK-DAG: [[DISTR_FULL]]
248// CHECK-DAG: [[FULL]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +0000249// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 1, i16 {{.+}})
Alexey Bataeve8ad4b72018-11-26 18:37:09 +0000250// CHECK-DAG: [[DISTR_FULL]]
251// CHECK-DAG: [[FULL]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +0000252#pragma omp target
253#pragma omp teams
254#pragma omp distribute parallel for
255 for (int i = 0; i < 10; ++i)
256 ;
257#pragma omp target
258#pragma omp teams
259#pragma omp distribute parallel for schedule(static)
260 for (int i = 0; i < 10; ++i)
261 ;
262#pragma omp target
263#pragma omp teams
264#pragma omp distribute parallel for schedule(static, 1)
265 for (int i = 0; i < 10; ++i)
266 ;
267#pragma omp target
268#pragma omp teams
269#pragma omp distribute parallel for schedule(auto)
270 for (int i = 0; i < 10; ++i)
271 ;
272#pragma omp target
273#pragma omp teams
274#pragma omp distribute parallel for schedule(runtime)
275 for (int i = 0; i < 10; ++i)
276 ;
277#pragma omp target
278#pragma omp teams
279#pragma omp distribute parallel for schedule(dynamic)
280 for (int i = 0; i < 10; ++i)
281 ;
282#pragma omp target
283#pragma omp teams
284#pragma omp distribute parallel for schedule(guided)
285 for (int i = 0; i < 10; ++i)
286 ;
287// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 0, i16 0)
Alexey Bataeve8ad4b72018-11-26 18:37:09 +0000288// CHECK-DAG: [[FOR_LIGHT]]
289// CHECK-DAG: [[LIGHT]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +0000290// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 0, i16 0)
Alexey Bataeve8ad4b72018-11-26 18:37:09 +0000291// CHECK-DAG: [[FOR_LIGHT]]
292// CHECK-DAG: [[LIGHT]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +0000293// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 0, i16 0)
Alexey Bataeve8ad4b72018-11-26 18:37:09 +0000294// CHECK-DAG: [[FOR_LIGHT]]
295// CHECK-DAG: [[LIGHT]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +0000296// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 1, i16 {{.+}})
Alexey Bataeve8ad4b72018-11-26 18:37:09 +0000297// CHECK-DAG: [[FULL]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +0000298// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 1, i16 {{.+}})
Alexey Bataeve8ad4b72018-11-26 18:37:09 +0000299// CHECK-DAG: [[FULL]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +0000300// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 1, i16 {{.+}})
Alexey Bataeve8ad4b72018-11-26 18:37:09 +0000301// CHECK-DAG: [[FULL]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +0000302// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 1, i16 {{.+}})
Alexey Bataeve8ad4b72018-11-26 18:37:09 +0000303// CHECK-DAG: [[FULL]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +0000304#pragma omp target parallel for
305 for (int i = 0; i < 10; ++i)
306 ;
307#pragma omp target parallel for schedule(static)
308 for (int i = 0; i < 10; ++i)
309 ;
310#pragma omp target parallel for schedule(static, 1)
311 for (int i = 0; i < 10; ++i)
312 ;
313#pragma omp target parallel for schedule(auto)
314 for (int i = 0; i < 10; ++i)
315 ;
316#pragma omp target parallel for schedule(runtime)
317 for (int i = 0; i < 10; ++i)
318 ;
319#pragma omp target parallel for schedule(dynamic)
320 for (int i = 0; i < 10; ++i)
321 ;
322#pragma omp target parallel for schedule(guided)
323 for (int i = 0; i < 10; ++i)
324 ;
325// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 0, i16 0)
Alexey Bataeve8ad4b72018-11-26 18:37:09 +0000326// CHECK-DAG: [[FOR_LIGHT]]
327// CHECK-DAG: [[LIGHT]]
328// CHECK-DAG: [[BAR_LIGHT]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +0000329// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 0, i16 0)
Alexey Bataeve8ad4b72018-11-26 18:37:09 +0000330// CHECK-DAG: [[FOR_LIGHT]]
331// CHECK-DAG: [[LIGHT]]
332// CHECK-DAG: [[BAR_LIGHT]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +0000333// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 0, i16 0)
Alexey Bataeve8ad4b72018-11-26 18:37:09 +0000334// CHECK-DAG: [[FOR_LIGHT]]
335// CHECK-DAG: [[LIGHT]]
336// CHECK-DAG: [[BAR_LIGHT]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +0000337// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 1, i16 {{.+}})
Alexey Bataeve8ad4b72018-11-26 18:37:09 +0000338// CHECK-DAG: [[FULL]]
339// CHECK-DAG: [[BAR_FULL]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +0000340// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 1, i16 {{.+}})
Alexey Bataeve8ad4b72018-11-26 18:37:09 +0000341// CHECK-DAG: [[FULL]]
342// CHECK-DAG: [[BAR_FULL]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +0000343// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 1, i16 {{.+}})
Alexey Bataeve8ad4b72018-11-26 18:37:09 +0000344// CHECK-DAG: [[FULL]]
345// CHECK-DAG: [[BAR_FULL]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +0000346// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 1, i16 {{.+}})
Alexey Bataeve8ad4b72018-11-26 18:37:09 +0000347// CHECK-DAG: [[FULL]]
348// CHECK-DAG: [[BAR_FULL]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +0000349#pragma omp target parallel
350#pragma omp for simd
351 for (int i = 0; i < 10; ++i)
352 ;
353#pragma omp target parallel
354#pragma omp for simd schedule(static)
355 for (int i = 0; i < 10; ++i)
356 ;
357#pragma omp target parallel
358#pragma omp for simd schedule(static, 1)
359 for (int i = 0; i < 10; ++i)
360 ;
361#pragma omp target parallel
362#pragma omp for simd schedule(auto)
363 for (int i = 0; i < 10; ++i)
364 ;
365#pragma omp target parallel
366#pragma omp for simd schedule(runtime)
367 for (int i = 0; i < 10; ++i)
368 ;
369#pragma omp target parallel
370#pragma omp for simd schedule(dynamic)
371 for (int i = 0; i < 10; ++i)
372 ;
373#pragma omp target parallel
374#pragma omp for simd schedule(guided)
375 for (int i = 0; i < 10; ++i)
376 ;
377// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 1, i16 {{.+}})
Alexey Bataeve8ad4b72018-11-26 18:37:09 +0000378// CHECK-DAG: [[FULL]]
379// CHECK-DAG: [[BAR_FULL]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +0000380// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 0, i16 0)
Alexey Bataeve8ad4b72018-11-26 18:37:09 +0000381// CHECK-DAG: [[FOR_LIGHT]]
382// CHECK-DAG: [[LIGHT]]
383// CHECK-DAG: [[BAR_LIGHT]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +0000384// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 0, i16 0)
Alexey Bataeve8ad4b72018-11-26 18:37:09 +0000385// CHECK-DAG: [[FOR_LIGHT]]
386// CHECK-DAG: [[LIGHT]]
387// CHECK-DAG: [[BAR_LIGHT]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +0000388// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 1, i16 {{.+}})
Alexey Bataeve8ad4b72018-11-26 18:37:09 +0000389// CHECK-DAG: [[FULL]]
390// CHECK-DAG: [[BAR_FULL]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +0000391// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 1, i16 {{.+}})
Alexey Bataeve8ad4b72018-11-26 18:37:09 +0000392// CHECK-DAG: [[FULL]]
393// CHECK-DAG: [[BAR_FULL]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +0000394// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 1, i16 {{.+}})
Alexey Bataeve8ad4b72018-11-26 18:37:09 +0000395// CHECK-DAG: [[FULL]]
396// CHECK-DAG: [[BAR_FULL]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +0000397// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 1, i16 {{.+}})
Alexey Bataeve8ad4b72018-11-26 18:37:09 +0000398// CHECK-DAG: [[FULL]]
399// CHECK-DAG: [[BAR_FULL]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +0000400#pragma omp target
401#pragma omp parallel
402#pragma omp for simd ordered
403 for (int i = 0; i < 10; ++i)
404 ;
405#pragma omp target
406#pragma omp parallel
407#pragma omp for simd schedule(static)
408 for (int i = 0; i < 10; ++i)
409 ;
410#pragma omp target
411#pragma omp parallel
412#pragma omp for simd schedule(static, 1)
413 for (int i = 0; i < 10; ++i)
414 ;
415#pragma omp target
416#pragma omp parallel
417#pragma omp for simd schedule(auto)
418 for (int i = 0; i < 10; ++i)
419 ;
420#pragma omp target
421#pragma omp parallel
422#pragma omp for simd schedule(runtime)
423 for (int i = 0; i < 10; ++i)
424 ;
425#pragma omp target
426#pragma omp parallel
427#pragma omp for simd schedule(dynamic)
428 for (int i = 0; i < 10; ++i)
429 ;
430#pragma omp target
431#pragma omp parallel
432#pragma omp for simd schedule(guided)
433 for (int i = 0; i < 10; ++i)
434 ;
435// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 0, i16 0)
Alexey Bataeve8ad4b72018-11-26 18:37:09 +0000436// CHECK-DAG: [[FOR_LIGHT]]
437// CHECK-DAG: [[LIGHT]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +0000438// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 0, i16 0)
Alexey Bataeve8ad4b72018-11-26 18:37:09 +0000439// CHECK-DAG: [[FOR_LIGHT]]
440// CHECK-DAG: [[LIGHT]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +0000441// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 0, i16 0)
Alexey Bataeve8ad4b72018-11-26 18:37:09 +0000442// CHECK-DAG: [[FOR_LIGHT]]
443// CHECK-DAG: [[LIGHT]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +0000444// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 1, i16 {{.+}})
Alexey Bataeve8ad4b72018-11-26 18:37:09 +0000445// CHECK-DAG: [[FULL]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +0000446// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 1, i16 {{.+}})
Alexey Bataeve8ad4b72018-11-26 18:37:09 +0000447// CHECK-DAG: [[FULL]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +0000448// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 1, i16 {{.+}})
Alexey Bataeve8ad4b72018-11-26 18:37:09 +0000449// CHECK-DAG: [[FULL]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +0000450// CHECK: call void @__kmpc_spmd_kernel_init(i32 {{.+}}, i16 1, i16 {{.+}})
Alexey Bataeve8ad4b72018-11-26 18:37:09 +0000451// CHECK-DAG: [[FULL]]
Alexey Bataev8d8e1232018-08-29 18:32:21 +0000452#pragma omp target
453#pragma omp parallel for
454 for (int i = 0; i < 10; ++i)
455 ;
456#pragma omp target
457#pragma omp parallel for schedule(static)
458 for (int i = 0; i < 10; ++i)
459 ;
460#pragma omp target
461#pragma omp parallel for schedule(static, 1)
462 for (int i = 0; i < 10; ++i)
463 ;
464#pragma omp target
465#pragma omp parallel for schedule(auto)
466 for (int i = 0; i < 10; ++i)
467 ;
468#pragma omp target
469#pragma omp parallel for schedule(runtime)
470 for (int i = 0; i < 10; ++i)
471 ;
472#pragma omp target
473#pragma omp parallel for schedule(dynamic)
474 for (int i = 0; i < 10; ++i)
475 ;
476#pragma omp target
477#pragma omp parallel for schedule(guided)
478 for (int i = 0; i < 10; ++i)
479 ;
480}
481
482#endif
483