1df729e2bSJohannes Doerfert // RUN: %clang_cc1 -verify -fopenmp -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-llvm %s -o - | FileCheck %s --check-prefix HOST
2df729e2bSJohannes Doerfert // RUN: %clang_cc1 -verify -fopenmp -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-llvm-bc %s -o %t-ppc-host.bc
3df729e2bSJohannes Doerfert // RUN: %clang_cc1 -verify -fopenmp -x c++ -triple powerpc64le-unknown-unknown -emit-llvm %s -fopenmp-is-device -fopenmp-host-ir-file-path %t-ppc-host.bc -o - | FileCheck %s --check-prefix DEVICE
4df729e2bSJohannes Doerfert 
5df729e2bSJohannes Doerfert // RUN: %clang_cc1 -verify -fopenmp -x c++ -triple i386-pc-linux-gnu -fopenmp-targets=i386-pc-linux-gnu -emit-llvm %s -o - | FileCheck %s --check-prefix HOST
6df729e2bSJohannes Doerfert // RUN: %clang_cc1 -verify -fopenmp -x c++ -triple i386-pc-linux-gnu -fopenmp-targets=i386-pc-linux-gnu -emit-llvm-bc %s -o %t-i386-host.bc
7df729e2bSJohannes Doerfert // RUN: %clang_cc1 -verify -fopenmp -x c++ -triple i386-pc-linux-gnu -emit-llvm %s -fopenmp-is-device -fopenmp-host-ir-file-path %t-i386-host.bc -o - | FileCheck %s --check-prefix DEVICE
8df729e2bSJohannes Doerfert 
9df729e2bSJohannes Doerfert // RUN: %clang_cc1 -verify -fopenmp -x c++ -triple x86_64-unknown-linux-gnu -fopenmp-targets=x86_64-unknown-linux-gnu -emit-llvm %s -o - | FileCheck %s --check-prefix HOST
10df729e2bSJohannes Doerfert // RUN: %clang_cc1 -verify -fopenmp -x c++ -triple x86_64-unknown-linux-gnu -fopenmp-targets=x86_64-unknown-linux-gnu -emit-llvm-bc %s -o %t-x86_64-host.bc
11df729e2bSJohannes Doerfert // RUN: %clang_cc1 -verify -fopenmp -x c++ -triple x86_64-unknown-linux-gnu -emit-llvm %s -fopenmp-is-device -fopenmp-host-ir-file-path %t-x86_64-host.bc -o - | FileCheck %s --check-prefix DEVICE
12df729e2bSJohannes Doerfert 
13df729e2bSJohannes Doerfert // expected-no-diagnostics
14df729e2bSJohannes Doerfert 
15df729e2bSJohannes Doerfert #pragma omp declare target
16df729e2bSJohannes Doerfert #pragma omp begin declare variant match(device = {kind(nohost)})
17df729e2bSJohannes Doerfert int G1;
18df729e2bSJohannes Doerfert static int G2;
19df729e2bSJohannes Doerfert #pragma omp end declare variant
20df729e2bSJohannes Doerfert #pragma omp end declare target
21df729e2bSJohannes Doerfert 
22df729e2bSJohannes Doerfert #pragma omp begin declare target device_type(nohost)
23df729e2bSJohannes Doerfert int G3;
24df729e2bSJohannes Doerfert static int G4;
25df729e2bSJohannes Doerfert #pragma omp end declare target
26df729e2bSJohannes Doerfert 
27df729e2bSJohannes Doerfert #pragma omp declare target
28df729e2bSJohannes Doerfert int G5;
29df729e2bSJohannes Doerfert static int G6;
30df729e2bSJohannes Doerfert #pragma omp end declare target
31df729e2bSJohannes Doerfert 
32df729e2bSJohannes Doerfert #pragma omp declare target to(G5, G6) device_type(nohost)
33df729e2bSJohannes Doerfert 
34df729e2bSJohannes Doerfert #pragma omp begin declare target device_type(host)
35df729e2bSJohannes Doerfert int G7;
36df729e2bSJohannes Doerfert static int G8;
37df729e2bSJohannes Doerfert #pragma omp end declare target
38df729e2bSJohannes Doerfert 
39df729e2bSJohannes Doerfert #pragma omp declare target
40df729e2bSJohannes Doerfert int G9;
41df729e2bSJohannes Doerfert static int G10;
42df729e2bSJohannes Doerfert #pragma omp end declare target
43df729e2bSJohannes Doerfert 
44df729e2bSJohannes Doerfert int G11;
45df729e2bSJohannes Doerfert static int G12;
46df729e2bSJohannes Doerfert #pragma omp declare target to(G9, G10, G11, G12) device_type(host)
47df729e2bSJohannes Doerfert 
48df729e2bSJohannes Doerfert // TODO: The code below should probably work but it is not 100% clear.
49df729e2bSJohannes Doerfert #if 0
50df729e2bSJohannes Doerfert #pragma omp declare target
51df729e2bSJohannes Doerfert #pragma omp begin declare variant match(device = {kind(host)})
52df729e2bSJohannes Doerfert int GX;
53df729e2bSJohannes Doerfert static int GY;
54df729e2bSJohannes Doerfert #pragma omp end declare variant
55df729e2bSJohannes Doerfert #pragma omp end declare target
56df729e2bSJohannes Doerfert #endif
57df729e2bSJohannes Doerfert 
58df729e2bSJohannes Doerfert // TODO: It is odd, probably wrong, that we don't mangle all variables.
59df729e2bSJohannes Doerfert 
60*ca6c9e43SJoseph Huber // DEVICE-DAG: @G1 = {{.*}}global i32 0, align 4
61df729e2bSJohannes Doerfert // DEVICE-DAG: @_ZL2G2 = internal {{.*}}global i32 0, align 4
62*ca6c9e43SJoseph Huber // DEVICE-DAG: @G3 = {{.*}}global i32 0, align 4
63df729e2bSJohannes Doerfert // DEVICE-DAG: @_ZL2G4 = internal {{.*}}global i32 0, align 4
64*ca6c9e43SJoseph Huber // DEVICE-DAG: @G5 = {{.*}}global i32 0, align 4
65df729e2bSJohannes Doerfert // DEVICE-DAG: @_ZL2G6 = internal {{.*}}global i32 0, align 4
66df729e2bSJohannes Doerfert // DEVICE-NOT: ref
67df729e2bSJohannes Doerfert // DEVICE-NOT: llvm.used
68df729e2bSJohannes Doerfert // DEVICE-NOT: omp_offload
69df729e2bSJohannes Doerfert 
7037561ba8SFangrui Song // HOST-DAG: @G7 = global i32 0, align 4
71df729e2bSJohannes Doerfert // HOST-DAG: @_ZL2G8 = internal global i32 0, align 4
7237561ba8SFangrui Song // HOST-DAG: @G9 = global i32 0, align 4
73df729e2bSJohannes Doerfert // HOST-DAG: @_ZL3G10 = internal global i32 0, align 4
7437561ba8SFangrui Song // HOST-DAG: @G11 = global i32 0, align 4
75df729e2bSJohannes Doerfert // HOST-DAG: @_ZL3G12 = internal global i32 0, align 4
76