brintos

brintos / llvm-project-archived public Read only

0
0
Text · 14.6 KiB · e39a436 Raw
408 lines · cpp
1// RUN: %clang_cc1 %s -fopenacc -ast-dump | FileCheck %s2 3// Test this with PCH.4// RUN: %clang_cc1 %s -fopenacc -emit-pch -o %t %s5// RUN: %clang_cc1 %s -fopenacc -include-pch %t -ast-dump-all | FileCheck %s6 7#ifndef PCH_HELPER8#define PCH_HELPER9 10int *Global;11// CHECK: VarDecl{{.*}}Global 'int *'12int GlobalArray[5];13// CHECK-NEXT: VarDecl{{.*}}GlobalArray 'int[5]'14#pragma acc declare deviceptr(Global), copyin(readonly, always: GlobalArray)15// CHECK-NEXT: OpenACCDeclareDecl16// CHECK-NEXT: deviceptr clause17// CHECK-NEXT: DeclRefExpr{{.*}}'Global' 'int *'18// CHECK-NEXT: copyin clause modifiers: always, readonly19// CHECK-NEXT: DeclRefExpr{{.*}}'GlobalArray' 'int[5]'20 21int *Global1;22// CHECK-NEXT: VarDecl{{.*}}Global1 'int *'23int GlobalArray1[5];24// CHECK-NEXT: VarDecl{{.*}}GlobalArray1 'int[5]'25_Pragma("acc declare deviceptr(Global1), copyin(GlobalArray1)")26// CHECK-NEXT: OpenACCDeclareDecl27// CHECK-NEXT: deviceptr clause28// CHECK-NEXT: DeclRefExpr{{.*}}'Global1' 'int *'29// CHECK-NEXT: copyin clause30// CHECK-NEXT: DeclRefExpr{{.*}}'GlobalArray1' 'int[5]'31 32int *Global2;33// CHECK: VarDecl{{.*}}Global2 'int *'34int GlobalArray2[5];35// CHECK-NEXT: VarDecl{{.*}}GlobalArray2 'int[5]'36#pragma acc declare create(Global2, GlobalArray2)37// CHECK-NEXT: OpenACCDeclareDecl38// CHECK-NEXT: create clause39// CHECK-NEXT: DeclRefExpr{{.*}}'Global2' 'int *'40// CHECK-NEXT: DeclRefExpr{{.*}}'GlobalArray2' 'int[5]'41 42int Global3;43// CHECK: VarDecl{{.*}}Global3 'int'44int GlobalArray3[5];45// CHECK-NEXT: VarDecl{{.*}}GlobalArray3 'int[5]'46#pragma acc declare link(Global3) device_resident(GlobalArray3)47// CHECK-NEXT: OpenACCDeclareDecl48// CHECK-NEXT: link clause49// CHECK-NEXT: DeclRefExpr{{.*}}'Global3' 'int'50// CHECK-NEXT: device_resident clause51// CHECK-NEXT: DeclRefExpr{{.*}}'GlobalArray3' 'int[5]'52int GlobalArray4[5];53// CHECK-NEXT: VarDecl{{.*}}GlobalArray4 'int[5]'54#pragma acc declare link(GlobalArray4[1:1])55// CHECK-NEXT: OpenACCDeclareDecl56// CHECK-NEXT: link clause57// CHECK-NEXT: ArraySectionExpr58 59namespace NS {60int NSVar;61// CHECK: VarDecl{{.*}}NSVar 'int'62int NSArray[5];63// CHECK-NEXT: VarDecl{{.*}}NSArray 'int[5]'64#pragma acc declare create(NSVar, NSArray)65// CHECK-NEXT: OpenACCDeclareDecl66// CHECK-NEXT: create clause67// CHECK-NEXT: DeclRefExpr{{.*}}'NSVar' 'int'68// CHECK-NEXT: DeclRefExpr{{.*}}'NSArray' 'int[5]'69}70 71struct Struct {72  // CHECK-NEXT: CXXRecordDecl{{.*}} Struct definition73  // Skip DefinitionData and go right to the definition.74  // CHECK: CXXRecordDecl{{.*}} implicit struct Struct75  static const int StaticMem = 5;76  // CHECK-NEXT: VarDecl {{.*}} StaticMem 'const int' static cinit77  // CHECK-NEXT: IntegerLiteral{{.*}}'int' 578  static const int StaticMem2 = 5;79  // CHECK-NEXT: VarDecl {{.*}} StaticMem2 'const int' static cinit80  // CHECK-NEXT: IntegerLiteral{{.*}}'int' 581  static const int StaticMemArray[5];82  // CHECK-NEXT: VarDecl {{.*}} StaticMemArray 'const int[5]' static83  static const int StaticMemArray2[5];84  // CHECK-NEXT: VarDecl {{.*}} StaticMemArray2 'const int[5]' static85#pragma acc declare copyin(StaticMem, StaticMemArray) create(StaticMem2, StaticMemArray2)86  // CHECK-NEXT: OpenACCDeclareDecl87  // CHECK-NEXT: copyin clause88  // CHECK-NEXT: DeclRefExpr{{.*}}'StaticMem' 'const int'89  // CHECK-NEXT: DeclRefExpr{{.*}}'StaticMemArray' 'const int[5]'90  // CHECK-NEXT: create clause91  // CHECK-NEXT: DeclRefExpr{{.*}}'StaticMem2' 'const int'92  // CHECK-NEXT: DeclRefExpr{{.*}}'StaticMemArray2' 'const int[5]'93 94  void MemFunc1(int Arg) {95    // CHECK-NEXT: CXXMethodDecl{{.*}}MemFunc1 'void (int)'96    // CHECK-NEXT: ParmVarDecl{{.*}} Arg 'int'97    // CHECK-NEXT: CompoundStmt98    int Local;99    // CHECK-NEXT: DeclStmt100    // CHECK-NEXT: VarDecl{{.*}} Local 'int'101    int LocalArray[5];102    // CHECK-NEXT: DeclStmt103    // CHECK-NEXT: VarDecl{{.*}} LocalArray 'int[5]'104#pragma acc declare present(Arg, Local, LocalArray)105    // CHECK-NEXT: DeclStmt106    // CHECK-NEXT: OpenACCDeclareDecl107    // CHECK-NEXT: present clause108    // CHECK-NEXT: DeclRefExpr{{.*}}'Arg' 'int'109    // CHECK-NEXT: DeclRefExpr{{.*}}'Local' 'int'110    // CHECK-NEXT: DeclRefExpr{{.*}}'LocalArray' 'int[5]'111  }112  void MemFunc2(int Arg);113  // CHECK: CXXMethodDecl{{.*}}MemFunc2114};115void Struct::MemFunc2(int Arg) {116  // CHECK: CXXMethodDecl{{.*}}MemFunc2 'void (int)'117  // CHECK-NEXT: ParmVarDecl{{.*}} Arg 'int'118  // CHECK-NEXT: CompoundStmt119  int Local;120  // CHECK-NEXT: DeclStmt121  // CHECK-NEXT: VarDecl{{.*}} Local 'int'122  int LocalArray[5];123  // CHECK-NEXT: DeclStmt124  // CHECK-NEXT: VarDecl{{.*}} LocalArray 'int[5]'125#pragma acc declare present(Arg, Local, LocalArray)126  // CHECK-NEXT: DeclStmt127  // CHECK-NEXT: OpenACCDeclareDecl128  // CHECK-NEXT: present clause129  // CHECK-NEXT: DeclRefExpr{{.*}}'Arg' 'int'130  // CHECK-NEXT: DeclRefExpr{{.*}}'Local' 'int'131  // CHECK-NEXT: DeclRefExpr{{.*}}'LocalArray' 'int[5]'132}133 134void NormalFunc(int Arg) {135  // CHECK-NEXT: FunctionDecl{{.*}}NormalFunc 'void (int)'136  // CHECK-NEXT: ParmVarDecl{{.*}} Arg 'int'137  // CHECK-NEXT: CompoundStmt138  int Local;139  // CHECK-NEXT: DeclStmt140  // CHECK-NEXT: VarDecl{{.*}} Local 'int'141  int LocalArray[5];142  // CHECK-NEXT: DeclStmt143  // CHECK-NEXT: VarDecl{{.*}} LocalArray 'int[5]'144#pragma acc declare present(Arg, Local, LocalArray)145  // CHECK-NEXT: DeclStmt146  // CHECK-NEXT: OpenACCDeclareDecl147  // CHECK-NEXT: present clause148  // CHECK-NEXT: DeclRefExpr{{.*}}'Arg' 'int'149  // CHECK-NEXT: DeclRefExpr{{.*}}'Local' 'int'150  // CHECK-NEXT: DeclRefExpr{{.*}}'LocalArray' 'int[5]'151}152 153template<typename T>154struct DependentStruct {155  // CHECK: ClassTemplateDecl{{.*}}DependentStruct156  // CHECK-NEXT: TemplateTypeParmDecl{{.*}}depth 0 index 0 T157  // CHECK-NEXT: CXXRecordDecl{{.*}}DependentStruct definition158  // CHECK: CXXRecordDecl{{.*}}implicit struct DependentStruct159  static const T StaticMem = 5;160  // CHECK-NEXT: VarDecl{{.*}} StaticMem 'const T' static cinit161  // CHECK-NEXT: IntegerLiteral{{.*}}'int' 5162  static const T StaticMem2 = 5;163  // CHECK-NEXT: VarDecl{{.*}} StaticMem2 'const T' static cinit164  // CHECK-NEXT: IntegerLiteral{{.*}}'int' 5165  static constexpr T StaticMemArray[5] = {};166  // CHECK-NEXT: VarDecl{{.*}} StaticMemArray 'const T[5]'167  // CHECK-NEXT: InitListExpr{{.*}}'void'168  static constexpr T StaticMemArray2[5] = {};169  // CHECK-NEXT: VarDecl{{.*}} StaticMemArray2 'const T[5]'170  // CHECK-NEXT: InitListExpr{{.*}}'void'171#pragma acc declare copyin(StaticMem, StaticMemArray) create(zero: StaticMem2, StaticMemArray2)172  // CHECK-NEXT: OpenACCDeclareDecl173  // CHECK-NEXT: copyin clause174  // CHECK-NEXT: DeclRefExpr{{.*}}'StaticMem' 'const T'175  // CHECK-NEXT: DeclRefExpr{{.*}}'StaticMemArray' 'const T[5]'176  // CHECK-NEXT: create clause modifiers: zero177  // CHECK-NEXT: DeclRefExpr{{.*}}'StaticMem2' 'const T'178  // CHECK-NEXT: DeclRefExpr{{.*}}'StaticMemArray2' 'const T[5]'179 180  template<typename U>181  void DepMemFunc1(U Arg, U Arg2) {182    // CHECK-NEXT: FunctionTemplateDecl{{.*}}DepMemFunc1183    // CHECK-NEXT: TemplateTypeParmDecl{{.*}}depth 1 index 0 U184    // CHECK-NEXT: CXXMethodDecl{{.*}}DepMemFunc1 'void (U, U)'185    // CHECK-NEXT: ParmVarDecl{{.*}} Arg 'U'186    // CHECK-NEXT: ParmVarDecl{{.*}} Arg2 'U'187    // CHECK-NEXT: CompoundStmt188    T Local, Local2;189    // CHECK-NEXT: DeclStmt190    // CHECK-NEXT: VarDecl{{.*}} Local 'T'191    // CHECK-NEXT: VarDecl{{.*}} Local2 'T'192    U LocalArray[5];193    // CHECK-NEXT: DeclStmt194    // CHECK-NEXT: VarDecl{{.*}} LocalArray 'U[5]'195    U LocalArray2[5];196    // CHECK-NEXT: DeclStmt197    // CHECK-NEXT: VarDecl{{.*}} LocalArray2 'U[5]'198#pragma acc declare copy(always, alwaysin: Arg, Local, LocalArray) copyout(zero: Arg2, Local2, LocalArray2)199    // CHECK-NEXT: DeclStmt200    // CHECK-NEXT: OpenACCDeclareDecl201    // CHECK-NEXT: copy clause modifiers: always, alwaysin202    // CHECK-NEXT: DeclRefExpr{{.*}}'Arg' 'U'203    // CHECK-NEXT: DeclRefExpr{{.*}}'Local' 'T'204    // CHECK-NEXT: DeclRefExpr{{.*}}'LocalArray' 'U[5]'205    // CHECK-NEXT: copyout clause modifiers: zero206    // CHECK-NEXT: DeclRefExpr{{.*}}'Arg2' 'U'207    // CHECK-NEXT: DeclRefExpr{{.*}}'Local2' 'T'208    // CHECK-NEXT: DeclRefExpr{{.*}}'LocalArray2' 'U[5]'209 210    extern T Local3;211    // CHECK-NEXT: DeclStmt212    // CHECK-NEXT: VarDecl{{.*}} Local3 'T' extern213    T Local4;214    // CHECK-NEXT: DeclStmt215    // CHECK-NEXT: VarDecl{{.*}} Local4 'T'216#pragma acc declare link(Local3) device_resident(Local4)217    // CHECK-NEXT: DeclStmt218    // CHECK-NEXT: OpenACCDeclareDecl219    // CHECK-NEXT: link clause220    // CHECK-NEXT: DeclRefExpr{{.*}}'Local3' 'T'221    // CHECK-NEXT: device_resident clause222    // CHECK-NEXT: DeclRefExpr{{.*}}'Local4' 'T'223  }224  template<typename U>225  void DepMemFunc2(U Arg);226  // CHECK-NEXT: FunctionTemplateDecl{{.*}}DepMemFunc2227  // CHECK-NEXT: TemplateTypeParmDecl{{.*}}depth 1 index 0 U228  // CHECK-NEXT: CXXMethodDecl{{.*}}DepMemFunc2 'void (U)'229  // CHECK-NEXT: ParmVarDecl{{.*}} Arg 'U'230};231 232// Instantiation of class.233// CHECK-NEXT: ClassTemplateSpecializationDecl{{.*}}DependentStruct definition234// CHECK: TemplateArgument type 'int'235// CHECK-NEXT: BuiltinType{{.*}}'int'236// CHECK-NEXT: CXXRecordDecl{{.*}} struct DependentStruct237 238// CHECK-NEXT: VarDecl{{.*}} StaticMem 'const int' 239// CHECK-NEXT: IntegerLiteral{{.*}}'int' 5240 241// CHECK-NEXT: VarDecl{{.*}} StaticMem2 'const int' 242// CHECK-NEXT: IntegerLiteral{{.*}}'int' 5243//244// CHECK-NEXT: VarDecl{{.*}} StaticMemArray 'const int[5]'245// CHECK-NEXT: value: Array size=5246// CHECK-NEXT: filler: 5 x Int 0247// CHECK-NEXT: InitListExpr{{.*}} 'const int[5]'248// CHECK-NEXT: array_filler249 250// CHECK-NEXT: VarDecl{{.*}} StaticMemArray2 'const int[5]'251// CHECK-NEXT: value: Array size=5252// CHECK-NEXT: filler: 5 x Int 0253// CHECK-NEXT: InitListExpr{{.*}} 'const int[5]'254// CHECK-NEXT: array_filler255 256// CHECK-NEXT: OpenACCDeclareDecl257// CHECK-NEXT: copyin clause258// CHECK-NEXT: DeclRefExpr{{.*}}'StaticMem' 'const int'259// CHECK-NEXT: DeclRefExpr{{.*}}'StaticMemArray' 'const int[5]'260// CHECK-NEXT: create clause modifiers: zero261// CHECK-NEXT: DeclRefExpr{{.*}}'StaticMem2' 'const int'262// CHECK-NEXT: DeclRefExpr{{.*}}'StaticMemArray2' 'const int[5]'263 264// CHECK-NEXT: FunctionTemplateDecl{{.*}} DepMemFunc1265// CHECK-NEXT: TemplateTypeParmDecl{{.*}}depth 0 index 0 U266// CHECK-NEXT: CXXMethodDecl{{.*}}DepMemFunc1 'void (U, U)'267// CHECK-NEXT: ParmVarDecl{{.*}} Arg 'U'268// CHECK-NEXT: ParmVarDecl{{.*}} Arg2 'U'269// CHECK-NEXT: CXXMethodDecl{{.*}}DepMemFunc1 'void (float, float)'270// CHECK-NEXT: TemplateArgument type 'float'271// CHECK-NEXT: BuiltinType{{.*}}'float'272// CHECK-NEXT: ParmVarDecl{{.*}} Arg 'float'273// CHECK-NEXT: ParmVarDecl{{.*}} Arg2 'float'274// CHECK-NEXT: CompoundStmt275 276// CHECK-NEXT: DeclStmt277// CHECK-NEXT: VarDecl{{.*}} Local 'int'278// CHECK-NEXT: VarDecl{{.*}} Local2 'int'279 280// CHECK-NEXT: DeclStmt281// CHECK-NEXT: VarDecl{{.*}} LocalArray 'float[5]'282 283// CHECK-NEXT: DeclStmt284// CHECK-NEXT: VarDecl{{.*}} LocalArray2 'float[5]'285 286// CHECK-NEXT: DeclStmt287// CHECK-NEXT: OpenACCDeclareDecl288// CHECK-NEXT: copy clause modifiers: always, alwaysin289// CHECK-NEXT: DeclRefExpr{{.*}}'Arg' 'float'290// CHECK-NEXT: DeclRefExpr{{.*}}'Local' 'int'291// CHECK-NEXT: DeclRefExpr{{.*}}'LocalArray' 'float[5]'292// CHECK-NEXT: copyout clause modifiers: zero293// CHECK-NEXT: DeclRefExpr{{.*}}'Arg2' 'float'294// CHECK-NEXT: DeclRefExpr{{.*}}'Local2' 'int'295// CHECK-NEXT: DeclRefExpr{{.*}}'LocalArray2' 'float[5]'296 297// CHECK-NEXT: DeclStmt298// CHECK-NEXT: VarDecl{{.*}} Local3 'int' extern299// CHECK-NEXT: DeclStmt300// CHECK-NEXT: VarDecl{{.*}} Local4 'int'301// CHECK-NEXT: DeclStmt302// CHECK-NEXT: OpenACCDeclareDecl303// CHECK-NEXT: link clause304// CHECK-NEXT: DeclRefExpr{{.*}}'Local3' 'int'305// CHECK-NEXT: device_resident clause306// CHECK-NEXT: DeclRefExpr{{.*}}'Local4' 'int'307 308// CHECK-NEXT: FunctionTemplateDecl{{.*}}DepMemFunc2309// CHECK-NEXT: TemplateTypeParmDecl{{.*}}depth 0 index 0 U310// CHECK-NEXT: CXXMethodDecl{{.*}}DepMemFunc2 'void (U)'311// CHECK-NEXT: ParmVarDecl{{.*}} Arg 'U'312// CHECK-NEXT: CXXMethodDecl{{.*}}DepMemFunc2 'void (float)'313// CHECK-NEXT: TemplateArgument type 'float'314// CHECK-NEXT: BuiltinType{{.*}}'float'315// CHECK-NEXT: ParmVarDecl{{.*}} Arg 'float'316// CHECK-NEXT: CompoundStmt317 318// CHECK-NEXT: DeclStmt319// CHECK-NEXT: VarDecl{{.*}} Local 'int'320 321// CHECK-NEXT: DeclStmt322// CHECK-NEXT: VarDecl{{.*}} LocalArray 'float[5]'323 324// CHECK-NEXT: DeclStmt325// CHECK-NEXT: OpenACCDeclareDecl326// CHECK-NEXT: present clause327// CHECK-NEXT: DeclRefExpr{{.*}}'Arg' 'float'328// CHECK-NEXT: DeclRefExpr{{.*}}'Local' 'int'329// CHECK-NEXT: DeclRefExpr{{.*}}'LocalArray' 'float[5]'330 331template<typename T>332template<typename U>333void DependentStruct<T>::DepMemFunc2(U Arg) {334  // CHECK: FunctionTemplateDecl{{.*}} DepMemFunc2335  // CHECK-NEXT: TemplateTypeParmDecl{{.*}}depth 1 index 0 U336  // CHECK-NEXT: CXXMethodDecl{{.*}}DepMemFunc2 'void (U)'337  // CHECK-NEXT: ParmVarDecl{{.*}} Arg 'U'338  // CHECK-NEXT: CompoundStmt339  T Local;340  // CHECK-NEXT: DeclStmt341  // CHECK-NEXT: VarDecl{{.*}} Local 'T'342  U LocalArray[5];343  // CHECK-NEXT: DeclStmt344  // CHECK-NEXT: VarDecl{{.*}} LocalArray 'U[5]'345#pragma acc declare present(Arg, Local, LocalArray)346  // CHECK-NEXT: DeclStmt347  // CHECK-NEXT: OpenACCDeclareDecl348  // CHECK-NEXT: present clause349  // CHECK-NEXT: DeclRefExpr{{.*}}'Arg' 'U'350  // CHECK-NEXT: DeclRefExpr{{.*}}'Local' 'T'351  // CHECK-NEXT: DeclRefExpr{{.*}}'LocalArray' 'U[5]'352}353 354template<typename T, unsigned Size>355void DependentFunc(T Arg) {356  // CHECK: FunctionTemplateDecl{{.*}} DependentFunc357  // CHECK-NEXT: TemplateTypeParmDecl{{.*}}depth 0 index 0 T358  // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} depth 0 index 1 Size359  // CHECK-NEXT: FunctionDecl{{.*}}DependentFunc 'void (T)'360  // CHECK-NEXT: ParmVarDecl{{.*}} Arg 'T'361  // CHECK-NEXT: CompoundStmt362  T Local;363  // CHECK-NEXT: DeclStmt364  // CHECK-NEXT: VarDecl{{.*}} Local 'T'365  T LocalArray[Size];366  // CHECK-NEXT: DeclStmt367  // CHECK-NEXT: VarDecl{{.*}} LocalArray 'T[Size]'368 369#pragma acc declare present(Arg, Local, LocalArray)370  // CHECK-NEXT: DeclStmt371  // CHECK-NEXT: OpenACCDeclareDecl372  // CHECK-NEXT: present clause373  // CHECK-NEXT: DeclRefExpr{{.*}}'Arg' 'T'374  // CHECK-NEXT: DeclRefExpr{{.*}}'Local' 'T'375  // CHECK-NEXT: DeclRefExpr{{.*}}'LocalArray' 'T[Size]'376 377  // Instantiation:378  // CHECK-NEXT: FunctionDecl{{.*}} DependentFunc 'void (int)'379  // CHECK-NEXT: TemplateArgument type 'int'380  // CHECK-NEXT: BuiltinType{{.*}}'int'381  // CHECK-NEXT: TemplateArgument integral '5U'382  // CHECK-NEXT: ParmVarDecl{{.*}} Arg 'int'383  // CHECK-NEXT: CompoundStmt384 385  // CHECK-NEXT: DeclStmt386  // CHECK-NEXT: VarDecl{{.*}} Local 'int'387 388  // CHECK-NEXT: DeclStmt389  // CHECK-NEXT: VarDecl{{.*}} LocalArray 'int[5]'390 391  // CHECK-NEXT: DeclStmt392  // CHECK-NEXT: OpenACCDeclareDecl393  // CHECK-NEXT: present clause394  // CHECK-NEXT: DeclRefExpr{{.*}}'Arg' 'int'395  // CHECK-NEXT: DeclRefExpr{{.*}}'Local' 'int'396  // CHECK-NEXT: DeclRefExpr{{.*}}'LocalArray' 'int[5]'397}398 399void use() {400  float i;401  DependentStruct<int> S;402  S.DepMemFunc1(i, i);403  S.DepMemFunc2(i);404  DependentFunc<int, 5>(i);405}406 407#endif // PCH_HELPER408