brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.9 KiB · 620ec2e Raw
144 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() {11  // CHECK-LABEL: NormalFunc12  // CHECK-NEXT: CompoundStmt13  // CHECK-NEXT: OpenACCComputeConstruct {{.*}}parallel14  // CHECK-NEXT: default(none)15  // CHECK-NEXT: CompoundStmt16#pragma acc parallel default(none)17  {18#pragma acc parallel19  // CHECK-NEXT: OpenACCComputeConstruct {{.*}}parallel20  // CHECK-NEXT: OpenACCComputeConstruct {{.*}}parallel21  // CHECK-NEXT: default(present)22  // CHECK-NEXT: CompoundStmt23#pragma acc parallel default(present)24    {}25  }26  // CHECK-NEXT: OpenACCComputeConstruct {{.*}}serial27  // CHECK-NEXT: CompoundStmt28#pragma acc serial29  {30#pragma acc serial31  // CHECK-NEXT: OpenACCComputeConstruct {{.*}}serial32  // CHECK-NEXT: OpenACCComputeConstruct {{.*}}serial33  // CHECK-NEXT: CompoundStmt34#pragma acc serial35    {}36  }37  // CHECK-NEXT: OpenACCComputeConstruct {{.*}}kernels38  // CHECK-NEXT: CompoundStmt39#pragma acc kernels40  {41#pragma acc kernels42  // CHECK-NEXT: OpenACCComputeConstruct {{.*}}kernels43  // CHECK-NEXT: OpenACCComputeConstruct {{.*}}kernels44  // CHECK-NEXT: CompoundStmt45#pragma acc kernels46    {}47  }48  // CHECK-NEXT: OpenACCComputeConstruct {{.*}}kernels49  // CHECK-NEXT: CompoundStmt50  _Pragma("acc kernels")51  {}52}53 54template<typename T>55void TemplFunc() {56#pragma acc parallel default(none)57  {58    typename T::type I;59  }60 61#pragma acc serial default(present)62  {63    typename T::type I;64  }65 66#pragma acc kernels67  {68    typename T::type I;69  }70 71  // CHECK-LABEL: FunctionTemplateDecl {{.*}}TemplFunc72  // CHECK-NEXT: TemplateTypeParmDecl73 74  // Template Pattern:75  // CHECK-NEXT: FunctionDecl76  // CHECK-NEXT: CompoundStmt77  // CHECK-NEXT: OpenACCComputeConstruct {{.*}}parallel78  // CHECK-NEXT: default(none)79  // CHECK-NEXT: CompoundStmt80  // CHECK-NEXT: DeclStmt81  // CHECK-NEXT: VarDecl{{.*}} I 'typename T::type'82  // CHECK-NEXT: OpenACCComputeConstruct {{.*}}serial83  // CHECK-NEXT: default(present)84  // CHECK-NEXT: CompoundStmt85  // CHECK-NEXT: DeclStmt86  // CHECK-NEXT: VarDecl{{.*}} I 'typename T::type'87  // CHECK-NEXT: OpenACCComputeConstruct {{.*}}kernels88  // CHECK-NEXT: CompoundStmt89  // CHECK-NEXT: DeclStmt90  // CHECK-NEXT: VarDecl{{.*}} I 'typename T::type'91 92  // Check instantiation.93  // CHECK-LABEL: FunctionDecl{{.*}} used TemplFunc 'void ()' implicit_instantiation94  // CHECK-NEXT: TemplateArgument type 'S'95  // CHECK-NEXT: RecordType96  // CHECK-NEXT: CXXRecord97  // CHECK-NEXT: CompoundStmt98  // CHECK-NEXT: OpenACCComputeConstruct {{.*}}parallel99  // CHECK-NEXT: default(none)100  // CHECK-NEXT: CompoundStmt101  // CHECK-NEXT: DeclStmt102  // CHECK-NEXT: VarDecl{{.*}} I 'typename S::type':'int'103  // CHECK-NEXT: OpenACCComputeConstruct {{.*}}serial104  // CHECK-NEXT: default(present)105  // CHECK-NEXT: CompoundStmt106  // CHECK-NEXT: DeclStmt107  // CHECK-NEXT: VarDecl{{.*}} I 'typename S::type':'int'108  // CHECK-NEXT: OpenACCComputeConstruct {{.*}}kernels109  // CHECK-NEXT: CompoundStmt110  // CHECK-NEXT: DeclStmt111  // CHECK-NEXT: VarDecl{{.*}} I 'typename S::type':'int'112}113 114struct S {115  using type = int;116};117 118void use() {119  TemplFunc<S>();120}121 122struct HasCtor { HasCtor(); operator int(); ~HasCtor();};123 124void useCtorType() {125  // CHECK-LABEL: useCtorType126  // CHECK-NEXT: CompoundStmt127 128#pragma acc kernels num_workers(HasCtor{})129  // CHECK-NEXT: OpenACCComputeConstruct{{.*}} kernels130  // CHECK-NEXT: num_workers clause131  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int' <UserDefinedConversion>132  // CHECK-NEXT: CXXMemberCallExpr{{.*}}'int'133  // CHECK-NEXT: MemberExpr{{.*}}.operator int134  // CHECK-NEXT: MaterializeTemporaryExpr{{.*}}'HasCtor'135  // CHECK-NEXT: CXXBindTemporaryExpr{{.*}}'HasCtor'136  // CHECK-NEXT: CXXTemporaryObjectExpr{{.*}}'HasCtor'137 138  while(true);139  // CHECK-NEXT: WhileStmt140  // CHECK-NEXT: CXXBoolLiteralExpr141  // CHECK-NEXT: NullStmt142}143#endif144