brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.9 KiB · 03c258a Raw
227 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#ifndef PCH_HELPER7#define PCH_HELPER8 9int Global;10short GlobalArray[5];11 12void NormalUses(float *PointerParam) {13  // CHECK: FunctionDecl{{.*}}NormalUses14  // CHECK: ParmVarDecl15  // CHECK-NEXT: CompoundStmt16 17#pragma acc parallel loop private(Global, GlobalArray[2])18  for (int i = 5; i < 10; ++i);19  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} parallel loop20  // CHECK-NEXT: private clause21  // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int'22  // CHECK-NEXT: ArraySubscriptExpr{{.*}}'short' lvalue23  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'short *' <ArrayToPointerDecay>24  // CHECK-NEXT: DeclRefExpr{{.*}}'short[5]' lvalue Var{{.*}}'GlobalArray' 'short[5]'25  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 226  // CHECK-NEXT: ForStmt27  // CHECK: NullStmt28 29#pragma acc serial loop private(GlobalArray, PointerParam[Global])30  for (int i = 5; i < 10; ++i);31  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} serial loop32  // CHECK-NEXT: private clause33  // CHECK-NEXT: DeclRefExpr{{.*}}'short[5]' lvalue Var{{.*}}'GlobalArray' 'short[5]'34  // CHECK-NEXT: ArraySubscriptExpr{{.*}}'float' lvalue35  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'float *' <LValueToRValue>36  // CHECK-NEXT: DeclRefExpr{{.*}}'float *' lvalue ParmVar{{.*}}'PointerParam' 'float *'37  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>38  // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int'39  // CHECK-NEXT: ForStmt40  // CHECK: NullStmt41 42#pragma acc parallel loop firstprivate(GlobalArray, PointerParam[Global])43  for (int i = 5; i < 10; ++i);44  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} parallel loop45  // CHECK-NEXT: firstprivate clause46  // CHECK-NEXT: DeclRefExpr{{.*}}'short[5]' lvalue Var{{.*}}'GlobalArray' 'short[5]'47  // CHECK-NEXT: ArraySubscriptExpr{{.*}}'float' lvalue48  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'float *' <LValueToRValue>49  // CHECK-NEXT: DeclRefExpr{{.*}}'float *' lvalue ParmVar{{.*}}'PointerParam' 'float *'50  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>51  // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int'52  // CHECK-NEXT: ForStmt53  // CHECK: NullStmt54 55#pragma acc serial loop firstprivate(GlobalArray, PointerParam[Global : Global])56  for (int i = 5; i < 10; ++i);57  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} serial loop58  // CHECK-NEXT: firstprivate clause59  // CHECK-NEXT: DeclRefExpr{{.*}}'short[5]' lvalue Var{{.*}}'GlobalArray' 'short[5]'60  // CHECK-NEXT: ArraySectionExpr61  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'float *' <LValueToRValue>62  // CHECK-NEXT: DeclRefExpr{{.*}}'float *' lvalue ParmVar{{.*}} 'PointerParam' 'float *'63  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>64  // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int'65  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>66  // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int'67  // CHECK-NEXT: ForStmt68  // CHECK: NullStmt69 70}71template<auto &NTTP, typename T, typename U>72void TemplUses(T t, U u, T*PointerParam) {73 74  // CHECK: FunctionTemplateDecl{{.*}}TemplUses75  // CHECK-NEXT: NonTypeTemplateParmDecl {{.*}}referenced 'auto &' depth 0 index 0 NTTP76  // CHECK-NEXT: TemplateTypeParmDecl{{.*}}typename depth 0 index 1 T77  // CHECK-NEXT: TemplateTypeParmDecl{{.*}}typename depth 0 index 2 U78  // CHECK-NEXT: FunctionDecl{{.*}} TemplUses 'void (T, U, T *)'79  // CHECK-NEXT: ParmVarDecl{{.*}} referenced t 'T'80  // CHECK-NEXT: ParmVarDecl{{.*}} referenced u 'U'81  // CHECK-NEXT: ParmVarDecl{{.*}} referenced PointerParam 'T *'82  // CHECK-NEXT: CompoundStmt83#pragma acc serial loop private(GlobalArray, PointerParam[Global])84  for (int i = 5; i < 10; ++i);85  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} serial loop86  // CHECK-NEXT: private clause87  // CHECK-NEXT: DeclRefExpr{{.*}}'short[5]' lvalue Var{{.*}}'GlobalArray' 'short[5]'88  // CHECK-NEXT: ArraySubscriptExpr{{.*}}'T' lvalue89  // CHECK-NEXT: DeclRefExpr{{.*}}'T *' lvalue ParmVar{{.*}}'PointerParam' 'T *'90  // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int'91  // CHECK-NEXT: ForStmt92  // CHECK: NullStmt93 94#pragma acc kernels loop private(t, u)95  for (int i = 5; i < 10; ++i);96  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} kernels loop97  // CHECK-NEXT: private clause98  // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T'99  // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U'100  // CHECK-NEXT: ForStmt101  // CHECK: NullStmt102 103#pragma acc parallel loop firstprivate(t, u)104  for (int i = 5; i < 10; ++i);105  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} parallel loop106  // CHECK-NEXT: firstprivate clause107  // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T'108  // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U'109  // CHECK-NEXT: ForStmt110  // CHECK: NullStmt111 112#pragma acc kernels loop private(t) private(u)113  for (int i = 5; i < 10; ++i);114  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} kernels loop115  // CHECK-NEXT: private clause116  // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T'117  // CHECK-NEXT: private clause118  // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U'119  // CHECK-NEXT: ForStmt120  // CHECK: NullStmt121 122#pragma acc kernels loop private(t) private(NTTP, u)123  for (int i = 5; i < 10; ++i);124  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} kernels loop125  // CHECK-NEXT: private clause126  // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T'127  // CHECK-NEXT: private clause128  // CHECK-NEXT: DeclRefExpr{{.*}}'auto' lvalue NonTypeTemplateParm{{.*}} 'NTTP' 'auto &'129  // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U'130  // CHECK-NEXT: ForStmt131  // CHECK: NullStmt132 133#pragma acc parallel loop private(t) firstprivate(NTTP, u)134  for (int i = 5; i < 10; ++i);135  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} parallel loop136  // CHECK-NEXT: private clause137  // CHECK-NEXT: DeclRefExpr{{.*}}'T' lvalue ParmVar{{.*}} 't' 'T'138  // CHECK-NEXT: firstprivate clause139  // CHECK-NEXT: DeclRefExpr{{.*}}'auto' lvalue NonTypeTemplateParm{{.*}} 'NTTP' 'auto &'140  // CHECK-NEXT: DeclRefExpr{{.*}}'U' lvalue ParmVar{{.*}} 'u' 'U'141  // CHECK-NEXT: ForStmt142  // CHECK: NullStmt143 144  // Check the instantiated versions of the above.145  // CHECK-NEXT: FunctionDecl{{.*}} used TemplUses 'void (int, int *, int *)' implicit_instantiation146  // CHECK-NEXT: TemplateArgument decl147  // CHECK-NEXT: Var{{.*}} 'CEVar' 'const unsigned int'148  // CHECK-NEXT: TemplateArgument type 'int'149  // CHECK-NEXT: BuiltinType{{.*}} 'int'150  // CHECK-NEXT: TemplateArgument type 'int[1]'151  // CHECK-NEXT: ConstantArrayType{{.*}} 'int[1]'{{.*}} 1152  // CHECK-NEXT: BuiltinType{{.*}} 'int'153  // CHECK-NEXT: ParmVarDecl{{.*}} used t 'int'154  // CHECK-NEXT: ParmVarDecl{{.*}} used u 'int *'155  // CHECK-NEXT: ParmVarDecl{{.*}} used PointerParam 'int *'156  // CHECK-NEXT: CompoundStmt157 158// #pragma acc serial loop private(GlobalArray, PointerParam[Global])159  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} serial loop160  // CHECK-NEXT: private clause161  // CHECK-NEXT: DeclRefExpr{{.*}}'short[5]' lvalue Var{{.*}}'GlobalArray' 'short[5]'162  // CHECK-NEXT: ArraySubscriptExpr{{.*}}'int' lvalue163  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int *' <LValueToRValue>164  // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}}'PointerParam' 'int *'165  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>166  // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var{{.*}}'Global' 'int'167  // CHECK-NEXT: ForStmt168  // CHECK: NullStmt169 170// #pragma acc kernels loop private(t, u)171  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} kernels loop172  // CHECK-NEXT: private clause173  // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int'174  // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *'175  // CHECK-NEXT: ForStmt176  // CHECK: NullStmt177 178// #pragma acc parallel loop firstprivate(t, u)179  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} parallel loop180  // CHECK-NEXT: firstprivate clause181  // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int'182  // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *'183  // CHECK-NEXT: ForStmt184  // CHECK: NullStmt185 186// #pragma acc kernels loop private(t) private(u)187  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} kernels loop188  // CHECK-NEXT: private clause189  // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int'190  // CHECK-NEXT: private clause191  // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *'192  // CHECK-NEXT: ForStmt193  // CHECK: NullStmt194 195// #pragma acc kernels loop private(t) private(NTTP, u)196  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} kernels loop197  // CHECK-NEXT: private clause198  // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int'199  // CHECK-NEXT: private clause200  // CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}}'const unsigned int' lvalue201  // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} referenced 'auto &' depth 0 index 0 NTTP202  // CHECK-NEXT: DeclRefExpr{{.*}}'const unsigned int' lvalue Var{{.*}} 'CEVar' 'const unsigned int'203  // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *'204  // CHECK-NEXT: ForStmt205  // CHECK: NullStmt206 207// #pragma acc parallel loop private(t) firstprivate(NTTP, u)208  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} parallel loop209  // CHECK-NEXT: private clause210  // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue ParmVar{{.*}} 't' 'int'211  // CHECK-NEXT: firstprivate clause212  // CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}}'const unsigned int' lvalue213  // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} referenced 'auto &' depth 0 index 0 NTTP214  // CHECK-NEXT: DeclRefExpr{{.*}}'const unsigned int' lvalue Var{{.*}} 'CEVar' 'const unsigned int'215  // CHECK-NEXT: DeclRefExpr{{.*}}'int *' lvalue ParmVar{{.*}} 'u' 'int *'216  // CHECK-NEXT: ForStmt217  // CHECK: NullStmt218}219 220void Inst() {221  static constexpr unsigned CEVar = 1;222  int i;223  int Arr[5];224  TemplUses<CEVar, int, int[1]>({}, {}, &i);225}226#endif // PCH_HELPER227