brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.2 KiB · e98a23e Raw
192 lines · cpp
1//RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -fopenmp \2//RUN:   -x c++ -std=c++14 -fexceptions -fcxx-exceptions                   \3//RUN:   -Wno-source-uses-openmp -Wno-openmp-clauses                       \4//RUN:   -fsyntax-only -verify -o - %s5 6//RUN: %clang_cc1 -triple x86_64-pc-windows-msvc -fopenmp \7//RUN:   -x c++ -std=c++14 -fexceptions -fcxx-exceptions                      \8//RUN:   -Wno-source-uses-openmp -Wno-openmp-clauses                          \9//RUN:   -fsyntax-only -verify -o - %s10 11//RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -fopenmp \12//RUN:   -x c++ -std=c++14 -fexceptions -fcxx-exceptions                   \13//RUN:   -Wno-source-uses-openmp -Wno-openmp-clauses                       \14//RUN:   -emit-pch -o %t %s15 16// expected-no-diagnostics17 18//RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -fopenmp \19//RUN:   -x c++ -std=c++14 -fexceptions -fcxx-exceptions                   \20//RUN:   -Wno-source-uses-openmp -Wno-openmp-clauses                       \21//RUN:   -ast-print %s | FileCheck %s --check-prefix=PRINT22 23//RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -fopenmp \24//RUN:   -x c++ -std=c++14 -fexceptions -fcxx-exceptions                   \25//RUN:   -Wno-source-uses-openmp -Wno-openmp-clauses                       \26//RUN:   -ast-dump %s | FileCheck %s --check-prefix=DUMP27 28//RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -fopenmp \29//RUN:   -x c++ -std=c++14 -fexceptions -fcxx-exceptions                   \30//RUN:   -Wno-source-uses-openmp -Wno-openmp-clauses                       \31//RUN:   -include-pch %t -ast-print %s | FileCheck %s --check-prefix=PRINT32 33//RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -fopenmp \34//RUN:   -x c++ -std=c++14 -fexceptions -fcxx-exceptions                   \35//RUN:   -Wno-source-uses-openmp -Wno-openmp-clauses                       \36//RUN:   -include-pch %t -ast-dump-all %s | FileCheck %s --check-prefix=DUMP37 38#ifndef HEADER39#define HEADER40 41void foo_v1(float *AAA, float *BBB, int &CCC, int *I) {return;}42void foo_v2(float *AAA, float *BBB, int &CCC, int *I) {return;}43void foo_v3(float *AAA, float *BBB, int &CCC, int *I) {return;}44 45//DUMP: FunctionDecl{{.*}} foo 'void (float *, float *, int &, int *)'46//DUMP: OMPDeclareVariantAttr{{.*}}device={arch(x86, x86_64)}47//DUMP: DeclRefExpr{{.*}}Function{{.*}}foo_v348//DUMP: DeclRefExpr{{.*}}ParmVar{{.*}}'I'49//DUMP: DeclRefExpr{{.*}}ParmVar{{.*}}'BBB'50//DUMP: OMPDeclareVariantAttr{{.*}}device={arch(ppc)}51//DUMP: DeclRefExpr{{.*}}Function{{.*}}foo_v252//DUMP: DeclRefExpr{{.*}}ParmVar{{.*}}'AAA'53//DUMP: OMPDeclareVariantAttr{{.*}}device={arch(arm)}54//DUMP: DeclRefExpr{{.*}}Function{{.*}}foo_v155//DUMP: DeclRefExpr{{.*}}ParmVar{{.*}}'AAA'56//DUMP: DeclRefExpr{{.*}}ParmVar{{.*}}'BBB'57//PRINT: #pragma omp declare variant(foo_v3) match(construct={dispatch}, device={arch(x86, x86_64)}) adjust_args(nothing:I) adjust_args(need_device_ptr:BBB) adjust_args(need_device_addr:CCC)58 59//PRINT: #pragma omp declare variant(foo_v2) match(construct={dispatch}, device={arch(ppc)}) adjust_args(need_device_ptr:AAA) adjust_args(need_device_addr:CCC)60 61//PRINT: omp declare variant(foo_v1) match(construct={dispatch}, device={arch(arm)}) adjust_args(need_device_ptr:AAA,BBB)62 63#pragma omp declare variant(foo_v1)                        \64   match(construct={dispatch}, device={arch(arm)})         \65   adjust_args(need_device_ptr:AAA,BBB)66 67#pragma omp declare variant(foo_v2)                        \68   match(construct={dispatch}, device={arch(ppc)}),        \69   adjust_args(need_device_ptr:AAA)                        \70   adjust_args(need_device_addr:CCC)71 72#pragma omp declare variant(foo_v3)                        \73   adjust_args(need_device_ptr:BBB) adjust_args(nothing:I) \74   adjust_args(need_device_addr:CCC)                       \75   match(construct={dispatch}, device={arch(x86,x86_64)})76 77void foo(float *AAA, float *BBB, int &CCC, int *I) {return;}78 79void Foo_Var(float *AAA, float *BBB, float *&CCC) {return;}80 81#pragma omp declare variant(Foo_Var) \82   match(construct={dispatch}, device={arch(x86_64)}) \83   adjust_args(need_device_ptr:AAA) adjust_args(nothing:BBB) \84   adjust_args(need_device_addr:CCC)85template<typename T>86void Foo(T *AAA, T *BBB, T *&CCC) {return;}87 88//PRINT: #pragma omp declare variant(Foo_Var) match(construct={dispatch}, device={arch(x86_64)}) adjust_args(nothing:BBB) adjust_args(need_device_ptr:AAA) adjust_args(need_device_addr:CCC)89//DUMP: FunctionDecl{{.*}} Foo 'void (T *, T *, T *&)'90//DUMP: OMPDeclareVariantAttr{{.*}}device={arch(x86_64)}91//DUMP: DeclRefExpr{{.*}}Function{{.*}}Foo_Var92//DUMP: DeclRefExpr{{.*}}ParmVar{{.*}}'BBB'93//DUMP: DeclRefExpr{{.*}}ParmVar{{.*}}'AAA'94//DUMP: DeclRefExpr{{.*}}ParmVar{{.*}}'CCC'95//96//DUMP: FunctionDecl{{.*}} Foo 'void (float *, float *, float *&)'97//DUMP: OMPDeclareVariantAttr{{.*}}device={arch(x86_64)}98//DUMP: DeclRefExpr{{.*}}Function{{.*}}Foo_Var99//DUMP: DeclRefExpr{{.*}}ParmVar{{.*}}'BBB'100//DUMP: DeclRefExpr{{.*}}ParmVar{{.*}}'AAA'101//DUMP: DeclRefExpr{{.*}}ParmVar{{.*}}'CCC'102 103void func()104{105  float *A;106  float *B;107  float *C;108 109  //#pragma omp dispatch110  Foo(A, B, C);111}112 113typedef void *omp_interop_t;114 115void bar_v1(float* F1, float *F2, omp_interop_t);116void bar_v2(float* F1, float *F2, omp_interop_t, omp_interop_t);117 118//PRINT: #pragma omp declare variant(bar_v1) match(construct={dispatch}) append_args(interop(target,targetsync))119//DUMP: FunctionDecl{{.*}}bar1 'void (float *, float *)'120//DUMP: OMPDeclareVariantAttr{{.*}}construct={dispatch} Target_TargetSync121//DUMP: DeclRefExpr{{.*}}bar_v1122#pragma omp declare variant(bar_v1) match(construct={dispatch}) \123                                    append_args(interop(target,targetsync))124void bar1(float *FF1, float *FF2) { return; }125 126//PRINT: #pragma omp declare variant(bar_v1) match(construct={dispatch}) append_args(interop(targetsync))127//DUMP: FunctionDecl{{.*}}bar2 'void (float *, float *)'128//DUMP: OMPDeclareVariantAttr{{.*}}construct={dispatch} TargetSync129//DUMP: DeclRefExpr{{.*}}bar_v1130#pragma omp declare variant(bar_v1) match(construct={dispatch}) \131                                    append_args(interop(targetsync))132void bar2(float *FF1, float *FF2) { return; }133 134//PRINT: #pragma omp declare variant(bar_v1) match(construct={dispatch}) append_args(interop(target))135//DUMP: FunctionDecl{{.*}}bar3 'void (float *, float *)'136//DUMP: OMPDeclareVariantAttr{{.*}}construct={dispatch} Target137//DUMP: DeclRefExpr{{.*}}bar_v1138#pragma omp declare variant(bar_v1) match(construct={dispatch}) \139                                    append_args(interop(target))140void bar3(float *FF1, float *FF2) { return; }141 142//PRINT: #pragma omp declare variant(bar_v2) match(construct={dispatch}) append_args(interop(target), interop(targetsync))143//DUMP: FunctionDecl{{.*}}bar4 'void (float *, float *)'144//DUMP: OMPDeclareVariantAttr{{.*}}construct={dispatch} Target TargetSync145//DUMP: DeclRefExpr{{.*}}bar_v2146#pragma omp declare variant(bar_v2) match(construct={dispatch}) \147                       append_args(interop(target), interop(targetsync))148void bar4(float *FF1, float *FF2) { return; }149 150//PRINT: #pragma omp declare variant(bar_v2) match(construct={dispatch}) append_args(interop(targetsync), interop(target))151//DUMP: FunctionDecl{{.*}}bar5 'void (float *, float *)'152//DUMP: OMPDeclareVariantAttr{{.*}}construct={dispatch} TargetSync Target153//DUMP: DeclRefExpr{{.*}}bar_v2154#pragma omp declare variant(bar_v2) match(construct={dispatch}) \155                       append_args(interop(targetsync), interop(target))156void bar5(float *FF1, float *FF2) { return; }157 158//PRINT: class A {159//DUMP: CXXRecordDecl{{.*}}class A definition160class A {161public:162  void memberfoo_v1(float *A, float *B, int *I, omp_interop_t IOp);163  //PRINT: #pragma omp declare variant(memberfoo_v1) match(construct={dispatch}) append_args(interop(target))164  //DUMP: CXXMethodDecl{{.*}}memberbar 'void (float *, float *, int *)'165  //DUMP: OMPDeclareVariantAttr{{.*}}Implicit construct={dispatch} Target166  //DUMP: DeclRefExpr{{.*}}'memberfoo_v1' 'void (float *, float *, int *, omp_interop_t)'167  #pragma omp declare variant(memberfoo_v1) match(construct={dispatch}) \168    append_args(interop(target))169  void memberbar(float *A, float *B, int *I) { return; }170 171  static void smemberfoo_v1(float *A, float *B, int *I, omp_interop_t IOp);172  //PRINT: #pragma omp declare variant(smemberfoo_v1) match(construct={dispatch}) append_args(interop(target))173  //DUMP: CXXMethodDecl{{.*}}smemberbar 'void (float *, float *, int *)' static174  //DUMP: OMPDeclareVariantAttr{{.*}}Implicit construct={dispatch} Target175  //DUMP: DeclRefExpr{{.*}}'smemberfoo_v1' 'void (float *, float *, int *, omp_interop_t)'176  #pragma omp declare variant(smemberfoo_v1) match(construct={dispatch}) \177    append_args(interop(target))178  static void smemberbar(float *A, float *B, int *I) { return; }179};180 181template <typename T> void templatefoo_v1(const T& t, omp_interop_t I);182template <typename T> void templatebar(const T& t) {}183 184//PRINT: #pragma omp declare variant(templatefoo_v1<int>) match(construct={dispatch}) append_args(interop(target))185//DUMP: FunctionDecl{{.*}}templatebar 'void (const int &)'186//DUMP: OMPDeclareVariantAttr{{.*}}Implicit construct={dispatch} Target187//DUMP: DeclRefExpr{{.*}}'templatefoo_v1' 'void (const int &, omp_interop_t)'188#pragma omp declare variant(templatefoo_v1<int>) match(construct={dispatch}) \189  append_args(interop(target))190void templatebar(const int &t) {}191#endif // HEADER192