brintos

brintos / llvm-project-archived public Read only

0
0
Text · 11.0 KiB · fed6feb Raw
335 lines · cpp
1// RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -fopenmp \2// RUN:   -fsyntax-only -verify %s3 4// expected-no-diagnostics5 6// RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -fopenmp \7// RUN:   -ast-print %s | FileCheck %s --check-prefix=PRINT8 9// RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -fopenmp \10// RUN:   -ast-dump  %s | FileCheck %s --check-prefix=DUMP11 12// RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -fopenmp \13// RUN:   -emit-pch -o %t %s14 15// RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -fopenmp \16// RUN:   -include-pch %t -ast-dump-all %s | FileCheck %s --check-prefix=DUMP17 18// RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -fopenmp \19// RUN:   -include-pch %t -ast-print %s | FileCheck %s --check-prefix=PRINT20 21#ifndef HEADER22#define HEADER23 24typedef void *omp_interop_t;25 26struct S {27  omp_interop_t o1;28  omp_interop_t o2;29  omp_interop_t o3;30  static omp_interop_t so;31  void foo();32  S();33  ~S();34};35omp_interop_t S::so;36 37struct T {38  static void static_member_func();39  static omp_interop_t to;40};41omp_interop_t T::to;42 43void T::static_member_func() {44  omp_interop_t o1;45  //PRINT: #pragma omp interop init(target : o1)46  #pragma omp interop init(target:o1)47 48  //PRINT: #pragma omp interop init(target : to)49  #pragma omp interop init(target: to)50 51  //PRINT: #pragma omp interop init(target : T::to)52  #pragma omp interop init(target: T::to)53 54  //PRINT: #pragma omp interop init(target : S::so)55  #pragma omp interop init(target: S::so)56}57 58 59S::S() {60  //PRINT: #pragma omp interop init(target : this->o1)61  #pragma omp interop init(target:o1)62  //PRINT: #pragma omp interop use(this->o1) init(target : this->o2)63  #pragma omp interop use(o1) init(target:o2)64  //PRINT: #pragma omp interop use(this->o2) init(target : this->o3)65  #pragma omp interop use(o2) init(target:o3)66}67S::~S() {68  //PRINT: #pragma omp interop destroy(this->o1) destroy(this->o2) destroy(this->o3)69  #pragma omp interop destroy(o1) destroy(o2) destroy(o3)70}71 72void S::foo() {73  //PRINT: #pragma omp interop init(target : so)74  #pragma omp interop init(target:so)75}76 77//PRINT-LABEL: void foo1(78//DUMP-LABEL:  FunctionDecl {{.*}} foo179void foo1(int *ap, int dev) {80  omp_interop_t I;81  omp_interop_t &IRef = I;82 83  //PRINT: #pragma omp interop init(target : I)84  //DUMP: OMPInteropDirective85  //DUMP: OMPInitClause86  //DUMP: DeclRefExpr{{.*}}'omp_interop_t'{{.*}}Var{{.*}}'I'87  #pragma omp interop init(target:I)88 89  //PRINT: #pragma omp interop use(I)90  //DUMP: OMPInteropDirective91  //DUMP: OMPUseClause92  //DUMP: DeclRefExpr{{.*}}'omp_interop_t'{{.*}}Var{{.*}}'I'93  #pragma omp interop use(I)94 95  //PRINT: #pragma omp interop destroy(I)96  //DUMP: OMPInteropDirective97  //DUMP: OMPDestroyClause98  //DUMP: DeclRefExpr{{.*}}'omp_interop_t'{{.*}}Var{{.*}}'I'99  #pragma omp interop destroy(I)100 101  //PRINT: #pragma omp interop init(target : IRef)102  //DUMP: OMPInteropDirective103  //DUMP: OMPInitClause104  //DUMP: DeclRefExpr{{.*}}'omp_interop_t'{{.*}}Var{{.*}}'IRef'105  #pragma omp interop init(target:IRef)106 107  //PRINT: #pragma omp interop use(IRef)108  //DUMP: OMPInteropDirective109  //DUMP: OMPUseClause110  //DUMP: DeclRefExpr{{.*}}'omp_interop_t'{{.*}}Var{{.*}}'IRef'111  #pragma omp interop use(IRef)112 113  //PRINT: #pragma omp interop destroy(IRef)114  //DUMP: OMPInteropDirective115  //DUMP: OMPDestroyClause116  //DUMP: DeclRefExpr{{.*}}'omp_interop_t'{{.*}}Var{{.*}}'IRef'117  #pragma omp interop destroy(IRef)118 119  const omp_interop_t CI = (omp_interop_t)0;120  //PRINT: #pragma omp interop use(CI)121  //DUMP: OMPInteropDirective122  //DUMP: OMPUseClause123  //DUMP: DeclRefExpr{{.*}}'const omp_interop_t'{{.*}}Var{{.*}}'CI'124  #pragma omp interop use(CI)125 126  //PRINT: #pragma omp interop device(dev) depend(inout : ap) init(targetsync : I)127  //DUMP: OMPInteropDirective128  //DUMP: OMPDeviceClause129  //DUMP: DeclRefExpr{{.*}}'dev' 'int'130  //DUMP: OMPDependClause131  //DUMP: DeclRefExpr{{.*}}'ap' 'int *'132  //DUMP: OMPInitClause133  //DUMP: DeclRefExpr{{.*}}'omp_interop_t'{{.*}}Var{{.*}}'I'134  #pragma omp interop device(dev) depend(inout:ap) init(targetsync:I)135 136  //PRINT: #pragma omp interop device(dev) depend(inout : ap) use(I)137  //DUMP: OMPInteropDirective138  //DUMP: OMPDeviceClause139  //DUMP: DeclRefExpr{{.*}}'dev' 'int'140  //DUMP: OMPDependClause141  //DUMP: DeclRefExpr{{.*}}'ap' 'int *'142  //DUMP: OMPUseClause143  //DUMP: DeclRefExpr{{.*}}'omp_interop_t'{{.*}}Var{{.*}}'I'144  #pragma omp interop device(dev) depend(inout:ap) use(I)145 146  //PRINT: #pragma omp interop device(dev) depend(inout : ap) destroy(I)147  //DUMP: OMPInteropDirective148  //DUMP: OMPDeviceClause149  //DUMP: DeclRefExpr{{.*}}'dev' 'int'150  //DUMP: OMPDependClause151  //DUMP: DeclRefExpr{{.*}}'ap' 'int *'152  //DUMP: OMPDestroyClause153  //DUMP: DeclRefExpr{{.*}}'omp_interop_t'{{.*}}Var{{.*}}'I'154  #pragma omp interop device(dev) depend(inout:ap) destroy(I)155 156  //PRINT: #pragma omp interop init(prefer_type(1,2,3,4,5,6), targetsync : I)157  //DUMP: OMPInteropDirective158  //DUMP: OMPInitClause159  //DUMP: DeclRefExpr{{.*}}'omp_interop_t'{{.*}}Var{{.*}}'I'160  //DUMP: IntegerLiteral{{.*}}1161  //DUMP: IntegerLiteral{{.*}}2162  //DUMP: IntegerLiteral{{.*}}3163  //DUMP: IntegerLiteral{{.*}}4164  //DUMP: IntegerLiteral{{.*}}5165  //DUMP: IntegerLiteral{{.*}}6166  #pragma omp interop init(prefer_type(1,2,3,4,5,6),targetsync:I)167 168  //PRINT: #pragma omp interop init(prefer_type(2,4,6,1), targetsync : I)169  //DUMP: OMPInteropDirective170  //DUMP: OMPInitClause171  //DUMP: DeclRefExpr{{.*}}'omp_interop_t'{{.*}}Var{{.*}}'I'172  //DUMP: IntegerLiteral{{.*}}2173  //DUMP: IntegerLiteral{{.*}}4174  //DUMP: IntegerLiteral{{.*}}6175  //DUMP: IntegerLiteral{{.*}}1176  #pragma omp interop init(prefer_type(2,4,6,1),targetsync:I)177 178  //PRINT: #pragma omp interop init(prefer_type("cuda","cuda_driver","opencl","sycl","hip","level_zero"), targetsync : I)179  //DUMP: OMPInteropDirective180  //DUMP: OMPInitClause181  //DUMP: DeclRefExpr{{.*}}'omp_interop_t'{{.*}}Var{{.*}}'I'182  //DUMP: StringLiteral{{.*}}"cuda"183  //DUMP: StringLiteral{{.*}}"cuda_driver"184  //DUMP: StringLiteral{{.*}}"opencl"185  //DUMP: StringLiteral{{.*}}"sycl"186  //DUMP: StringLiteral{{.*}}"hip"187  //DUMP: StringLiteral{{.*}}"level_zero"188  #pragma omp interop init( \189    prefer_type("cuda","cuda_driver","opencl","sycl","hip","level_zero"), \190    targetsync:I)191 192  //PRINT: #pragma omp interop init(prefer_type("level_zero",2,4), targetsync : I)193  //DUMP: OMPInteropDirective194  //DUMP: OMPInitClause195  //DUMP: DeclRefExpr{{.*}}'omp_interop_t'{{.*}}Var{{.*}}'I'196  //DUMP: StringLiteral{{.*}}"level_zero"197  //DUMP: IntegerLiteral{{.*}}2198  //DUMP: IntegerLiteral{{.*}}4199  #pragma omp interop init(prefer_type("level_zero",2,4),targetsync:I)200 201  omp_interop_t J;202 203  //PRINT: #pragma omp interop init(target : I) init(targetsync : J)204  //DUMP: OMPInteropDirective205  //DUMP: OMPInitClause206  //DUMP: DeclRefExpr{{.*}}'omp_interop_t'{{.*}}Var{{.*}}'I'207  //DUMP: OMPInitClause208  //DUMP: DeclRefExpr{{.*}}'omp_interop_t'{{.*}}Var{{.*}}'J'209  #pragma omp interop init(target:I) init(targetsync:J)210 211  //PRINT: #pragma omp interop init(target : I) use(J)212  //DUMP: OMPInteropDirective213  //DUMP: OMPInitClause214  //DUMP: DeclRefExpr{{.*}}'omp_interop_t'{{.*}}Var{{.*}}'I'215  //DUMP: OMPUseClause216  //DUMP: DeclRefExpr{{.*}}'omp_interop_t'{{.*}}Var{{.*}}'J'217  #pragma omp interop init(target:I) use(J)218 219  //PRINT: #pragma omp interop use(I) use(J)220  //DUMP: OMPInteropDirective221  //DUMP: OMPUseClause222  //DUMP: DeclRefExpr{{.*}}'omp_interop_t'{{.*}}Var{{.*}}'I'223  //DUMP: OMPUseClause224  //DUMP: DeclRefExpr{{.*}}'omp_interop_t'{{.*}}Var{{.*}}'J'225  #pragma omp interop use(I) use(J)226 227  //PRINT: #pragma omp interop destroy(I) destroy(J)228  //DUMP: OMPInteropDirective229  //DUMP: OMPDestroyClause230  //DUMP: DeclRefExpr{{.*}}'omp_interop_t'{{.*}}Var{{.*}}'I'231  //DUMP: OMPDestroyClause232  //DUMP: DeclRefExpr{{.*}}'omp_interop_t'{{.*}}Var{{.*}}'J'233  #pragma omp interop destroy(I) destroy(J)234 235  //PRINT: #pragma omp interop init(target : I) destroy(J)236  //DUMP: OMPInteropDirective237  //DUMP: OMPInitClause238  //DUMP: DeclRefExpr{{.*}}'omp_interop_t'{{.*}}Var{{.*}}'I'239  //DUMP: OMPDestroyClause240  //DUMP: DeclRefExpr{{.*}}'omp_interop_t'{{.*}}Var{{.*}}'J'241  #pragma omp interop init(target:I) destroy(J)242 243  //PRINT: #pragma omp interop destroy(I) use(J)244  //DUMP: OMPInteropDirective245  //DUMP: OMPDestroyClause246  //DUMP: DeclRefExpr{{.*}}'omp_interop_t'{{.*}}Var{{.*}}'I'247  //DUMP: OMPUseClause248  //DUMP: DeclRefExpr{{.*}}'omp_interop_t'{{.*}}Var{{.*}}'J'249  #pragma omp interop destroy(I) use(J)250 251  //PRINT: #pragma omp interop init(target : S::so)252  #pragma omp interop init(target: S::so)253}254 255//DUMP: FunctionTemplateDecl{{.*}}fooTemp256//DUMP-NEXT: NonTypeTemplateParmDecl{{.*}}'int{{.*}}I257template <int I>258void fooTemp() {259  omp_interop_t interop_var;260  //PRINT: #pragma omp interop init(prefer_type(I,4,"level_one"), target : interop_var)261  //DUMP: FunctionDecl{{.*}}fooTemp262  //DUMP: OMPInteropDirective263  //DUMP: OMPInitClause264  //DUMP: DeclRefExpr{{.*}}'omp_interop_t'{{.*}}'interop_var'265  //DUMP: DeclRefExpr{{.*}}NonTypeTemplateParm{{.*}}'I' 'int'266  //DUMP: IntegerLiteral{{.*}}'int' 4267  //DUMP: StringLiteral{{.*}}"level_one"268 269  //PRINT: #pragma omp interop init(prefer_type(3,4,"level_one"), target : interop_var)270  //DUMP: FunctionDecl{{.*}}fooTemp271  //DUMP: TemplateArgument integral '3'272  //DUMP: OMPInteropDirective273  //DUMP: OMPInitClause274  //DUMP: DeclRefExpr{{.*}}'omp_interop_t'{{.*}}'interop_var'275  //DUMP: SubstNonTypeTemplateParmExpr{{.*}}'int'276  //DUMP: NonTypeTemplateParmDecl{{.*}}'int'{{.*}}I277  //DUMP: IntegerLiteral{{.*}}'int' 3278  //DUMP: IntegerLiteral{{.*}}'int' 4279  //DUMP: StringLiteral{{.*}}"level_one"280  #pragma omp interop init(prefer_type(I,4,"level_one"), target: interop_var)281}282 283//DUMP: FunctionTemplateDecl{{.*}}barTemp284//DUMP-NEXT: TemplateTypeParmDecl{{.*}}typename{{.*}}T285template <typename T>286void barTemp(T t) {287  //PRINT: #pragma omp interop init(prefer_type(4,"level_one"), target : t)288  //DUMP: FunctionDecl{{.*}}barTemp 'void (T)'289  //DUMP: ParmVarDecl{{.*}}t 'T'290  //DUMP: OMPInteropDirective291  //DUMP: OMPInitClause292  //DUMP: DeclRefExpr{{.*}}ParmVar{{.*}}'t' 'T'293  //DUMP: IntegerLiteral{{.*}}'int' 4294  //DUMP: StringLiteral{{.*}}"level_one"295  #pragma omp interop init(prefer_type(4,"level_one"), target: t)296 297  //PRINT: #pragma omp interop use(t)298  //DUMP: OMPInteropDirective299  //DUMP: OMPUseClause300  //DUMP: DeclRefExpr{{.*}}ParmVar{{.*}}'t' 'T'301  #pragma omp interop use(t)302 303  //PRINT: #pragma omp interop destroy(t)304  //DUMP: OMPInteropDirective305  //DUMP: OMPDestroyClause306  //DUMP: DeclRefExpr{{.*}}ParmVar{{.*}}'t' 'T'307  #pragma omp interop destroy(t)308 309  //DUMP: FunctionDecl{{.*}}barTemp 'void (void *)'310  //DUMP: TemplateArgument type 'void *'311  //DUMP: ParmVarDecl{{.*}}t 'void *'312  //DUMP: OMPInteropDirective313  //DUMP: OMPInitClause314  //DUMP: DeclRefExpr{{.*}}ParmVar{{.*}}'t' 'void *'315  //PRINT: #pragma omp interop init(prefer_type(4,"level_one"), target : t)316  //DUMP: OMPInteropDirective317  //DUMP: OMPUseClause318  //DUMP: DeclRefExpr{{.*}}ParmVar{{.*}}'t' 'void *'319  //PRINT: #pragma omp interop use(t)320  //DUMP: OMPInteropDirective321  //DUMP: OMPDestroyClause322  //DUMP: DeclRefExpr{{.*}}ParmVar{{.*}}'t' 'void *'323  //PRINT: #pragma omp interop destroy(t)324}325 326void bar()327{328  fooTemp<3>();329  omp_interop_t Ivar;330  barTemp(Ivar);331  S s;332}333 334#endif // HEADER335