blob: 06515f6b309bf82fa225e311d16c2cd26c6dd508 [file] [log] [blame]
Alexey Bataevbf5c8482018-05-10 18:32:08 +00001// RUN: %clang_cc1 -DCK1 -verify -fopenmp -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=nvptx64-nvidia-cuda -fopenmp-cuda-mode -emit-llvm-bc %s -o %t-ppc-host.bc -fopenmp-version=45
2// RUN: %clang_cc1 -DCK1 -verify -fopenmp -x c++ -triple nvptx64-unknown-unknown -fopenmp-targets=nvptx64-nvidia-cuda -fopenmp-cuda-mode -emit-llvm %s -fopenmp-is-device -fopenmp-host-ir-file-path %t-ppc-host.bc -o - -debug-info-kind=limited -fopenmp-version=45 | FileCheck %s
Alexey Bataev3b8d5582017-08-08 18:04:06 +00003// expected-no-diagnostics
4
Alexey Bataev2a6f3f52018-11-07 19:11:14 +00005template <unsigned *ddd>
6struct S {
7 static int a;
8};
9
10extern unsigned aaa;
11template<> int S<&aaa>::a;
12
13template struct S<&aaa>;
14// CHECK-NOT: @aaa
15
Alexey Bataev3b8d5582017-08-08 18:04:06 +000016int main() {
17 /* int(*b)[a]; */
18 /* int *(**c)[a]; */
Alexey Bataev36f2c4d2017-09-13 20:20:59 +000019 bool bb;
Alexey Bataev3b8d5582017-08-08 18:04:06 +000020 int a;
21 int b[10][10];
22 int c[10][10][10];
Alexey Bataev36f2c4d2017-09-13 20:20:59 +000023#pragma omp target parallel firstprivate(a, b) map(tofrom \
24 : c) map(tofrom \
Alexey Bataevbf5c8482018-05-10 18:32:08 +000025 : bb) if (target:a)
Alexey Bataev3b8d5582017-08-08 18:04:06 +000026 {
27 int &f = c[1][1][1];
28 int &g = a;
29 int &h = b[1][1];
30 int d = 15;
31 a = 5;
32 b[0][a] = 10;
33 c[0][0][a] = 11;
34 b[0][a] = c[0][0][a];
Alexey Bataev36f2c4d2017-09-13 20:20:59 +000035 bb |= b[0][a];
Alexey Bataev3b8d5582017-08-08 18:04:06 +000036 }
Alexey Bataev36f2c4d2017-09-13 20:20:59 +000037#pragma omp target parallel firstprivate(a) map(tofrom \
38 : c, b) map(to \
39 : bb)
Alexey Bataev3b8d5582017-08-08 18:04:06 +000040 {
41 int &f = c[1][1][1];
42 int &g = a;
43 int &h = b[1][1];
44 int d = 15;
45 a = 5;
46 b[0][a] = 10;
47 c[0][0][a] = 11;
48 b[0][a] = c[0][0][a];
Alexey Bataev36f2c4d2017-09-13 20:20:59 +000049 d = bb;
Alexey Bataev3b8d5582017-08-08 18:04:06 +000050 }
Alexey Bataev36f2c4d2017-09-13 20:20:59 +000051#pragma omp target parallel map(tofrom \
52 : a, c, b) map(from \
53 : bb)
Alexey Bataev3b8d5582017-08-08 18:04:06 +000054 {
55 int &f = c[1][1][1];
56 int &g = a;
57 int &h = b[1][1];
58 int d = 15;
59 a = 5;
60 b[0][a] = 10;
61 c[0][0][a] = 11;
62 b[0][a] = c[0][0][a];
Alexey Bataev36f2c4d2017-09-13 20:20:59 +000063 bb = b[0][a];
Alexey Bataev3b8d5582017-08-08 18:04:06 +000064 }
65 return 0;
66}
67
Alexey Bataevbf5c8482018-05-10 18:32:08 +000068// 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{{[^,]+}})
Alexey Bataev3b8d5582017-08-08 18:04:06 +000069// 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 +000070// 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 +000071
Alexey Bataev36f2c4d2017-09-13 20:20:59 +000072// 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 +000073// CHECK: addrspacecast [10 x [10 x [10 x i32]]] addrspace(1)* %{{.+}} to [10 x [10 x [10 x i32]]]*
74
Alexey Bataev36f2c4d2017-09-13 20:20:59 +000075// 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 +000076// 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 +000077// 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 +000078
Alexey Bataev9a700172018-05-08 14:16:57 +000079// CHECK: define weak 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 +000080// 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 +000081// 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 +000082
Alexey Bataev36f2c4d2017-09-13 20:20:59 +000083// 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 +000084// CHECK: addrspacecast [10 x [10 x [10 x i32]]] addrspace(1)* %{{.+}} to [10 x [10 x [10 x i32]]]*
85// CHECK: addrspacecast [10 x [10 x i32]] addrspace(1)* %{{.+}} to [10 x [10 x i32]]*
Alexey Bataev36f2c4d2017-09-13 20:20:59 +000086// 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 +000087
Alexey Bataev36f2c4d2017-09-13 20:20:59 +000088// 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 +000089// CHECK: addrspacecast [10 x [10 x [10 x i32]]] addrspace(1)* %{{.+}} to [10 x [10 x [10 x i32]]]*
90// CHECK: addrspacecast [10 x [10 x i32]] addrspace(1)* %{{.+}} to [10 x [10 x i32]]*
91
Alexey Bataev36f2c4d2017-09-13 20:20:59 +000092// 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 +000093// CHECK: addrspacecast [10 x [10 x [10 x i32]]]* %{{.+}} to [10 x [10 x [10 x i32]]] addrspace(1)*
94// CHECK: addrspacecast [10 x [10 x i32]]* %{{.+}} to [10 x [10 x i32]] addrspace(1)*
Alexey Bataev36f2c4d2017-09-13 20:20:59 +000095// 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 +000096
Alexey Bataev9a700172018-05-08 14:16:57 +000097// CHECK: define weak 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 +000098// CHECK: addrspacecast [10 x [10 x [10 x i32]]]* %{{.+}} to [10 x [10 x [10 x i32]]] addrspace(1)*
99// CHECK: addrspacecast [10 x [10 x i32]]* %{{.+}} to [10 x [10 x i32]] addrspace(1)*
Alexey Bataev36f2c4d2017-09-13 20:20:59 +0000100// 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 +0000101
Alexey Bataev36f2c4d2017-09-13 20:20:59 +0000102// 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 +0000103// CHECK: addrspacecast [10 x [10 x [10 x i32]]] addrspace(1)* %{{.+}} to [10 x [10 x [10 x i32]]]*
104// CHECK: addrspacecast i32 addrspace(1)* %{{.+}} to i32*
105// CHECK: addrspacecast [10 x [10 x i32]] addrspace(1)* %{{.+}} to [10 x [10 x i32]]*
Alexey Bataevaee93892018-01-08 20:09:47 +0000106// 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 +0000107
Alexey Bataevaee93892018-01-08 20:09:47 +0000108// 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 +0000109// CHECK: addrspacecast [10 x [10 x [10 x i32]]] addrspace(1)* %{{.+}} to [10 x [10 x [10 x i32]]]*
110// CHECK: addrspacecast i32 addrspace(1)* %{{.+}} to i32*
111// CHECK: addrspacecast [10 x [10 x i32]] addrspace(1)* %{{.+}} to [10 x [10 x i32]]*
112
Alexey Bataevaee93892018-01-08 20:09:47 +0000113// 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 +0000114// CHECK: addrspacecast [10 x [10 x [10 x i32]]]* %{{.+}} to [10 x [10 x [10 x i32]]] addrspace(1)*
115// CHECK: addrspacecast i32* %{{.+}} to i32 addrspace(1)*
116// CHECK: addrspacecast [10 x [10 x i32]]* %{{.+}} to [10 x [10 x i32]] addrspace(1)*
Alexey Bataevaee93892018-01-08 20:09:47 +0000117// 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 +0000118
Alexey Bataev9a700172018-05-08 14:16:57 +0000119// CHECK: define weak 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 +0000120// CHECK: addrspacecast [10 x [10 x [10 x i32]]]* %{{.+}} to [10 x [10 x [10 x i32]]] addrspace(1)*
121// CHECK: addrspacecast i32* %{{.+}} to i32 addrspace(1)*
122// CHECK: addrspacecast [10 x [10 x i32]]* %{{.+}} to [10 x [10 x i32]] addrspace(1)*
Alexey Bataev36f2c4d2017-09-13 20:20:59 +0000123// 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 +0000124
Alexey Bataevb45d43c2017-11-22 16:02:03 +0000125// CHECK: !DILocalVariable(name: ".global_tid.",
126// CHECK-SAME: DIFlagArtificial
127// CHECK: !DILocalVariable(name: ".bound_tid.",
128// CHECK-SAME: DIFlagArtificial
129// CHECK: !DILocalVariable(name: "c",
Alexey Bataev2a6f3f52018-11-07 19:11:14 +0000130// CHECK-SAME: line: 22
Alexey Bataevb45d43c2017-11-22 16:02:03 +0000131// CHECK: !DILocalVariable(name: "a",
Alexey Bataev2a6f3f52018-11-07 19:11:14 +0000132// CHECK-SAME: line: 20
Alexey Bataevb45d43c2017-11-22 16:02:03 +0000133// CHECK: !DILocalVariable(name: "b",
Alexey Bataev2a6f3f52018-11-07 19:11:14 +0000134// CHECK-SAME: line: 21
Alexey Bataevaee93892018-01-08 20:09:47 +0000135
136// CHECK-DAG: distinct !DISubprogram(name: "[[NONDEBUG_WRAPPER]]",
137// CHECK-DAG: distinct !DISubprogram(name: "[[DEBUG_PARALLEL]]",