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 foo()27int 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)}) bar()36int bar() { return 3; } 37 38 #pragma omp declare variant(bazzz) match(implementation = {vendor(llvm)}) baz()39int baz() { return 4; } 40 41 #pragma omp declare variant(test) match(implementation = {vendor(llvm)}) call()42int call() { return 5; } 43 44 #pragma omp declare variant(stat_unused_) match(implementation = {vendor(llvm)}) stat_unused()45static int stat_unused() { return 6; } 46 47 #pragma omp declare variant(stat_used_) match(implementation = {vendor(llvm)}) stat_used()48static int stat_used() { return 7; } 49 50 #pragma omp end declare target 51 main()52int main() { 53 int res; 54 #pragma omp target map(from \ 55 : res) 56 res = bar() + baz() + call(); 57 return res; 58 } 59 test()60int test() { return 8; } stat_unused_()61static int stat_unused_() { return 9; } stat_used_()62static int stat_used_() { return 10; } 63 64 #pragma omp declare target 65 66 struct SpecialFuncs { vdSpecialFuncs67 void vd() {} 68 SpecialFuncs(); 69 ~SpecialFuncs(); 70 method_SpecialFuncs71 int method_() { return 11; } 72 #pragma omp declare variant(SpecialFuncs::method_) \ 73 match(implementation = {vendor(llvm)}) methodSpecialFuncs74 int method() { return 12; } 75 #pragma omp declare variant(SpecialFuncs::method_) \ 76 match(implementation = {vendor(llvm)}) 77 int Method(); 78 } s; 79 Method()80int SpecialFuncs::Method() { return 13; } 81 82 struct SpecSpecialFuncs { vdSpecSpecialFuncs83 void vd() {} 84 SpecSpecialFuncs(); 85 ~SpecSpecialFuncs(); 86 87 int method_(); 88 #pragma omp declare variant(SpecSpecialFuncs::method_) \ 89 match(implementation = {vendor(llvm)}) methodSpecSpecialFuncs90 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 method_()98int SpecSpecialFuncs::method_() { return 15; } Method()99int SpecSpecialFuncs::Method() { return 16; } 100 prio()101int prio() { return 17; } prio1()102int prio1() { return 18; } prio2()103static int prio2() { return 19; } prio3()104static int prio3() { return 20; } prio4()105static int prio4() { return 21; } fn_linkage_variant()106int fn_linkage_variant() { return 22; } fn_linkage_variant1()107extern "C" int fn_linkage_variant1() { return 23; } fn_variant2()108int fn_variant2() { return 24; } 109 110 #pragma omp declare target 111 xxx()112void 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)}) prio_()120int 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)}) prio1_()128static int prio1_() { return 26; } 129 int_fn()130int int_fn() { return prio1_(); } 131 132 extern "C" { 133 #pragma omp declare variant(fn_linkage_variant) match(implementation = {vendor(llvm)}) fn_linkage()134int fn_linkage() { return 27; } 135 } 136 137 #pragma omp declare variant(fn_linkage_variant1) match(implementation = {vendor(llvm)}) fn_linkage1()138int fn_linkage1() { return 28; } 139 140 #pragma omp declare variant(fn_variant2) match(implementation = {vendor(llvm, ibm)}) fn2()141int fn2() { return 29; } 142 143 #pragma omp end declare target 144 145 #endif // HEADER 146