brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.1 KiB · 502b7a2 Raw
130 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 10void NormalFunc(int i, float f) {11  // CHECK: FunctionDecl{{.*}}NormalFunc12  // CHECK-NEXT: ParmVarDecl13  // CHECK-NEXT: ParmVarDecl14  // CHECK-NEXT: CompoundStmt15 16#pragma acc parallel loop reduction(+: i)17  for(int i = 0; i < 5; ++i);18  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} parallel loop19  // CHECK-NEXT: reduction clause Operator: +20  // CHECK-NEXT: DeclRefExpr{{.*}} 'int' lvalue ParmVar{{.*}} 'i' 'int'21  // CHECK-NEXT: ForStmt22  // CHECK: NullStmt23 24#pragma acc serial loop reduction(*: f)25  for(int i = 0; i < 5; ++i);26  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} serial loop27  // CHECK-NEXT: reduction clause Operator: *28  // CHECK-NEXT: DeclRefExpr{{.*}} 'float' lvalue ParmVar{{.*}} 'f' 'float'29  // CHECK-NEXT: ForStmt30  // CHECK: NullStmt31 32 33#pragma acc kernels loop reduction(max: i)34  for(int i = 0; i < 5; ++i);35  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} kernels loop36  // CHECK-NEXT: reduction clause Operator: max37  // CHECK-NEXT: DeclRefExpr{{.*}} 'int' lvalue ParmVar{{.*}} 'i' 'int'38  // CHECK-NEXT: ForStmt39  // CHECK: NullStmt40 41  }42 43template<typename T>44void TemplFunc() {45  // CHECK: FunctionTemplateDecl{{.*}}TemplFunc46  // CHECK-NEXT: TemplateTypeParmDecl47 48  // Match the prototype:49  // CHECK-NEXT: FunctionDecl{{.*}}TemplFunc50  // CHECK-NEXT: CompoundStmt51 52  T t;53  // CHECK-NEXT: DeclStmt54  // CHECK-NEXT: VarDecl{{.*}} t 'T'55 56#pragma acc parallel loop reduction(+: t)57  for(int i = 0; i < 5; ++i);58  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} parallel loop59  // CHECK-NEXT: reduction clause Operator: +60  // CHECK-NEXT: DeclRefExpr{{.*}} 'T' lvalue Var{{.*}} 't' 'T'61  // CHECK-NEXT: ForStmt62  // CHECK: NullStmt63 64#pragma acc serial loop reduction(*: T::SomeFloat)65  for(int i = 0; i < 5; ++i);66  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} serial loop67  // CHECK-NEXT: reduction clause Operator: *68  // CHECK-NEXT: DependentScopeDeclRefExpr{{.*}} '<dependent type>' lvalue69  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'T'70  // CHECK-NEXT: ForStmt71  // CHECK: NullStmt72 73  typename T::IntTy i;74  // CHECK-NEXT: DeclStmt75  // CHECK-NEXT: VarDecl{{.*}} i 'typename T::IntTy'76 77#pragma acc kernels loop reduction(max: i)78  for(int i = 0; i < 5; ++i);79  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} kernels loop80  // CHECK-NEXT: reduction clause Operator: max81  // CHECK-NEXT: DeclRefExpr{{.*}} 'typename T::IntTy' lvalue Var{{.*}} 'i' 'typename T::IntTy'82  // CHECK-NEXT: ForStmt83  // CHECK: NullStmt84 85  // Match the instantiation:86 87  // CHECK: FunctionDecl{{.*}}TemplFunc 'void ()' implicit_instantiation88  // CHECK-NEXT: TemplateArgument type 'InstTy'89  // CHECK-NEXT: RecordType{{.*}} 'InstTy'90  // CHECK-NEXT: CXXRecord{{.*}} 'InstTy'91  // CHECK-NEXT: CompoundStmt92 93  // CHECK-NEXT: DeclStmt94  // CHECK-NEXT: VarDecl{{.*}} used t 'InstTy'95  // CHECK-NEXT: CXXConstructExpr{{.*}} 'InstTy' 'void () noexcept'96 97  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} parallel loop98  // CHECK-NEXT: reduction clause Operator: +99  // CHECK-NEXT: DeclRefExpr{{.*}} 'InstTy' lvalue Var{{.*}} 't' 'InstTy'100  // CHECK-NEXT: ForStmt101  // CHECK: NullStmt102 103  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} serial loop104  // CHECK-NEXT: reduction clause Operator: *105  // CHECK-NEXT: DeclRefExpr{{.*}} 'const float' lvalue Var{{.*}} 'SomeFloat' 'const float'106  // CHECK-NEXT: NestedNameSpecifier TypeSpec 'InstTy'107  // CHECK-NEXT: ForStmt108  // CHECK: NullStmt109 110  // CHECK-NEXT: DeclStmt111  // CHECK-NEXT: VarDecl{{.*}} i 'typename InstTy::IntTy':'int'112 113  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} kernels loop114  // CHECK-NEXT: reduction clause Operator: max115  // CHECK-NEXT: DeclRefExpr{{.*}} 'typename InstTy::IntTy':'int' lvalue Var{{.*}} 'i' 'typename InstTy::IntTy':'int'116  // CHECK-NEXT: ForStmt117  // CHECK: NullStmt118 119}120 121struct InstTy {122  using IntTy = int;123  static constexpr float SomeFloat = 5.0;124};125 126void Instantiate() {127  TemplFunc<InstTy>();128}129#endif // PCH_HELPER130