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#ifndef PCH_HELPER7#define PCH_HELPER8void NormalUses() {9 // CHECK: FunctionDecl{{.*}}NormalUses10 // CHECK-NEXT: CompoundStmt11 12 int Val;13 14#pragma acc parallel loop worker15 for(int i = 0; i < 5; ++i);16 // CHECK: OpenACCCombinedConstruct{{.*}} parallel loop17 // CHECK-NEXT: worker clause18 // CHECK-NEXT: ForStmt19 // CHECK: NullStmt20#pragma acc serial loop worker21 for(int i = 0; i < 5; ++i);22 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} serial loop23 // CHECK-NEXT: worker clause24 // CHECK-NEXT: ForStmt25 // CHECK: NullStmt26 27#pragma acc kernels loop worker(Val)28 for(int i = 0; i < 5; ++i);29 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} kernels loop30 // CHECK-NEXT: worker clause31 // CHECK-NEXT: ImplicitCastExpr32 // CHECK-NEXT: DeclRefExpr{{.*}} 'Val' 'int'33 // CHECK-NEXT: ForStmt34 // CHECK: NullStmt35#pragma acc kernels loop worker(num:Val)36 for(int i = 0; i < 5; ++i);37 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} kernels loop38 // CHECK-NEXT: worker clause39 // CHECK-NEXT: ImplicitCastExpr40 // CHECK-NEXT: DeclRefExpr{{.*}} 'Val' 'int'41 // CHECK-NEXT: ForStmt42 // CHECK: NullStmt43}44 45template<typename T, unsigned One>46void TemplateUses(T Val) {47 // CHECK: FunctionTemplateDecl{{.*}}TemplateUses48 // CHECK-NEXT: TemplateTypeParmDecl {{.*}} referenced typename depth 0 index 0 T49 // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} referenced 'unsigned int' depth 0 index 1 One50 // CHECK-NEXT: FunctionDecl{{.*}} TemplateUses 'void (T)'51 // CHECK-NEXT: ParmVarDecl{{.*}} referenced Val 'T'52 // CHECK-NEXT: CompoundStmt53 54#pragma acc parallel loop worker55 for(int i = 0; i < 5; ++i);56 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} parallel loop57 // CHECK-NEXT: worker clause58 // CHECK-NEXT: ForStmt59 // CHECK: NullStmt60#pragma acc serial loop worker61 for(int i = 0; i < 5; ++i);62 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} serial loop63 // CHECK-NEXT: worker clause64 // CHECK-NEXT: ForStmt65 // CHECK: NullStmt66 67#pragma acc kernels loop worker(Val)68 for(int i = 0; i < 5; ++i);69 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} kernels loop70 // CHECK-NEXT: worker clause71 // CHECK-NEXT: DeclRefExpr{{.*}}'Val' 'T'72 // CHECK-NEXT: ForStmt73 // CHECK: NullStmt74#pragma acc kernels loop worker(num:Val)75 for(int i = 0; i < 5; ++i);76 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} kernels loop77 // CHECK-NEXT: worker clause78 // CHECK-NEXT: DeclRefExpr{{.*}}'Val' 'T'79 // CHECK-NEXT: ForStmt80 // CHECK: NullStmt81 82#pragma acc kernels loop worker(num:One)83 for(int i = 0; i < 5; ++i);84 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} kernels loop85 // CHECK-NEXT: worker clause86 // CHECK-NEXT: DeclRefExpr{{.*}}'One' 'unsigned int'87 // CHECK-NEXT: ForStmt88 // CHECK: NullStmt89 90 // Instantiation:91 // CHECK-NEXT: FunctionDecl{{.*}} used TemplateUses 'void (int)' implicit_instantiation92 // CHECK-NEXT: TemplateArgument type 'int'93 // CHECK-NEXT: BuiltinType{{.*}} 'int'94 // CHECK-NEXT: TemplateArgument integral '1U'95 // CHECK-NEXT: ParmVarDecl{{.*}} used Val 'int'96 // CHECK-NEXT: CompoundStmt97 98 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} parallel loop99 // CHECK-NEXT: worker clause100 // CHECK-NEXT: ForStmt101 // CHECK: NullStmt102 103 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} serial loop104 // CHECK-NEXT: worker clause105 // CHECK-NEXT: ForStmt106 // CHECK: NullStmt107 108 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} kernels loop109 // CHECK-NEXT: worker clause110 // CHECK-NEXT: ImplicitCastExpr111 // CHECK-NEXT: DeclRefExpr{{.*}}'Val' 'int'112 // CHECK-NEXT: ForStmt113 // CHECK: NullStmt114 115 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} kernels loop116 // CHECK-NEXT: worker clause117 // CHECK-NEXT: ImplicitCastExpr118 // CHECK-NEXT: DeclRefExpr{{.*}}'Val' 'int'119 // CHECK-NEXT: ForStmt120 // CHECK: NullStmt121 122 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} kernels loop123 // CHECK-NEXT: worker clause124 // CHECK-NEXT: SubstNonTypeTemplateParmExpr125 // CHECK-NEXT: NonTypeTemplateParmDecl126 // CHECK-NEXT: IntegerLiteral{{.*}}'unsigned int' 1127 // CHECK-NEXT: ForStmt128 // CHECK: NullStmt129}130 131void inst() {132 TemplateUses<int, 1>(5);133}134 135#endif // PCH_HELPER136