blob: 4355abf6c7ac820ad1d25c71ec0ea3f6fcb17b50 [file] [log] [blame]
Alexey Bataev3b8d5582017-08-08 18:04:06 +00001// RUN: %clang_cc1 -DCK1 -verify -fopenmp -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=nvptx64-nvidia-cuda -emit-llvm-bc %s -o %t-ppc-host.bc
2// RUN: %clang_cc1 -DCK1 -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 - -debug-info-kind=limited | FileCheck %s
3// expected-no-diagnostics
4
5int main() {
6 /* int(*b)[a]; */
7 /* int *(**c)[a]; */
Alexey Bataev36f2c4d2017-09-13 20:20:59 +00008 bool bb;
Alexey Bataev3b8d5582017-08-08 18:04:06 +00009 int a;
10 int b[10][10];
11 int c[10][10][10];
Alexey Bataev36f2c4d2017-09-13 20:20:59 +000012#pragma omp target parallel firstprivate(a, b) map(tofrom \
13 : c) map(tofrom \
Alexey Bataev7ba57af2017-10-17 16:47:34 +000014 : bb) if (a)
Alexey Bataev3b8d5582017-08-08 18:04:06 +000015 {
16 int &f = c[1][1][1];
17 int &g = a;
18 int &h = b[1][1];
19 int d = 15;
20 a = 5;
21 b[0][a] = 10;
22 c[0][0][a] = 11;
23 b[0][a] = c[0][0][a];
Alexey Bataev36f2c4d2017-09-13 20:20:59 +000024 bb |= b[0][a];
Alexey Bataev3b8d5582017-08-08 18:04:06 +000025 }
Alexey Bataev36f2c4d2017-09-13 20:20:59 +000026#pragma omp target parallel firstprivate(a) map(tofrom \
27 : c, b) map(to \
28 : bb)
Alexey Bataev3b8d5582017-08-08 18:04:06 +000029 {
30 int &f = c[1][1][1];
31 int &g = a;
32 int &h = b[1][1];
33 int d = 15;
34 a = 5;
35 b[0][a] = 10;
36 c[0][0][a] = 11;
37 b[0][a] = c[0][0][a];
Alexey Bataev36f2c4d2017-09-13 20:20:59 +000038 d = bb;
Alexey Bataev3b8d5582017-08-08 18:04:06 +000039 }
Alexey Bataev36f2c4d2017-09-13 20:20:59 +000040#pragma omp target parallel map(tofrom \
41 : a, c, b) map(from \
42 : bb)
Alexey Bataev3b8d5582017-08-08 18:04:06 +000043 {
44 int &f = c[1][1][1];
45 int &g = a;
46 int &h = b[1][1];
47 int d = 15;
48 a = 5;
49 b[0][a] = 10;
50 c[0][0][a] = 11;
51 b[0][a] = c[0][0][a];
Alexey Bataev36f2c4d2017-09-13 20:20:59 +000052 bb = b[0][a];
Alexey Bataev3b8d5582017-08-08 18:04:06 +000053 }
54 return 0;
55}
56
Alexey Bataev7ba57af2017-10-17 16:47:34 +000057// CHECK: define internal void @__omp_offloading{{[^(]+}}([10 x [10 x [10 x i32]]] addrspace(1)* {{[^,]+}}, i32 {{[^,]+}}, [10 x [10 x i32]]* {{[^,]+}}, i8 addrspace(1)* noalias{{[^,]+}}, i1 {{[^)]+}})
Alexey Bataev3b8d5582017-08-08 18:04:06 +000058// CHECK: addrspacecast [10 x [10 x [10 x i32]]] addrspace(1)* %{{.+}} to [10 x [10 x [10 x i32]]]*
Alexey Bataev36f2c4d2017-09-13 20:20:59 +000059// CHECK: call void [[NONDEBUG_WRAPPER:.+]](i32* {{[^,]+}}, i32* {{[^,]+}}, [10 x [10 x [10 x i32]]]* {{[^,]+}}, i64 {{[^,]+}}, [10 x [10 x i32]]* {{[^,]+}}, i8* {{[^)]+}})
Alexey Bataev3b8d5582017-08-08 18:04:06 +000060
Alexey Bataev36f2c4d2017-09-13 20:20:59 +000061// CHECK: define internal void [[DEBUG_PARALLEL:@.+]](i32* {{[^,]+}}, i32* {{[^,]+}}, [10 x [10 x [10 x i32]]] addrspace(1)* noalias{{[^,]+}}, i32 {{[^,]+}}, [10 x [10 x i32]]* noalias{{[^,]+}}, i8 addrspace(1)* noalias{{[^)]+}})
Alexey Bataev3b8d5582017-08-08 18:04:06 +000062// CHECK: addrspacecast [10 x [10 x [10 x i32]]] addrspace(1)* %{{.+}} to [10 x [10 x [10 x i32]]]*
63
Alexey Bataev36f2c4d2017-09-13 20:20:59 +000064// CHECK: define internal void [[NONDEBUG_WRAPPER]](i32* {{[^,]+}}, i32* {{[^,]+}}, [10 x [10 x [10 x i32]]]* dereferenceable{{[^,]+}}, i64 {{[^,]+}}, [10 x [10 x i32]]* dereferenceable{{[^,]+}}, i8* dereferenceable{{[^)]+}})
Alexey Bataev3b8d5582017-08-08 18:04:06 +000065// CHECK: addrspacecast [10 x [10 x [10 x i32]]]* %{{.+}} to [10 x [10 x [10 x i32]]] addrspace(1)*
Alexey Bataev36f2c4d2017-09-13 20:20:59 +000066// CHECK: call void [[DEBUG_PARALLEL]](i32* {{[^,]+}}, i32* {{[^,]+}}, [10 x [10 x [10 x i32]]] addrspace(1)* {{[^,]+}}, i32 {{[^,]+}}, [10 x [10 x i32]]* {{[^,]+}}, i8 addrspace(1)* {{[^)]+}})
Alexey Bataev3b8d5582017-08-08 18:04:06 +000067
Alexey Bataev36f2c4d2017-09-13 20:20:59 +000068// CHECK: define void @__omp_offloading_{{[^(]+}}([10 x [10 x [10 x i32]]]* dereferenceable{{[^,]+}}, i64 {{[^,]+}}, [10 x [10 x i32]]* dereferenceable{{[^,]+}}, i8* dereferenceable{{[^)]+}})
Alexey Bataev3b8d5582017-08-08 18:04:06 +000069// CHECK: addrspacecast [10 x [10 x [10 x i32]]]* %{{.+}} to [10 x [10 x [10 x i32]]] addrspace(1)*
Alexey Bataev36f2c4d2017-09-13 20:20:59 +000070// CHECK: call void @__omp_offloading_{{[^(]+}}([10 x [10 x [10 x i32]]] addrspace(1)* {{[^,]+}}, i32 {{[^,]+}}, [10 x [10 x i32]]* {{[^,]+}}, i8 addrspace(1)* {{[^)]+}})
Alexey Bataev3b8d5582017-08-08 18:04:06 +000071
Alexey Bataev36f2c4d2017-09-13 20:20:59 +000072// CHECK: define internal void @__omp_offloading_{{[^(]+}}([10 x [10 x [10 x i32]]] addrspace(1)* noalias{{[^,]+}}, i32 {{[^,]+}}, [10 x [10 x i32]] addrspace(1)* noalias{{[^,]+}}, i8 addrspace(1)* noalias{{[^)]+}})
Alexey Bataev3b8d5582017-08-08 18:04:06 +000073// CHECK: addrspacecast [10 x [10 x [10 x i32]]] addrspace(1)* %{{.+}} to [10 x [10 x [10 x i32]]]*
74// CHECK: addrspacecast [10 x [10 x i32]] addrspace(1)* %{{.+}} to [10 x [10 x i32]]*
Alexey Bataev36f2c4d2017-09-13 20:20:59 +000075// CHECK: call void [[NONDEBUG_WRAPPER:.+]](i32* {{[^,]+}}, i32* {{[^,]+}}, [10 x [10 x [10 x i32]]]* {{[^,]+}}, i64 {{[^,]+}}, [10 x [10 x i32]]* {{[^,]+}}, i8* {{[^)]+}})
Alexey Bataev3b8d5582017-08-08 18:04:06 +000076
Alexey Bataev36f2c4d2017-09-13 20:20:59 +000077// CHECK: define internal void [[DEBUG_PARALLEL:@.+]](i32* {{[^,]+}}, i32* {{[^,]+}}, [10 x [10 x [10 x i32]]] addrspace(1)* noalias{{[^,]+}}, i32 {{[^,]+}}, [10 x [10 x i32]] addrspace(1)* noalias{{[^,]+}}, i8 addrspace(1)* {{[^)]+}})
Alexey Bataev3b8d5582017-08-08 18:04:06 +000078// CHECK: addrspacecast [10 x [10 x [10 x i32]]] addrspace(1)* %{{.+}} to [10 x [10 x [10 x i32]]]*
79// CHECK: addrspacecast [10 x [10 x i32]] addrspace(1)* %{{.+}} to [10 x [10 x i32]]*
80
Alexey Bataev36f2c4d2017-09-13 20:20:59 +000081// CHECK: define internal void [[NONDEBUG_WRAPPER]](i32* {{[^,]+}}, i32* {{[^,]+}}, [10 x [10 x [10 x i32]]]* dereferenceable{{[^,]+}}, i64 {{[^,]+}}, [10 x [10 x i32]]* dereferenceable{{[^,]+}}, i8* dereferenceable{{[^)]+}})
Alexey Bataev3b8d5582017-08-08 18:04:06 +000082// CHECK: addrspacecast [10 x [10 x [10 x i32]]]* %{{.+}} to [10 x [10 x [10 x i32]]] addrspace(1)*
83// CHECK: addrspacecast [10 x [10 x i32]]* %{{.+}} to [10 x [10 x i32]] addrspace(1)*
Alexey Bataev36f2c4d2017-09-13 20:20:59 +000084// CHECK: call void [[DEBUG_PARALLEL]](i32* {{[^,]+}}, i32* {{[^,]+}}, [10 x [10 x [10 x i32]]] addrspace(1)* {{[^,]+}}, i32 {{[^,]+}}, [10 x [10 x i32]] addrspace(1)* {{[^,]+}}, i8 addrspace(1)* {{[^)]+}})
Alexey Bataev3b8d5582017-08-08 18:04:06 +000085
Alexey Bataev36f2c4d2017-09-13 20:20:59 +000086// CHECK: define void @__omp_offloading_{{[^(]+}}([10 x [10 x [10 x i32]]]* dereferenceable{{[^,]+}}, i64 {{[^,]+}}, [10 x [10 x i32]]* dereferenceable{{[^,]+}}, i8* dereferenceable{{[^)]+}})
Alexey Bataev3b8d5582017-08-08 18:04:06 +000087// CHECK: addrspacecast [10 x [10 x [10 x i32]]]* %{{.+}} to [10 x [10 x [10 x i32]]] addrspace(1)*
88// CHECK: addrspacecast [10 x [10 x i32]]* %{{.+}} to [10 x [10 x i32]] addrspace(1)*
Alexey Bataev36f2c4d2017-09-13 20:20:59 +000089// CHECK: call void @__omp_offloading_{{[^(]+}}([10 x [10 x [10 x i32]]] addrspace(1)* {{[^,]+}}, i32 {{[^,]+}}, [10 x [10 x i32]] addrspace(1)* {{[^,]+}}, i8 addrspace(1)* {{[^)]+}})
Alexey Bataev3b8d5582017-08-08 18:04:06 +000090
Alexey Bataev36f2c4d2017-09-13 20:20:59 +000091// CHECK: define internal void @__omp_offloading_{{[^(]+}}([10 x [10 x [10 x i32]]] addrspace(1)* noalias{{[^,]+}}, i32 addrspace(1)* noalias{{[^,]+}}, [10 x [10 x i32]] addrspace(1)* noalias{{[^,]+}}, i8 addrspace(1)* noalias{{[^)]+}})
Alexey Bataev3b8d5582017-08-08 18:04:06 +000092// CHECK: addrspacecast [10 x [10 x [10 x i32]]] addrspace(1)* %{{.+}} to [10 x [10 x [10 x i32]]]*
93// CHECK: addrspacecast i32 addrspace(1)* %{{.+}} to i32*
94// CHECK: addrspacecast [10 x [10 x i32]] addrspace(1)* %{{.+}} to [10 x [10 x i32]]*
Alexey Bataevaee93892018-01-08 20:09:47 +000095// CHECK: call void @[[NONDEBUG_WRAPPER:.+]](i32* {{[^,]+}}, i32* {{[^,]+}}, [10 x [10 x [10 x i32]]]* {{[^,]+}}, i32* {{[^,]+}}, [10 x [10 x i32]]* {{[^,]+}}, i8* {{[^)]+}})
Alexey Bataeve754b182017-08-09 19:38:53 +000096
Alexey Bataevaee93892018-01-08 20:09:47 +000097// CHECK: define internal void @[[DEBUG_PARALLEL:.+]](i32* {{[^,]+}}, i32* {{[^,]+}}, [10 x [10 x [10 x i32]]] addrspace(1)* noalias{{[^,]+}}, i32 addrspace(1)* noalias{{[^,]+}}, [10 x [10 x i32]] addrspace(1)* noalias{{[^,]+}}, i8 addrspace(1)* noalias{{[^)]+}})
Alexey Bataeve754b182017-08-09 19:38:53 +000098// CHECK: addrspacecast [10 x [10 x [10 x i32]]] addrspace(1)* %{{.+}} to [10 x [10 x [10 x i32]]]*
99// CHECK: addrspacecast i32 addrspace(1)* %{{.+}} to i32*
100// CHECK: addrspacecast [10 x [10 x i32]] addrspace(1)* %{{.+}} to [10 x [10 x i32]]*
101
Alexey Bataevaee93892018-01-08 20:09:47 +0000102// CHECK: define internal void @[[NONDEBUG_WRAPPER]](i32* {{[^,]+}}, i32* {{[^,]+}}, [10 x [10 x [10 x i32]]]* dereferenceable{{[^,]+}}, i32* dereferenceable{{[^,]+}}, [10 x [10 x i32]]* dereferenceable{{[^,]+}}, i8* dereferenceable{{[^)]+}})
Alexey Bataev3b8d5582017-08-08 18:04:06 +0000103// CHECK: addrspacecast [10 x [10 x [10 x i32]]]* %{{.+}} to [10 x [10 x [10 x i32]]] addrspace(1)*
104// CHECK: addrspacecast i32* %{{.+}} to i32 addrspace(1)*
105// CHECK: addrspacecast [10 x [10 x i32]]* %{{.+}} to [10 x [10 x i32]] addrspace(1)*
Alexey Bataevaee93892018-01-08 20:09:47 +0000106// CHECK: call void @[[DEBUG_PARALLEL]](i32* {{[^,]+}}, i32* {{[^,]+}}, [10 x [10 x [10 x i32]]] addrspace(1)* {{[^,]+}}, i32 addrspace(1)* {{[^,]+}}, [10 x [10 x i32]] addrspace(1)* {{[^,]+}}, i8 addrspace(1)* {{[^)]+}})
Alexey Bataev3b8d5582017-08-08 18:04:06 +0000107
Alexey Bataev36f2c4d2017-09-13 20:20:59 +0000108// CHECK: define void @__omp_offloading_{{[^(]+}}([10 x [10 x [10 x i32]]]* dereferenceable{{[^,]+}}, i32* dereferenceable{{[^,]+}}, [10 x [10 x i32]]* dereferenceable{{[^,]+}}, i8* dereferenceable{{[^)]+}})
Alexey Bataeve754b182017-08-09 19:38:53 +0000109// CHECK: addrspacecast [10 x [10 x [10 x i32]]]* %{{.+}} to [10 x [10 x [10 x i32]]] addrspace(1)*
110// CHECK: addrspacecast i32* %{{.+}} to i32 addrspace(1)*
111// CHECK: addrspacecast [10 x [10 x i32]]* %{{.+}} to [10 x [10 x i32]] addrspace(1)*
Alexey Bataev36f2c4d2017-09-13 20:20:59 +0000112// CHECK: call void @__omp_offloading_{{[^(]+}}([10 x [10 x [10 x i32]]] addrspace(1)* {{[^,]+}}, i32 addrspace(1)* {{[^,]+}}, [10 x [10 x i32]] addrspace(1)* {{[^,]+}}, i8 addrspace(1)* {{[^)]+}})
Alexey Bataev3b8d5582017-08-08 18:04:06 +0000113
Alexey Bataevb45d43c2017-11-22 16:02:03 +0000114// CHECK: !DILocalVariable(name: ".global_tid.",
115// CHECK-SAME: DIFlagArtificial
116// CHECK: !DILocalVariable(name: ".bound_tid.",
117// CHECK-SAME: DIFlagArtificial
118// CHECK: !DILocalVariable(name: "c",
Alexey Bataev7cae94e2018-01-04 19:45:16 +0000119// CHECK-SAME: line: 11
Alexey Bataevb45d43c2017-11-22 16:02:03 +0000120// CHECK: !DILocalVariable(name: "a",
Alexey Bataev7cae94e2018-01-04 19:45:16 +0000121// CHECK-SAME: line: 9
Alexey Bataevb45d43c2017-11-22 16:02:03 +0000122// CHECK: !DILocalVariable(name: "b",
Alexey Bataev7cae94e2018-01-04 19:45:16 +0000123// CHECK-SAME: line: 10
Alexey Bataevaee93892018-01-08 20:09:47 +0000124
125// CHECK-DAG: distinct !DISubprogram(name: "[[NONDEBUG_WRAPPER]]",
126// CHECK-DAG: distinct !DISubprogram(name: "[[DEBUG_PARALLEL]]",