1d0d43b58Scchen // expected-no-diagnostics
2d0d43b58Scchen #ifndef HEADER
3d0d43b58Scchen #define HEADER
4d0d43b58Scchen ///==========================================================================///
5532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -DCK1 -verify -fopenmp -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck %s --check-prefix CK1 --check-prefix CK1-64
6532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -DCK1 -fopenmp -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -emit-pch -o %t %s
7532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -fopenmp -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s --check-prefix CK1 --check-prefix CK1-64
8532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -DCK1 -verify -fopenmp -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck %s --check-prefix CK1 --check-prefix CK1-32
9532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -DCK1 -fopenmp -fopenmp-targets=i386-pc-linux-gnu -x c++ -std=c++11 -triple i386-unknown-unknown -emit-pch -o %t %s
10532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -fopenmp -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s --check-prefix CK1 --check-prefix CK1-32
11d0d43b58Scchen
12532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -DCK1 -verify -fopenmp-simd -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck --check-prefix SIMD-ONLY1 %s
13532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -DCK1 -fopenmp-simd -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -emit-pch -o %t %s
14532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -fopenmp-simd -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck --check-prefix SIMD-ONLY1 %s
15532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -DCK1 -verify -fopenmp-simd -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck --check-prefix SIMD-ONLY1 %s
16532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -DCK1 -fopenmp-simd -fopenmp-targets=i386-pc-linux-gnu -x c++ -std=c++11 -triple i386-unknown-unknown -emit-pch -o %t %s
17532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -fopenmp-simd -fopenmp-targets=i386-pc-linux-gnu -x c++ -triple i386-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck --check-prefix SIMD-ONLY1 %s
18d0d43b58Scchen // SIMD-ONLY1-NOT: {{__kmpc|__tgt}}
19d0d43b58Scchen #ifdef CK1
20d0d43b58Scchen
21b272698dSAlexey Bataev // CK1: [[MTYPE00:@.+]] = {{.*}}constant [1 x i64] [i64 67]
22d0d43b58Scchen // CK1: [[MTYPE01:@.+]] = {{.*}}constant [1 x i64] [i64 288]
23d0d43b58Scchen // CK1: [[MTYPE02:@.+]] = {{.*}}constant [1 x i64] [i64 288]
24d0d43b58Scchen
add_one(float * b,int dm)25d0d43b58Scchen void add_one(float *b, int dm)
26d0d43b58Scchen {
27d0d43b58Scchen // CK1: [[BP:%.+]] = getelementptr inbounds [1 x i8*], [1 x i8*]* %{{.+}}, i32 0, i32 0
28d0d43b58Scchen // CK1: [[CBP:%.+]] = bitcast i8** [[BP]] to float**
29d0d43b58Scchen // CK1: store float* [[B_ADDR:%.+]], float** [[CBP]]
30d0d43b58Scchen // CK1: call void @__tgt_target_data_begin{{.+}}[[MTYPE00]]
31d0d43b58Scchen // CK1: [[VAL:%.+]] = load float*, float** [[CBP]],
3258e45893SThomas Preud'homme // CK1-NOT: store float* [[VAL]], float** {{%.+}},
33d0d43b58Scchen // CK1: store float* [[VAL]], float** [[PVT:%.+]],
34d0d43b58Scchen // CK1: [[TT:%.+]] = load float*, float** [[PVT]],
35*1fff1166SJoseph Huber // CK1: call i32 @__tgt_target{{.+}}
36*1fff1166SJoseph Huber // CK1: call i32 @__tgt_target{{.+}}
37d0d43b58Scchen // CK1: call void @__tgt_target_data_end{{.+}}[[MTYPE00]]
38d0d43b58Scchen #pragma omp target data map(tofrom:b[:1]) use_device_ptr(b) if(dm == 0)
39d0d43b58Scchen {
40d0d43b58Scchen #pragma omp target is_device_ptr(b)
41d0d43b58Scchen {
42d0d43b58Scchen b[0] += 1;
43d0d43b58Scchen }
44d0d43b58Scchen }
45d0d43b58Scchen }
46d0d43b58Scchen
47d0d43b58Scchen #endif
48d0d43b58Scchen #endif
49