1 // 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 2 // 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 3 // 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 4 5 // 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 6 // 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 7 // 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 8 9 // 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 10 // 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 11 // 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 12 13 // expected-no-diagnostics 14 15 #pragma omp declare target 16 #pragma omp begin declare variant match(device = {kind(nohost)}) 17 int G1; 18 static int G2; 19 #pragma omp end declare variant 20 #pragma omp end declare target 21 22 #pragma omp begin declare target device_type(nohost) 23 int G3; 24 static int G4; 25 #pragma omp end declare target 26 27 #pragma omp declare target 28 int G5; 29 static int G6; 30 #pragma omp end declare target 31 32 #pragma omp declare target to(G5, G6) device_type(nohost) 33 34 #pragma omp begin declare target device_type(host) 35 int G7; 36 static int G8; 37 #pragma omp end declare target 38 39 #pragma omp declare target 40 int G9; 41 static int G10; 42 #pragma omp end declare target 43 44 int G11; 45 static int G12; 46 #pragma omp declare target to(G9, G10, G11, G12) device_type(host) 47 48 // TODO: The code below should probably work but it is not 100% clear. 49 #if 0 50 #pragma omp declare target 51 #pragma omp begin declare variant match(device = {kind(host)}) 52 int GX; 53 static int GY; 54 #pragma omp end declare variant 55 #pragma omp end declare target 56 #endif 57 58 // TODO: It is odd, probably wrong, that we don't mangle all variables. 59 60 // DEVICE-DAG: @G1 = hidden {{.*}}global i32 0, align 4 61 // DEVICE-DAG: @_ZL2G2 = internal {{.*}}global i32 0, align 4 62 // DEVICE-DAG: @G3 = hidden {{.*}}global i32 0, align 4 63 // DEVICE-DAG: @_ZL2G4 = internal {{.*}}global i32 0, align 4 64 // DEVICE-DAG: @G5 = hidden {{.*}}global i32 0, align 4 65 // DEVICE-DAG: @_ZL2G6 = internal {{.*}}global i32 0, align 4 66 // DEVICE-NOT: ref 67 // DEVICE-NOT: llvm.used 68 // DEVICE-NOT: omp_offload 69 70 // HOST-DAG: @G7 = global i32 0, align 4 71 // HOST-DAG: @_ZL2G8 = internal global i32 0, align 4 72 // HOST-DAG: @G9 = global i32 0, align 4 73 // HOST-DAG: @_ZL3G10 = internal global i32 0, align 4 74 // HOST-DAG: @G11 = global i32 0, align 4 75 // HOST-DAG: @_ZL3G12 = internal global i32 0, align 4 76