1 // RUN: %clang_cc1 -verify -fopenmp -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=nvptx64-nvidia-cuda -emit-llvm-bc %s -o %t-ppc-host.bc -fopenmp-version=45 2 // RUN: %clang_cc1 -verify -fopenmp -x c++ -triple nvptx64-unknown-unknown -aux-triple powerpc64le-unknown-unknown -emit-llvm %s -fopenmp-is-device -fopenmp-host-ir-file-path %t-ppc-host.bc -o - -fopenmp-version=45 | FileCheck %s --implicit-check-not='ret i32 {{6|7|8|9|10|12|13|14|15|17|18|19|20|21|22|23|24|26}}' 3 // RUN: %clang_cc1 -verify -fopenmp -x c++ -triple nvptx64-unknown-unknown -aux-triple powerpc64le-unknown-unknown -emit-llvm %s -fopenmp-is-device -fopenmp-host-ir-file-path %t-ppc-host.bc -emit-pch -o %t -fopenmp-version=45 4 // RUN: %clang_cc1 -verify -fopenmp -x c++ -triple nvptx64-unknown-unknown -aux-triple powerpc64le-unknown-unknown -emit-llvm %s -fopenmp-is-device -fopenmp-host-ir-file-path %t-ppc-host.bc -include-pch %t -o - -fopenmp-version=45 | FileCheck %s --implicit-check-not='ret i32 {{6|7|8|9|10|12|13|14|15|17|18|19|20|21|22|23|24|26}}' 5 6 // RUN: %clang_cc1 -verify -fopenmp -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=nvptx64-nvidia-cuda -emit-llvm-bc %s -o %t-ppc-host.bc 7 // RUN: %clang_cc1 -verify -fopenmp -x c++ -triple nvptx64-unknown-unknown -aux-triple powerpc64le-unknown-unknown -emit-llvm %s -fopenmp-is-device -fopenmp-host-ir-file-path %t-ppc-host.bc -o - | FileCheck %s --implicit-check-not='ret i32 {{6|7|8|9|10|12|13|14|15|17|18|19|20|21|22|23|24|26}}' 8 // RUN: %clang_cc1 -verify -fopenmp -x c++ -triple nvptx64-unknown-unknown -aux-triple powerpc64le-unknown-unknown -emit-llvm %s -fopenmp-is-device -fopenmp-host-ir-file-path %t-ppc-host.bc -emit-pch -o %t 9 // RUN: %clang_cc1 -verify -fopenmp -x c++ -triple nvptx64-unknown-unknown -aux-triple powerpc64le-unknown-unknown -emit-llvm %s -fopenmp-is-device -fopenmp-host-ir-file-path %t-ppc-host.bc -include-pch %t -o - | FileCheck %s --implicit-check-not='ret i32 {{6|7|8|9|10|12|13|14|15|17|18|19|20|21|22|23|24|26}}' 10 // expected-no-diagnostics 11 12 // CHECK-DAG: ret i32 2 13 // CHECK-DAG: ret i32 3 14 // CHECK-DAG: ret i32 4 15 // CHECK-DAG: ret i32 5 16 // CHECK-DAG: ret i32 11 17 // CHECK-DAG: ret i32 16 18 // CHECK-DAG: ret i32 19 19 // CHECK-DAG: ret i32 25 20 // CHECK-DAG: ret i32 27 21 // CHECK-DAG: ret i32 28 22 // CHECK-DAG: ret i32 29 23 24 #ifndef HEADER 25 #define HEADER 26 27 int foo() { return 2; } 28 int bazzz(); 29 int test(); 30 static int stat_unused_(); 31 static int stat_used_(); 32 33 #pragma omp declare target 34 35 #pragma omp declare variant(foo) match(implementation = {vendor(llvm)}) 36 int bar() { return 3; } 37 38 #pragma omp declare variant(bazzz) match(implementation = {vendor(llvm)}) 39 int baz() { return 4; } 40 41 #pragma omp declare variant(test) match(implementation = {vendor(llvm)}) 42 int call() { return 5; } 43 44 #pragma omp declare variant(stat_unused_) match(implementation = {vendor(llvm)}) 45 static int stat_unused() { return 6; } 46 47 #pragma omp declare variant(stat_used_) match(implementation = {vendor(llvm)}) 48 static int stat_used() { return 7; } 49 50 #pragma omp end declare target 51 52 int main() { 53 int res; 54 #pragma omp target map(from \ 55 : res) 56 res = bar() + baz() + call(); 57 return res; 58 } 59 60 int test() { return 8; } 61 static int stat_unused_() { return 9; } 62 static int stat_used_() { return 10; } 63 64 #pragma omp declare target 65 66 struct SpecialFuncs { 67 void vd() {} 68 SpecialFuncs(); 69 ~SpecialFuncs(); 70 71 int method_() { return 11; } 72 #pragma omp declare variant(SpecialFuncs::method_) \ 73 match(implementation = {vendor(llvm)}) 74 int method() { return 12; } 75 #pragma omp declare variant(SpecialFuncs::method_) \ 76 match(implementation = {vendor(llvm)}) 77 int Method(); 78 } s; 79 80 int SpecialFuncs::Method() { return 13; } 81 82 struct SpecSpecialFuncs { 83 void vd() {} 84 SpecSpecialFuncs(); 85 ~SpecSpecialFuncs(); 86 87 int method_(); 88 #pragma omp declare variant(SpecSpecialFuncs::method_) \ 89 match(implementation = {vendor(llvm)}) 90 int method() { return 14; } 91 #pragma omp declare variant(SpecSpecialFuncs::method_) \ 92 match(implementation = {vendor(llvm)}) 93 int Method(); 94 } s1; 95 96 #pragma omp end declare target 97 98 int SpecSpecialFuncs::method_() { return 15; } 99 int SpecSpecialFuncs::Method() { return 16; } 100 101 int prio() { return 17; } 102 int prio1() { return 18; } 103 static int prio2() { return 19; } 104 static int prio3() { return 20; } 105 static int prio4() { return 21; } 106 int fn_linkage_variant() { return 22; } 107 extern "C" int fn_linkage_variant1() { return 23; } 108 int fn_variant2() { return 24; } 109 110 #pragma omp declare target 111 112 void xxx() { 113 (void)s.method(); 114 (void)s1.method(); 115 } 116 117 #pragma omp declare variant(prio) match(implementation = {vendor(llvm)}) 118 #pragma omp declare variant(prio1) match(implementation = {vendor(score(1) \ 119 : llvm)}) 120 int prio_() { return 25; } 121 122 #pragma omp declare variant(prio4) match(implementation = {vendor(score(3) \ 123 : llvm)}) 124 #pragma omp declare variant(prio2) match(implementation = {vendor(score(5) \ 125 : llvm)}) 126 #pragma omp declare variant(prio3) match(implementation = {vendor(score(1) \ 127 : llvm)}) 128 static int prio1_() { return 26; } 129 130 int int_fn() { return prio1_(); } 131 132 extern "C" { 133 #pragma omp declare variant(fn_linkage_variant) match(implementation = {vendor(llvm)}) 134 int fn_linkage() { return 27; } 135 } 136 137 #pragma omp declare variant(fn_linkage_variant1) match(implementation = {vendor(llvm)}) 138 int fn_linkage1() { return 28; } 139 140 #pragma omp declare variant(fn_variant2) match(implementation = {vendor(llvm, ibm)}) 141 int fn2() { return 29; } 142 143 #pragma omp end declare target 144 145 #endif // HEADER 146