brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.1 KiB · 96c465d Raw
136 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_HELPER9void NormalFunc(int j, float f) {10  // CHECK: FunctionDecl{{.*}}NormalFunc11  // CHECK-NEXT: ParmVarDecl12  // CHECK-NEXT: ParmVarDecl13  // CHECK-NEXT: CompoundStmt14#pragma acc kernels loop if( j < f)15  for (unsigned i = 0; i < 5; ++i);16  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}}kernels loop17  // CHECK-NEXT: if clause18  // CHECK-NEXT: BinaryOperator{{.*}} 'bool' '<'19  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'float' <IntegralToFloating>20  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>21  // CHECK-NEXT: DeclRefExpr{{.*}} 'int' lvalue ParmVar{{.*}} 'j' 'int'22  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'float' <LValueToRValue>23  // CHECK-NEXT: DeclRefExpr{{.*}} 'float' lvalue ParmVar{{.*}} 'f' 'float'24  // CHECK-NEXT: ForStmt25  // CHECK: NullStmt26 27}28 29template<typename T>30void TemplFunc() {31  // CHECK: FunctionTemplateDecl{{.*}}TemplFunc32  // CHECK-NEXT: TemplateTypeParmDecl33 34  // Match the prototype:35  // CHECK-NEXT: FunctionDecl{{.*}}TemplFunc36  // CHECK-NEXT: CompoundStmt37 38#pragma acc parallel loop if(T::SomeFloat < typename T::IntTy{})39  for (unsigned i = 0; i < 5; ++i);40  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}}parallel loop41  // CHECK-NEXT: if clause42  // CHECK-NEXT: BinaryOperator{{.*}} '<dependent type>' '<'43  // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>' lvalue44  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'T'45  // CHECK-NEXT: CXXUnresolvedConstructExpr{{.*}} 'typename T::IntTy' 'typename T::IntTy'46  // CHECK-NEXT: InitListExpr{{.*}} 'void'47  // CHECK-NEXT: ForStmt48  // CHECK: NullStmt49 50#pragma acc serial loop if(typename T::IntTy{})51  for (unsigned i = 0; i < 5; ++i);52  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}}serial loop53  // CHECK-NEXT: if clause54  // CHECK-NEXT: CXXUnresolvedConstructExpr{{.*}} 'typename T::IntTy' 'typename T::IntTy'55  // CHECK-NEXT: InitListExpr{{.*}} 'void'56  // CHECK-NEXT: ForStmt57  // CHECK: NullStmt58 59#pragma acc kernels loop if(T::SomeFloat)60  for (unsigned i = 0; i < 5; ++i);61  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}}kernels loop62  // CHECK-NEXT: if clause63  // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>' lvalue64  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'T'65  // CHECK-NEXT: ForStmt66  // CHECK: NullStmt67 68#pragma acc parallel loop if(T::BC)69  for (unsigned i = 0; i < 5; ++i);70  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}}parallel loop71  // CHECK-NEXT: if clause72  // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>' lvalue73  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'T'74  // CHECK-NEXT: ForStmt75  // CHECK: NullStmt76 77  // Match the instantiation:78  // CHECK: FunctionDecl{{.*}}TemplFunc{{.*}}implicit_instantiation79  // CHECK-NEXT: TemplateArgument type 'InstTy'80  // CHECK-NEXT: RecordType{{.*}} 'InstTy'81  // CHECK-NEXT: CXXRecord{{.*}} 'InstTy'82  // CHECK-NEXT: CompoundStmt83 84  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}}parallel loop85  // CHECK-NEXT: if clause86  // CHECK-NEXT: BinaryOperator{{.*}} 'bool' '<'87  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'float' <LValueToRValue>88  // CHECK-NEXT: DeclRefExpr{{.*}} 'const float' lvalue Var{{.*}} 'SomeFloat' 'const float'89  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'InstTy'90  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'float' <IntegralToFloating>91  // CHECK-NEXT: CXXFunctionalCastExpr{{.*}}'typename InstTy::IntTy':'int' functional cast to typename InstTy::IntTy <NoOp>92  // CHECK-NEXT: InitListExpr {{.*}}'typename InstTy::IntTy':'int'93  // CHECK-NEXT: ForStmt94  // CHECK: NullStmt95 96  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}}serial loop97  // CHECK-NEXT: if clause98  // CHECK-NEXT: ImplicitCastExpr{{.*}}'bool' <IntegralToBoolean>99  // CHECK-NEXT: CXXFunctionalCastExpr{{.*}}'typename InstTy::IntTy':'int' functional cast to typename InstTy::IntTy <NoOp>100  // CHECK-NEXT: InitListExpr {{.*}}'typename InstTy::IntTy':'int'101  // CHECK-NEXT: ForStmt102  // CHECK: NullStmt103 104  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}}kernels loop105  // CHECK-NEXT: if clause106  // CHECK-NEXT: ImplicitCastExpr{{.*}}'bool' <FloatingToBoolean>107  // CHECK-NEXT: ImplicitCastExpr{{.*}}'float' <LValueToRValue>108  // CHECK-NEXT: DeclRefExpr{{.*}} 'const float' lvalue Var{{.*}} 'SomeFloat' 'const float'109  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'InstTy'110  // CHECK-NEXT: ForStmt111  // CHECK: NullStmt112 113  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}}parallel loop114  // CHECK-NEXT: if clause115  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'bool' <UserDefinedConversion>116  // CHECK-NEXT: CXXMemberCallExpr{{.*}} 'bool'117  // CHECK-NEXT: MemberExpr{{.*}} .operator bool118  // CHECK-NEXT: DeclRefExpr{{.*}} 'const BoolConversion' lvalue Var{{.*}} 'BC' 'const BoolConversion'119  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'InstTy'120  // CHECK-NEXT: ForStmt121  // CHECK: NullStmt122 123}124 125struct BoolConversion{ operator bool() const;};126struct InstTy {127  using IntTy = int;128  static constexpr float SomeFloat = 5.0;129  static constexpr BoolConversion BC;130};131 132void Instantiate() {133  TemplFunc<InstTy>();134}135#endif136