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