brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.5 KiB · 6e75a00 Raw
122 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();12struct CorrectConvert {13  operator int();14} Convert;15 16 17void NormalUses() {18  // CHECK: FunctionDecl{{.*}}NormalUses19  // CHECK-NEXT: CompoundStmt20 21#pragma acc parallel loop num_gangs(some_int(), some_long(), some_short())22  for (unsigned i = 0; i < 5; ++i);23  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} parallel loop24  // CHECK-NEXT: num_gangs clause25  // CHECK-NEXT: CallExpr{{.*}}'int'26  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' <FunctionToPointerDecay>27  // CHECK-NEXT: DeclRefExpr{{.*}}'int ()' lvalue Function{{.*}} 'some_int' 'int ()'28  // CHECK-NEXT: CallExpr{{.*}}'long'29  // CHECK-NEXT: ImplicitCastExpr{{.*}}'long (*)()' <FunctionToPointerDecay>30  // CHECK-NEXT: DeclRefExpr{{.*}}'long ()' lvalue Function{{.*}} 'some_long' 'long ()'31  // CHECK-NEXT: CallExpr{{.*}}'short'32  // CHECK-NEXT: ImplicitCastExpr{{.*}}'short (*)()' <FunctionToPointerDecay>33  // CHECK-NEXT: DeclRefExpr{{.*}}'short ()' lvalue Function{{.*}} 'some_short' 'short ()'34  // CHECK-NEXT: ForStmt35  // CHECK: NullStmt36 37#pragma acc kernels loop num_gangs(some_int())38  for (unsigned i = 0; i < 5; ++i);39  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} kernels loop40  // CHECK-NEXT: num_gangs clause41  // CHECK-NEXT: CallExpr{{.*}}'int'42  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)()' <FunctionToPointerDecay>43  // CHECK-NEXT: DeclRefExpr{{.*}}'int ()' lvalue Function{{.*}} 'some_int' 'int ()'44  // CHECK-NEXT: ForStmt45  // CHECK: NullStmt46}47 48template<typename T, typename U>49void TemplUses(T t, U u) {50  // CHECK-NEXT: FunctionTemplateDecl51  // CHECK-NEXT: TemplateTypeParmDecl{{.*}}typename depth 0 index 0 T52  // CHECK-NEXT: TemplateTypeParmDecl{{.*}}typename depth 0 index 1 U53  // CHECK-NEXT: FunctionDecl{{.*}} TemplUses 'void (T, U)'54  // CHECK-NEXT: ParmVarDecl{{.*}} t 'T'55  // CHECK-NEXT: ParmVarDecl{{.*}} u 'U'56  // CHECK-NEXT: CompoundStmt57 58#pragma acc kernels loop num_gangs(u)59  for (unsigned i = 0; i < 5; ++i);60  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} kernels loop61  // CHECK-NEXT: num_gangs clause62  // CHECK-NEXT: DeclRefExpr{{.*}} 'U' lvalue ParmVar{{.*}} 'u' 'U'63  // CHECK-NEXT: ForStmt64  // CHECK: NullStmt65 66#pragma acc parallel loop num_gangs(u, U::value)67  for (unsigned i = 0; i < 5; ++i);68  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} parallel loop69  // CHECK-NEXT: num_gangs clause70  // CHECK-NEXT: DeclRefExpr{{.*}} 'U' lvalue ParmVar{{.*}} 'u' 'U'71  // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>' lvalue72  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'U'73  // CHECK-NEXT: ForStmt74  // CHECK: NullStmt75 76  // Check the instantiated versions of the above.77  // CHECK-NEXT: FunctionDecl{{.*}} used TemplUses 'void (CorrectConvert, HasInt)' implicit_instantiation78  // CHECK-NEXT: TemplateArgument type 'CorrectConvert'79  // CHECK-NEXT: RecordType{{.*}} 'CorrectConvert'80  // CHECK-NEXT: CXXRecord{{.*}} 'CorrectConvert'81  // CHECK-NEXT: TemplateArgument type 'HasInt'82  // CHECK-NEXT: RecordType{{.*}} 'HasInt'83  // CHECK-NEXT: CXXRecord{{.*}} 'HasInt'84  // CHECK-NEXT: ParmVarDecl{{.*}} t 'CorrectConvert'85  // CHECK-NEXT: ParmVarDecl{{.*}} u 'HasInt'86  // CHECK-NEXT: CompoundStmt87 88  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} kernels loop89  // CHECK-NEXT: num_gangs clause90  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'char' <UserDefinedConversion>91  // CHECK-NEXT: CXXMemberCallExpr{{.*}}'char'92  // CHECK-NEXT: MemberExpr{{.*}} '<bound member function type>' .operator char93  // CHECK-NEXT: DeclRefExpr{{.*}} 'HasInt' lvalue ParmVar94  // CHECK-NEXT: ForStmt95  // CHECK: NullStmt96 97  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} parallel loop98  // CHECK-NEXT: num_gangs clause99  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'char' <UserDefinedConversion>100  // CHECK-NEXT: CXXMemberCallExpr{{.*}}'char'101  // CHECK-NEXT: MemberExpr{{.*}} '<bound member function type>' .operator char102  // CHECK-NEXT: DeclRefExpr{{.*}} 'HasInt' lvalue ParmVar103  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>104  // CHECK-NEXT: DeclRefExpr{{.*}} 'const int' lvalue Var{{.*}} 'value' 'const int'105  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'HasInt'106  // CHECK-NEXT: ForStmt107  // CHECK: NullStmt108}109 110struct HasInt {111  using IntTy = int;112  using ShortTy = short;113  static constexpr int value = 1;114 115  operator char();116};117 118void Inst() {119  TemplUses<CorrectConvert, HasInt>({}, {});120}121#endif // PCH_HELPER122