brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.4 KiB · ca28e32 Raw
240 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 some_int();11long some_long();12 13void NormalUses() {14  // CHECK: FunctionDecl{{.*}}NormalUses15  // CHECK-NEXT: CompoundStmt16 17#pragma acc parallel loop wait18  for (int i = 0; i < 5; ++i) {}19  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}}parallel loop20  // CHECK-NEXT: wait clause21  // CHECK-NEXT: <<<NULL>>>22  // CHECK-NEXT: ForStmt23#pragma acc serial loop wait24  for (int i = 0; i < 5; ++i) {}25  // CHECK: OpenACCCombinedConstruct{{.*}}serial loop26  // CHECK-NEXT: wait clause27  // CHECK-NEXT: <<<NULL>>>28  // CHECK-NEXT: ForStmt29#pragma acc kernels loop wait(some_int(), some_long())30  for (int i = 0; i < 5; ++i) {}31  // CHECK: OpenACCCombinedConstruct{{.*}}kernels loop32  // CHECK-NEXT: wait clause33  // CHECK-NEXT: <<<NULL>>>34  // CHECK-NEXT: CallExpr{{.*}}'int'35  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' <FunctionToPointerDecay>36  // CHECK-NEXT: DeclRefExpr{{.*}}'int ()' lvalue Function{{.*}} 'some_int' 'int ()'37  // CHECK-NEXT: CallExpr{{.*}}'long'38  // CHECK-NEXT: ImplicitCastExpr{{.*}}'long (*)()' <FunctionToPointerDecay>39  // CHECK-NEXT: DeclRefExpr{{.*}}'long ()' lvalue Function{{.*}} 'some_long' 'long ()'40  // CHECK-NEXT: ForStmt41#pragma acc parallel loop wait(queues:some_int(), some_long())42  for (int i = 0; i < 5; ++i) {}43  // CHECK: OpenACCCombinedConstruct{{.*}}parallel loop44  // CHECK-NEXT: wait clause has queues tag45  // CHECK-NEXT: <<<NULL>>>46  // CHECK-NEXT: CallExpr{{.*}}'int'47  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' <FunctionToPointerDecay>48  // CHECK-NEXT: DeclRefExpr{{.*}}'int ()' lvalue Function{{.*}} 'some_int' 'int ()'49  // CHECK-NEXT: CallExpr{{.*}}'long'50  // CHECK-NEXT: ImplicitCastExpr{{.*}}'long (*)()' <FunctionToPointerDecay>51  // CHECK-NEXT: DeclRefExpr{{.*}}'long ()' lvalue Function{{.*}} 'some_long' 'long ()'52  // CHECK-NEXT: ForStmt53#pragma acc serial loop wait(devnum: some_int() :some_int(), some_long())54  for (int i = 0; i < 5; ++i) {}55  // CHECK: OpenACCCombinedConstruct{{.*}}serial loop56  // CHECK-NEXT: wait clause has devnum57  // CHECK-NEXT: CallExpr{{.*}}'int'58  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' <FunctionToPointerDecay>59  // CHECK-NEXT: DeclRefExpr{{.*}}'int ()' lvalue Function{{.*}} 'some_int' 'int ()'60  // CHECK-NEXT: CallExpr{{.*}}'int'61  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' <FunctionToPointerDecay>62  // CHECK-NEXT: DeclRefExpr{{.*}}'int ()' lvalue Function{{.*}} 'some_int' 'int ()'63  // CHECK-NEXT: CallExpr{{.*}}'long'64  // CHECK-NEXT: ImplicitCastExpr{{.*}}'long (*)()' <FunctionToPointerDecay>65  // CHECK-NEXT: DeclRefExpr{{.*}}'long ()' lvalue Function{{.*}} 'some_long' 'long ()'66  // CHECK-NEXT: ForStmt67#pragma acc kernels loop wait(devnum: some_int() : queues :some_int(), some_long()) wait(devnum: some_int() : queues :some_int(), some_long())68  for (int i = 0; i < 5; ++i) {}69  // CHECK: OpenACCCombinedConstruct{{.*}}kernels loop70  // CHECK-NEXT: wait clause has devnum has queues tag71  // CHECK-NEXT: CallExpr{{.*}}'int'72  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' <FunctionToPointerDecay>73  // CHECK-NEXT: DeclRefExpr{{.*}}'int ()' lvalue Function{{.*}} 'some_int' 'int ()'74  // CHECK-NEXT: CallExpr{{.*}}'int'75  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' <FunctionToPointerDecay>76  // CHECK-NEXT: DeclRefExpr{{.*}}'int ()' lvalue Function{{.*}} 'some_int' 'int ()'77  // CHECK-NEXT: CallExpr{{.*}}'long'78  // CHECK-NEXT: ImplicitCastExpr{{.*}}'long (*)()' <FunctionToPointerDecay>79  // CHECK-NEXT: DeclRefExpr{{.*}}'long ()' lvalue Function{{.*}} 'some_long' 'long ()'80  // CHECK-NEXT: wait clause has devnum has queues tag81  // CHECK-NEXT: CallExpr{{.*}}'int'82  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' <FunctionToPointerDecay>83  // CHECK-NEXT: DeclRefExpr{{.*}}'int ()' lvalue Function{{.*}} 'some_int' 'int ()'84  // CHECK-NEXT: CallExpr{{.*}}'int'85  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' <FunctionToPointerDecay>86  // CHECK-NEXT: DeclRefExpr{{.*}}'int ()' lvalue Function{{.*}} 'some_int' 'int ()'87  // CHECK-NEXT: CallExpr{{.*}}'long'88  // CHECK-NEXT: ImplicitCastExpr{{.*}}'long (*)()' <FunctionToPointerDecay>89  // CHECK-NEXT: DeclRefExpr{{.*}}'long ()' lvalue Function{{.*}} 'some_long' 'long ()'90  // CHECK-NEXT: ForStmt91}92 93template<typename U>94void TemplUses(U u) {95  // CHECK: FunctionTemplateDecl96  // CHECK-NEXT: TemplateTypeParmDecl{{.*}}typename depth 0 index 0 U97  // CHECK-NEXT: FunctionDecl{{.*}} TemplUses 'void (U)'98  // CHECK-NEXT: ParmVarDecl{{.*}} referenced u 'U'99  // CHECK-NEXT: CompoundStmt100 101#pragma acc parallel loop wait102  for (int i = 0; i < 5; ++i) {}103  // CHECK: OpenACCCombinedConstruct{{.*}}parallel loop104  // CHECK-NEXT: wait clause105  // CHECK-NEXT: <<<NULL>>>106  // CHECK-NEXT: ForStmt107 108#pragma acc serial loop wait109  for (int i = 0; i < 5; ++i) {}110  // CHECK: OpenACCCombinedConstruct{{.*}}serial loop111  // CHECK-NEXT: wait clause112  // CHECK-NEXT: <<<NULL>>>113  // CHECK-NEXT: ForStmt114 115#pragma acc kernels loop wait(U::value, u)116  for (int i = 0; i < 5; ++i) {}117  // CHECK: OpenACCCombinedConstruct{{.*}}kernels loop118  // CHECK-NEXT: wait clause119  // CHECK-NEXT: <<<NULL>>>120  // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>' lvalue121  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'U'122  // CHECK-NEXT: DeclRefExpr{{.*}} 'U' lvalue ParmVar{{.*}} 'u' 'U'123  // CHECK-NEXT: ForStmt124 125#pragma acc parallel loop wait(queues: U::value, u)126  for (int i = 0; i < 5; ++i) {}127  // CHECK: OpenACCCombinedConstruct{{.*}}parallel loop128  // CHECK-NEXT: wait clause has queues tag129  // CHECK-NEXT: <<<NULL>>>130  // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>' lvalue131  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'U'132  // CHECK-NEXT: DeclRefExpr{{.*}} 'U' lvalue ParmVar{{.*}} 'u' 'U'133  // CHECK-NEXT: ForStmt134 135#pragma acc serial loop wait(devnum:u:queues: U::value, u)136  for (int i = 0; i < 5; ++i) {}137  // CHECK: OpenACCCombinedConstruct{{.*}}serial loop138  // CHECK-NEXT: wait clause has devnum has queues tag139  // CHECK-NEXT: DeclRefExpr{{.*}} 'U' lvalue ParmVar{{.*}} 'u' 'U'140  // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>' lvalue141  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'U'142  // CHECK-NEXT: DeclRefExpr{{.*}} 'U' lvalue ParmVar{{.*}} 'u' 'U'143  // CHECK-NEXT: ForStmt144 145#pragma acc kernels loop wait(devnum:u: U::value, u)146  for (int i = 0; i < 5; ++i) {}147  // CHECK: OpenACCCombinedConstruct{{.*}}kernels loop148  // CHECK-NEXT: wait clause has devnum149  // CHECK-NEXT: DeclRefExpr{{.*}} 'U' lvalue ParmVar{{.*}} 'u' 'U'150  // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>' lvalue151  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'U'152  // CHECK-NEXT: DeclRefExpr{{.*}} 'U' lvalue ParmVar{{.*}} 'u' 'U'153  // CHECK-NEXT: ForStmt154 155  // Check the instantiated versions of the above.156  // CHECK: FunctionDecl{{.*}} used TemplUses 'void (HasInt)' implicit_instantiation157  // CHECK-NEXT: TemplateArgument type 'HasInt'158  // CHECK-NEXT: RecordType{{.*}} 'HasInt'159  // CHECK-NEXT: CXXRecord{{.*}} 'HasInt'160  // CHECK-NEXT: ParmVarDecl{{.*}} used u 'HasInt'161  // CHECK-NEXT: CompoundStmt162 163  // CHECK: OpenACCCombinedConstruct{{.*}}parallel loop164  // CHECK-NEXT: wait clause165  // CHECK-NEXT: <<<NULL>>>166  // CHECK-NEXT: ForStmt167 168  // CHECK: OpenACCCombinedConstruct{{.*}}serial loop169  // CHECK-NEXT: wait clause170  // CHECK-NEXT: <<<NULL>>>171  // CHECK-NEXT: ForStmt172 173  // CHECK: OpenACCCombinedConstruct{{.*}}kernels loop174  // CHECK-NEXT: wait clause175  // CHECK-NEXT: <<<NULL>>>176  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>177  // CHECK-NEXT: DeclRefExpr{{.*}} 'const int' lvalue Var{{.*}} 'value' 'const int'178  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'HasInt'179  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'char' <UserDefinedConversion>180  // CHECK-NEXT: CXXMemberCallExpr{{.*}}'char'181  // CHECK-NEXT: MemberExpr{{.*}} '<bound member function type>' .operator char182  // CHECK-NEXT: DeclRefExpr{{.*}} 'HasInt' lvalue ParmVar183  // CHECK-NEXT: ForStmt184 185  // CHECK: OpenACCCombinedConstruct{{.*}}parallel loop186  // CHECK-NEXT: wait clause has queues tag187  // CHECK-NEXT: <<<NULL>>>188  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>189  // CHECK-NEXT: DeclRefExpr{{.*}} 'const int' lvalue Var{{.*}} 'value' 'const int'190  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'HasInt'191  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'char' <UserDefinedConversion>192  // CHECK-NEXT: CXXMemberCallExpr{{.*}}'char'193  // CHECK-NEXT: MemberExpr{{.*}} '<bound member function type>' .operator char194  // CHECK-NEXT: DeclRefExpr{{.*}} 'HasInt' lvalue ParmVar195  // CHECK-NEXT: ForStmt196 197  // CHECK: OpenACCCombinedConstruct{{.*}}serial loop198  // CHECK-NEXT: wait clause has devnum has queues tag199  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'char' <UserDefinedConversion>200  // CHECK-NEXT: CXXMemberCallExpr{{.*}}'char'201  // CHECK-NEXT: MemberExpr{{.*}} '<bound member function type>' .operator char202  // CHECK-NEXT: DeclRefExpr{{.*}} 'HasInt' lvalue ParmVar203  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>204  // CHECK-NEXT: DeclRefExpr{{.*}} 'const int' lvalue Var{{.*}} 'value' 'const int'205  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'HasInt'206  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'char' <UserDefinedConversion>207  // CHECK-NEXT: CXXMemberCallExpr{{.*}}'char'208  // CHECK-NEXT: MemberExpr{{.*}} '<bound member function type>' .operator char209  // CHECK-NEXT: DeclRefExpr{{.*}} 'HasInt' lvalue ParmVar210  // CHECK-NEXT: ForStmt211 212  // CHECK: OpenACCCombinedConstruct{{.*}}kernels loop213  // CHECK-NEXT: wait clause has devnum214  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'char' <UserDefinedConversion>215  // CHECK-NEXT: CXXMemberCallExpr{{.*}}'char'216  // CHECK-NEXT: MemberExpr{{.*}} '<bound member function type>' .operator char217  // CHECK-NEXT: DeclRefExpr{{.*}} 'HasInt' lvalue ParmVar218  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>219  // CHECK-NEXT: DeclRefExpr{{.*}} 'const int' lvalue Var{{.*}} 'value' 'const int'220  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'HasInt'221  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'char' <UserDefinedConversion>222  // CHECK-NEXT: CXXMemberCallExpr{{.*}}'char'223  // CHECK-NEXT: MemberExpr{{.*}} '<bound member function type>' .operator char224  // CHECK-NEXT: DeclRefExpr{{.*}} 'HasInt' lvalue ParmVar225  // CHECK-NEXT: ForStmt226}227 228struct HasInt {229  using IntTy = int;230  using ShortTy = short;231  static constexpr int value = 1;232 233  operator char();234};235 236void Inst() {237  TemplUses<HasInt>({});238}239#endif240