brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.0 KiB · cdd6bc7 Raw
231 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_HELPER9int some_int();10short some_short();11long some_long();12enum E{};13E some_enum();14struct CorrectConvert {15  operator int();16} Convert;17 18 19void NormalUses() {20  // CHECK: FunctionDecl{{.*}}NormalUses21  // CHECK-NEXT: CompoundStmt22#pragma acc parallel loop num_workers(some_int())23  for (unsigned i = 0; i < 5; ++i);24  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} parallel loop25  // CHECK-NEXT: num_workers clause26  // CHECK-NEXT: CallExpr{{.*}}'int'27  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' <FunctionToPointerDecay>28  // CHECK-NEXT: DeclRefExpr{{.*}}'int ()' lvalue Function{{.*}} 'some_int' 'int ()'29  // CHECK-NEXT: ForStmt30  // CHECK: NullStmt31 32#pragma acc kernels loop num_workers(some_short())33  for (unsigned i = 0; i < 5; ++i);34  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} kernels loop35  // CHECK-NEXT: num_workers clause36  // CHECK-NEXT: CallExpr{{.*}}'short'37  // CHECK-NEXT: ImplicitCastExpr{{.*}}'short (*)()' <FunctionToPointerDecay>38  // CHECK-NEXT: DeclRefExpr{{.*}}'short ()' lvalue Function{{.*}} 'some_short' 'short ()'39  // CHECK-NEXT: ForStmt40  // CHECK: NullStmt41 42#pragma acc parallel loop num_workers(some_long())43  for (unsigned i = 0; i < 5; ++i);44  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} parallel loop45  // CHECK-NEXT: num_workers clause46  // CHECK-NEXT: CallExpr{{.*}}'long'47  // CHECK-NEXT: ImplicitCastExpr{{.*}}'long (*)()' <FunctionToPointerDecay>48  // CHECK-NEXT: DeclRefExpr{{.*}}'long ()' lvalue Function{{.*}} 'some_long' 'long ()'49  // CHECK-NEXT: ForStmt50  // CHECK: NullStmt51 52#pragma acc parallel loop num_workers(some_enum())53  for (unsigned i = 0; i < 5; ++i);54  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} parallel loop55  // CHECK-NEXT: num_workers clause56  // CHECK-NEXT: CallExpr{{.*}}'E'57  // CHECK-NEXT: ImplicitCastExpr{{.*}}'E (*)()' <FunctionToPointerDecay>58  // CHECK-NEXT: DeclRefExpr{{.*}}'E ()' lvalue Function{{.*}} 'some_enum' 'E ()'59  // CHECK-NEXT: ForStmt60  // CHECK: NullStmt61 62#pragma acc kernels loop num_workers(Convert)63  for (unsigned i = 0; i < 5; ++i);64  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} kernels loop65  // CHECK-NEXT: num_workers clause66  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <UserDefinedConversion>67  // CHECK-NEXT: CXXMemberCallExpr{{.*}}'int'68  // CHECK-NEXT: MemberExpr{{.*}} '<bound member function type>' .operator int69  // CHECK-NEXT: DeclRefExpr{{.*}} 'struct CorrectConvert' lvalue Var70  // CHECK-NEXT: ForStmt71  // CHECK: NullStmt72}73 74template<typename T, typename U>75void TemplUses(T t, U u) {76  // CHECK-NEXT: FunctionTemplateDecl77  // CHECK-NEXT: TemplateTypeParmDecl{{.*}}typename depth 0 index 0 T78  // CHECK-NEXT: TemplateTypeParmDecl{{.*}}typename depth 0 index 1 U79  // CHECK-NEXT: FunctionDecl{{.*}} TemplUses 'void (T, U)'80  // CHECK-NEXT: ParmVarDecl{{.*}} referenced t 'T'81  // CHECK-NEXT: ParmVarDecl{{.*}} referenced u 'U'82  // CHECK-NEXT: CompoundStmt83 84#pragma acc parallel loop num_workers(t)85  for (unsigned i = 0; i < 5; ++i);86  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} parallel loop87  // CHECK-NEXT: num_workers clause88  // CHECK-NEXT: DeclRefExpr{{.*}} 'T' lvalue ParmVar{{.*}} 't' 'T'89  // CHECK-NEXT: ForStmt90  // CHECK: NullStmt91 92#pragma acc kernels loop num_workers(u)93  for (unsigned i = 0; i < 5; ++i);94  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} kernels loop95  // CHECK-NEXT: num_workers clause96  // CHECK-NEXT: DeclRefExpr{{.*}} 'U' lvalue ParmVar{{.*}} 'u' 'U'97  // CHECK-NEXT: ForStmt98  // CHECK: NullStmt99 100#pragma acc parallel loop num_workers(U::value)101  for (unsigned i = 0; i < 5; ++i);102  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} parallel loop103  // CHECK-NEXT: num_workers clause104  // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>' lvalue105  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'U'106  // CHECK-NEXT: ForStmt107  // CHECK: NullStmt108 109#pragma acc kernels loop num_workers(T{})110  for (unsigned i = 0; i < 5; ++i);111  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} kernels loop112  // CHECK-NEXT: num_workers clause113  // CHECK-NEXT: CXXUnresolvedConstructExpr{{.*}} 'T' 'T' list114  // CHECK-NEXT: InitListExpr{{.*}} 'void'115  // CHECK-NEXT: ForStmt116  // CHECK: NullStmt117 118#pragma acc parallel loop num_workers(U{})119  for (unsigned i = 0; i < 5; ++i);120  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} parallel loop121  // CHECK-NEXT: num_workers clause122  // CHECK-NEXT: CXXUnresolvedConstructExpr{{.*}} 'U' 'U' list123  // CHECK-NEXT: InitListExpr{{.*}} 'void'124  // CHECK-NEXT: ForStmt125  // CHECK: NullStmt126 127#pragma acc kernels loop num_workers(typename U::IntTy{})128  for (unsigned i = 0; i < 5; ++i);129  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} kernels loop130  // CHECK-NEXT: num_workers clause131  // CHECK-NEXT: CXXUnresolvedConstructExpr{{.*}} 'typename U::IntTy' 'typename U::IntTy' list132  // CHECK-NEXT: InitListExpr{{.*}} 'void'133  // CHECK-NEXT: ForStmt134  // CHECK: NullStmt135 136#pragma acc parallel loop num_workers(typename U::ShortTy{})137  for (unsigned i = 0; i < 5; ++i);138  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} parallel loop139  // CHECK-NEXT: num_workers clause140  // CHECK-NEXT: CXXUnresolvedConstructExpr{{.*}} 'typename U::ShortTy' 'typename U::ShortTy' list141  // CHECK-NEXT: InitListExpr{{.*}} 'void'142  // CHECK-NEXT: ForStmt143  // CHECK: NullStmt144 145  // Check the instantiated versions of the above.146  // CHECK-NEXT: FunctionDecl{{.*}} used TemplUses 'void (CorrectConvert, HasInt)' implicit_instantiation147  // CHECK-NEXT: TemplateArgument type 'CorrectConvert'148  // CHECK-NEXT: RecordType{{.*}} 'CorrectConvert'149  // CHECK-NEXT: CXXRecord{{.*}} 'CorrectConvert'150  // CHECK-NEXT: TemplateArgument type 'HasInt'151  // CHECK-NEXT: RecordType{{.*}} 'HasInt'152  // CHECK-NEXT: CXXRecord{{.*}} 'HasInt'153  // CHECK-NEXT: ParmVarDecl{{.*}} used t 'CorrectConvert'154  // CHECK-NEXT: ParmVarDecl{{.*}} used u 'HasInt'155  // CHECK-NEXT: CompoundStmt156 157  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} parallel loop158  // CHECK-NEXT: num_workers clause159  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <UserDefinedConversion>160  // CHECK-NEXT: CXXMemberCallExpr{{.*}}'int'161  // CHECK-NEXT: MemberExpr{{.*}} '<bound member function type>' .operator int162  // CHECK-NEXT: DeclRefExpr{{.*}} 'CorrectConvert' lvalue ParmVar163  // CHECK-NEXT: ForStmt164  // CHECK: NullStmt165 166  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} kernels loop167  // CHECK-NEXT: num_workers clause168  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'char' <UserDefinedConversion>169  // CHECK-NEXT: CXXMemberCallExpr{{.*}}'char'170  // CHECK-NEXT: MemberExpr{{.*}} '<bound member function type>' .operator char171  // CHECK-NEXT: DeclRefExpr{{.*}} 'HasInt' lvalue ParmVar172  // CHECK-NEXT: ForStmt173  // CHECK: NullStmt174 175  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} parallel loop176  // CHECK-NEXT: num_workers clause177  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>178  // CHECK-NEXT: DeclRefExpr{{.*}} 'const int' lvalue Var{{.*}} 'value' 'const int'179  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'HasInt'180  // CHECK-NEXT: ForStmt181  // CHECK: NullStmt182 183  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} kernels loop184  // CHECK-NEXT: num_workers clause185  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <UserDefinedConversion>186  // CHECK-NEXT: CXXMemberCallExpr{{.*}}'int'187  // CHECK-NEXT: MemberExpr{{.*}} '<bound member function type>' .operator int188  // CHECK-NEXT: MaterializeTemporaryExpr{{.*}} 'CorrectConvert' lvalue189  // CHECK-NEXT: CXXFunctionalCastExpr{{.*}} 'CorrectConvert' functional cast to struct CorrectConvert <NoOp>190  // CHECK-NEXT: InitListExpr{{.*}}'CorrectConvert'191  // CHECK-NEXT: ForStmt192  // CHECK: NullStmt193 194  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} parallel loop195  // CHECK-NEXT: num_workers clause196  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'char' <UserDefinedConversion>197  // CHECK-NEXT: CXXMemberCallExpr{{.*}}'char'198  // CHECK-NEXT: MemberExpr{{.*}} '<bound member function type>' .operator char199  // CHECK-NEXT: MaterializeTemporaryExpr{{.*}} 'HasInt' lvalue200  // CHECK-NEXT: CXXFunctionalCastExpr{{.*}} 'HasInt' functional cast to struct HasInt <NoOp>201  // CHECK-NEXT: InitListExpr{{.*}}'HasInt'202  // CHECK-NEXT: ForStmt203  // CHECK: NullStmt204 205  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} kernels loop206  // CHECK-NEXT: num_workers clause207  // CHECK-NEXT: CXXFunctionalCastExpr{{.*}} 'typename HasInt::IntTy':'int' functional cast to typename HasInt::IntTy <NoOp>208  // CHECK-NEXT: InitListExpr{{.*}}'typename HasInt::IntTy':'int'209  // CHECK-NEXT: ForStmt210  // CHECK: NullStmt211 212  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} parallel loop213  // CHECK-NEXT: num_workers clause214  // CHECK-NEXT: CXXFunctionalCastExpr{{.*}} 'typename HasInt::ShortTy':'short' functional cast to typename HasInt::ShortTy <NoOp>215  // CHECK-NEXT: InitListExpr{{.*}}'typename HasInt::ShortTy':'short'216  // CHECK-NEXT: ForStmt217  // CHECK: NullStmt218}219struct HasInt {220  using IntTy = int;221  using ShortTy = short;222  static constexpr int value = 1;223 224  operator char();225};226 227void Inst() {228  TemplUses<CorrectConvert, HasInt>({}, {});229}230#endif // PCH_HELPER231