177 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 vector15 for(int i = 0; i < 5; ++i);16 // CHECK: OpenACCCombinedConstruct{{.*}}parallel loop17 // CHECK-NEXT: vector clause18 // CHECK-NEXT: ForStmt19 // CHECK: NullStmt20 21#pragma acc parallel loop vector(Val)22 for(int i = 0; i < 5; ++i);23 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}}parallel loop24 // CHECK-NEXT: vector clause25 // CHECK-NEXT: ImplicitCastExpr26 // CHECK-NEXT: DeclRefExpr{{.*}}'Val' 'int'27 // CHECK-NEXT: ForStmt28 // CHECK: NullStmt29 30#pragma acc serial loop vector31 for(int i = 0; i < 5; ++i);32 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}}serial loop33 // CHECK-NEXT: vector clause34 // CHECK-NEXT: ForStmt35 // CHECK: NullStmt36 37#pragma acc kernels loop vector38 for(int i = 0; i < 5; ++i);39 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}}kernels loop40 // CHECK-NEXT: vector clause41 // CHECK-NEXT: ForStmt42 // CHECK: NullStmt43 44#pragma acc kernels loop vector(Val)45 for(int i = 0; i < 5; ++i);46 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}}kernels loop47 // CHECK-NEXT: vector clause48 // CHECK-NEXT: ImplicitCastExpr49 // CHECK-NEXT: DeclRefExpr{{.*}}'Val' 'int'50 // CHECK-NEXT: ForStmt51 // CHECK: NullStmt52}53 54template<typename T, unsigned One>55void TemplateUses(T Val) {56 // CHECK: FunctionTemplateDecl{{.*}}TemplateUses57 // CHECK-NEXT: TemplateTypeParmDecl {{.*}} referenced typename depth 0 index 0 T58 // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} referenced 'unsigned int' depth 0 index 1 One59 // CHECK-NEXT: FunctionDecl{{.*}} TemplateUses 'void (T)'60 // CHECK-NEXT: ParmVarDecl{{.*}} referenced Val 'T'61 // CHECK-NEXT: CompoundStmt62 63 64#pragma acc parallel loop vector65 for(int i = 0; i < 5; ++i);66 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}}parallel loop67 // CHECK-NEXT: vector clause68 // CHECK-NEXT: ForStmt69 // CHECK: NullStmt70 71#pragma acc parallel loop vector(Val)72 for(int i = 0; i < 5; ++i);73 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}}parallel loop74 // CHECK-NEXT: vector clause75 // CHECK-NEXT: DeclRefExpr{{.*}}'Val' 'T'76 // CHECK-NEXT: ForStmt77 // CHECK: NullStmt78 79#pragma acc parallel loop vector(length:One)80 for(int i = 0; i < 5; ++i);81 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}}parallel loop82 // CHECK-NEXT: vector clause83 // CHECK-NEXT: DeclRefExpr{{.*}}'One' 'unsigned int'84 // CHECK-NEXT: ForStmt85 // CHECK: NullStmt86 87#pragma acc serial loop vector88 for(int i = 0; i < 5; ++i);89 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}}serial loop90 // CHECK-NEXT: vector clause91 // CHECK-NEXT: ForStmt92 // CHECK: NullStmt93 94#pragma acc kernels loop vector95 for(int i = 0; i < 5; ++i);96 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}}kernels loop97 // CHECK-NEXT: vector clause98 // CHECK-NEXT: ForStmt99 // CHECK: NullStmt100 101#pragma acc kernels loop vector(Val)102 for(int i = 0; i < 5; ++i);103 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}}kernels loop104 // CHECK-NEXT: vector clause105 // CHECK-NEXT: DeclRefExpr{{.*}}'Val' 'T'106 // CHECK-NEXT: ForStmt107 // CHECK: NullStmt108 109#pragma acc kernels loop vector(length:One)110 for(int i = 0; i < 5; ++i);111 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}}kernels loop112 // CHECK-NEXT: vector clause113 // CHECK-NEXT: DeclRefExpr{{.*}}'One' 'unsigned int'114 // CHECK-NEXT: ForStmt115 // CHECK: NullStmt116 117 118 // Instantiation:119 // CHECK-NEXT: FunctionDecl{{.*}} used TemplateUses 'void (int)' implicit_instantiation120 // CHECK-NEXT: TemplateArgument type 'int'121 // CHECK-NEXT: BuiltinType{{.*}} 'int'122 // CHECK-NEXT: TemplateArgument integral '1U'123 // CHECK-NEXT: ParmVarDecl{{.*}} used Val 'int'124 // CHECK-NEXT: CompoundStmt125 126 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}}parallel loop127 // CHECK-NEXT: vector clause128 // CHECK-NEXT: ForStmt129 // CHECK: NullStmt130 131 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}}parallel loop132 // CHECK-NEXT: vector clause133 // CHECK-NEXT: ImplicitCastExpr134 // CHECK-NEXT: DeclRefExpr{{.*}} 'Val' 'int'135 // CHECK-NEXT: ForStmt136 // CHECK: NullStmt137 138 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}}parallel loop139 // CHECK-NEXT: vector clause140 // CHECK-NEXT: SubstNonTypeTemplateParmExpr141 // CHECK-NEXT: NonTypeTemplateParmDecl142 // CHECK-NEXT: IntegerLiteral{{.*}}1143 // CHECK-NEXT: ForStmt144 // CHECK: NullStmt145 146 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}}serial loop147 // CHECK-NEXT: vector clause148 // CHECK-NEXT: ForStmt149 // CHECK: NullStmt150 151 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}}kernels loop152 // CHECK-NEXT: vector clause153 // CHECK-NEXT: ForStmt154 // CHECK: NullStmt155 156 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}}kernels loop157 // CHECK-NEXT: vector clause158 // CHECK-NEXT: ImplicitCastExpr159 // CHECK-NEXT: DeclRefExpr{{.*}} 'Val' 'int'160 // CHECK-NEXT: ForStmt161 // CHECK: NullStmt162 163 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}}kernels loop164 // CHECK-NEXT: vector clause165 // CHECK-NEXT: SubstNonTypeTemplateParmExpr166 // CHECK-NEXT: NonTypeTemplateParmDecl167 // CHECK-NEXT: IntegerLiteral{{.*}}1168 // CHECK-NEXT: ForStmt169 // CHECK: NullStmt170}171 172void inst() {173 TemplateUses<int, 1>(5);174}175 176#endif // PCH_HELPER177