328 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_HELPER8 9struct S {10 constexpr S(){};11 constexpr operator auto() {return 1;}12};13 14void NormalUses() {15 // CHECK: FunctionDecl{{.*}}NormalUses16 // CHECK-NEXT: CompoundStmt17 18#pragma acc parallel loop tile(S{}, 1, 2, *)19 for(int i = 0;i < 5;++i)20 for(int j = 0;j < 5;++j)21 for(int k = 0;k < 5;++k)22 for(int l = 0;l < 5;++l);23 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} parallel loop24 // CHECK-NEXT: tile clause25 // CHECK-NEXT: ConstantExpr{{.*}} 'int'26 // CHECK-NEXT: value: Int 127 // CHECK-NEXT: ImplicitCastExpr{{.*}}'int' <UserDefinedConversion>28 // CHECK-NEXT: CXXMemberCallExpr{{.*}}'int'29 // CHECK-NEXT: MemberExpr{{.*}} .operator auto30 // CHECK-NEXT: MaterializeTemporaryExpr{{.*}} 'S' lvalue31 // CHECK-NEXT: CXXTemporaryObjectExpr{{.*}} 'S' 'void ()' list32 // CHECK-NEXT: ConstantExpr{{.*}} 'int'33 // CHECK-NEXT: value: Int 134 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 135 // CHECK-NEXT: ConstantExpr{{.*}} 'int'36 // CHECK-NEXT: value: Int 237 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 238 // CHECK-NEXT: OpenACCAsteriskSizeExpr{{.*}}'int'39 // CHECK-NEXT: ForStmt40 // CHECK-NEXT: DeclStmt41 // CHECK-NEXT: VarDecl{{.*}} i 'int'42 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 043 // CHECK-NEXT: <<<NULL>>>44 // CHECK-NEXT: BinaryOperator{{.*}}'<'45 // CHECK-NEXT: ImplicitCastExpr46 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'47 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 548 // CHECK-NEXT: UnaryOperator{{.*}}++49 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'50 // CHECK-NEXT: ForStmt51 // CHECK-NEXT: DeclStmt52 // CHECK-NEXT: VarDecl{{.*}} j 'int'53 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 054 // CHECK-NEXT: <<<NULL>>>55 // CHECK-NEXT: BinaryOperator{{.*}}'<'56 // CHECK-NEXT: ImplicitCastExpr57 // CHECK-NEXT: DeclRefExpr{{.*}}'j' 'int'58 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 559 // CHECK-NEXT: UnaryOperator{{.*}}++60 // CHECK-NEXT: DeclRefExpr{{.*}}'j' 'int'61 // CHECK-NEXT: ForStmt62 // CHECK-NEXT: DeclStmt63 // CHECK-NEXT: VarDecl{{.*}} k 'int'64 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 065 // CHECK-NEXT: <<<NULL>>>66 // CHECK-NEXT: BinaryOperator{{.*}}'<'67 // CHECK-NEXT: ImplicitCastExpr68 // CHECK-NEXT: DeclRefExpr{{.*}}'k' 'int'69 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 570 // CHECK-NEXT: UnaryOperator{{.*}}++71 // CHECK-NEXT: DeclRefExpr{{.*}}'k' 'int'72 // CHECK-NEXT: ForStmt73 // CHECK-NEXT: DeclStmt74 // CHECK-NEXT: VarDecl{{.*}} l 'int'75 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 076 // CHECK-NEXT: <<<NULL>>>77 // CHECK-NEXT: BinaryOperator{{.*}}'<'78 // CHECK-NEXT: ImplicitCastExpr79 // CHECK-NEXT: DeclRefExpr{{.*}}'l' 'int'80 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 581 // CHECK-NEXT: UnaryOperator{{.*}}++82 // CHECK-NEXT: DeclRefExpr{{.*}}'l' 'int'83 // CHECK-NEXT: NullStmt84}85 86template<typename T, unsigned Value>87void TemplUses() {88 // CHECK: FunctionTemplateDecl{{.*}}TemplUses89 // CHECK-NEXT: TemplateTypeParmDecl {{.*}} referenced typename depth 0 index 0 T90 // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} referenced 'unsigned int' depth 0 index 1 Value91 // CHECK-NEXT: FunctionDecl{{.*}} TemplUses 'void ()'92 // CHECK-NEXT: CompoundStmt93 94#pragma acc serial loop tile(S{}, T{}, *, T{} + S{}, Value, Value + 3)95 for(int i = 0;i < 5;++i)96 for(int j = 0;j < 5;++j)97 for(int k = 0;k < 5;++k)98 for(int l = 0;l < 5;++l)99 for(int m = 0;m < 5;++m)100 for(int n = 0;n < 5;++n);101 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}}serial loop102 // CHECK-NEXT: tile clause103 //104 // CHECK-NEXT: ConstantExpr{{.*}} 'int'105 // CHECK-NEXT: value: Int 1106 // CHECK-NEXT: ImplicitCastExpr{{.*}}'int' <UserDefinedConversion>107 // CHECK-NEXT: CXXMemberCallExpr{{.*}}'int'108 // CHECK-NEXT: MemberExpr{{.*}} .operator auto109 // CHECK-NEXT: MaterializeTemporaryExpr{{.*}} 'S' lvalue110 // CHECK-NEXT: CXXTemporaryObjectExpr{{.*}} 'S' 'void ()' list111 //112 // CHECK-NEXT: CXXUnresolvedConstructExpr{{.*}} 'T' 'T' list113 // CHECK-NEXT: InitListExpr{{.*}}'void'114 //115 // CHECK-NEXT: OpenACCAsteriskSizeExpr{{.*}}'int'116 //117 // CHECK-NEXT: BinaryOperator{{.*}}'<dependent type>' '+'118 // CHECK-NEXT: CXXUnresolvedConstructExpr{{.*}} 'T' 'T' list119 // CHECK-NEXT: InitListExpr{{.*}}'void'120 // CHECK-NEXT: CXXTemporaryObjectExpr{{.*}} 'S' 'void ()' list121 //122 // CHECK-NEXT: DeclRefExpr{{.*}}'unsigned int' NonTypeTemplateParm{{.*}}'Value' 'unsigned int'123 //124 // CHECK-NEXT: BinaryOperator{{.*}}'unsigned int' '+'125 // CHECK-NEXT: DeclRefExpr{{.*}}'unsigned int' NonTypeTemplateParm{{.*}}'Value' 'unsigned int'126 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'unsigned int' <IntegralCast>127 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 3128 // CHECK-NEXT: ForStmt129 // CHECK-NEXT: DeclStmt130 // CHECK-NEXT: VarDecl{{.*}} i 'int'131 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0132 // CHECK-NEXT: <<<NULL>>>133 // CHECK-NEXT: BinaryOperator{{.*}}'<'134 // CHECK-NEXT: ImplicitCastExpr135 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'136 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5137 // CHECK-NEXT: UnaryOperator{{.*}}++138 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'139 // CHECK-NEXT: ForStmt140 // CHECK-NEXT: DeclStmt141 // CHECK-NEXT: VarDecl{{.*}} j 'int'142 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0143 // CHECK-NEXT: <<<NULL>>>144 // CHECK-NEXT: BinaryOperator{{.*}}'<'145 // CHECK-NEXT: ImplicitCastExpr146 // CHECK-NEXT: DeclRefExpr{{.*}}'j' 'int'147 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5148 // CHECK-NEXT: UnaryOperator{{.*}}++149 // CHECK-NEXT: DeclRefExpr{{.*}}'j' 'int'150 // CHECK-NEXT: ForStmt151 // CHECK-NEXT: DeclStmt152 // CHECK-NEXT: VarDecl{{.*}} k 'int'153 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0154 // CHECK-NEXT: <<<NULL>>>155 // CHECK-NEXT: BinaryOperator{{.*}}'<'156 // CHECK-NEXT: ImplicitCastExpr157 // CHECK-NEXT: DeclRefExpr{{.*}}'k' 'int'158 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5159 // CHECK-NEXT: UnaryOperator{{.*}}++160 // CHECK-NEXT: DeclRefExpr{{.*}}'k' 'int'161 // CHECK-NEXT: ForStmt162 // CHECK-NEXT: DeclStmt163 // CHECK-NEXT: VarDecl{{.*}} l 'int'164 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0165 // CHECK-NEXT: <<<NULL>>>166 // CHECK-NEXT: BinaryOperator{{.*}}'<'167 // CHECK-NEXT: ImplicitCastExpr168 // CHECK-NEXT: DeclRefExpr{{.*}}'l' 'int'169 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5170 // CHECK-NEXT: UnaryOperator{{.*}}++171 // CHECK-NEXT: DeclRefExpr{{.*}}'l' 'int'172 // CHECK-NEXT: ForStmt173 // CHECK-NEXT: DeclStmt174 // CHECK-NEXT: VarDecl{{.*}} m 'int'175 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0176 // CHECK-NEXT: <<<NULL>>>177 // CHECK-NEXT: BinaryOperator{{.*}}'<'178 // CHECK-NEXT: ImplicitCastExpr179 // CHECK-NEXT: DeclRefExpr{{.*}}'m' 'int'180 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5181 // CHECK-NEXT: UnaryOperator{{.*}}++182 // CHECK-NEXT: DeclRefExpr{{.*}}'m' 'int'183 // CHECK-NEXT: ForStmt184 // CHECK-NEXT: DeclStmt185 // CHECK-NEXT: VarDecl{{.*}} n 'int'186 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0187 // CHECK-NEXT: <<<NULL>>>188 // CHECK-NEXT: BinaryOperator{{.*}}'<'189 // CHECK-NEXT: ImplicitCastExpr190 // CHECK-NEXT: DeclRefExpr{{.*}}'n' 'int'191 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5192 // CHECK-NEXT: UnaryOperator{{.*}}++193 // CHECK-NEXT: DeclRefExpr{{.*}}'n' 'int'194 // CHECK-NEXT: NullStmt195 196 // Instantiation:197 // CHECK-NEXT: FunctionDecl{{.*}} used TemplUses 'void ()' implicit_instantiation198 // CHECK-NEXT: TemplateArgument type 'S'199 // CHECK-NEXT: RecordType{{.*}} 'S'200 // CHECK-NEXT: CXXRecord{{.*}} 'S'201 // CHECK-NEXT: TemplateArgument integral '2U'202 // CHECK-NEXT: CompoundStmt203 204 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}}serial loop205 // CHECK-NEXT: tile clause206 //207 // CHECK-NEXT: ConstantExpr{{.*}} 'int'208 // CHECK-NEXT: value: Int 1209 // CHECK-NEXT: ImplicitCastExpr{{.*}}'int' <UserDefinedConversion>210 // CHECK-NEXT: CXXMemberCallExpr{{.*}}'int'211 // CHECK-NEXT: MemberExpr{{.*}} .operator auto212 // CHECK-NEXT: MaterializeTemporaryExpr{{.*}} 'S' lvalue213 // CHECK-NEXT: CXXTemporaryObjectExpr{{.*}} 'S' 'void ()' list214 //215 // CHECK-NEXT: ConstantExpr{{.*}} 'int'216 // CHECK-NEXT: value: Int 1217 // CHECK-NEXT: ImplicitCastExpr{{.*}}'int' <UserDefinedConversion>218 // CHECK-NEXT: CXXMemberCallExpr{{.*}}'int'219 // CHECK-NEXT: MemberExpr{{.*}} .operator auto220 // CHECK-NEXT: MaterializeTemporaryExpr{{.*}} 'S' lvalue221 // CHECK-NEXT: CXXTemporaryObjectExpr{{.*}} 'S' 'void ()' list222 //223 // CHECK-NEXT: OpenACCAsteriskSizeExpr{{.*}}'int'224 //225 // CHECK-NEXT: ConstantExpr{{.*}} 'int'226 // CHECK-NEXT: value: Int 2227 // CHECK-NEXT: BinaryOperator{{.*}}'int' '+'228 // CHECK-NEXT: ImplicitCastExpr{{.*}}'int' <UserDefinedConversion>229 // CHECK-NEXT: CXXMemberCallExpr{{.*}}'int'230 // CHECK-NEXT: MemberExpr{{.*}} .operator auto231 // CHECK-NEXT: MaterializeTemporaryExpr{{.*}} 'S' lvalue232 // CHECK-NEXT: CXXTemporaryObjectExpr{{.*}} 'S' 'void ()' list233 // CHECK-NEXT: ImplicitCastExpr{{.*}}'int' <UserDefinedConversion>234 // CHECK-NEXT: CXXMemberCallExpr{{.*}}'int'235 // CHECK-NEXT: MemberExpr{{.*}} .operator auto236 // CHECK-NEXT: MaterializeTemporaryExpr{{.*}} 'S' lvalue237 // CHECK-NEXT: CXXTemporaryObjectExpr{{.*}} 'S' 'void ()' list238 //239 // CHECK-NEXT: ConstantExpr{{.*}} 'unsigned int'240 // CHECK-NEXT: value: Int 2241 // CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}} 'unsigned int'242 // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} 'unsigned int' depth 0 index 1 Value243 // CHECK-NEXT: IntegerLiteral{{.*}} 'unsigned int' 2244 //245 // CHECK-NEXT: ConstantExpr{{.*}} 'unsigned int'246 // CHECK-NEXT: value: Int 5247 // CHECK-NEXT: BinaryOperator{{.*}}'unsigned int' '+'248 // CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}} 'unsigned int'249 // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} 'unsigned int' depth 0 index 1 Value250 // CHECK-NEXT: IntegerLiteral{{.*}} 'unsigned int' 2251 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'unsigned int' <IntegralCast>252 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 3253 254 // CHECK-NEXT: ForStmt255 // CHECK-NEXT: DeclStmt256 // CHECK-NEXT: VarDecl{{.*}} i 'int'257 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0258 // CHECK-NEXT: <<<NULL>>>259 // CHECK-NEXT: BinaryOperator{{.*}}'<'260 // CHECK-NEXT: ImplicitCastExpr261 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'262 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5263 // CHECK-NEXT: UnaryOperator{{.*}}++264 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'265 // CHECK-NEXT: ForStmt266 // CHECK-NEXT: DeclStmt267 // CHECK-NEXT: VarDecl{{.*}} j 'int'268 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0269 // CHECK-NEXT: <<<NULL>>>270 // CHECK-NEXT: BinaryOperator{{.*}}'<'271 // CHECK-NEXT: ImplicitCastExpr272 // CHECK-NEXT: DeclRefExpr{{.*}}'j' 'int'273 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5274 // CHECK-NEXT: UnaryOperator{{.*}}++275 // CHECK-NEXT: DeclRefExpr{{.*}}'j' 'int'276 // CHECK-NEXT: ForStmt277 // CHECK-NEXT: DeclStmt278 // CHECK-NEXT: VarDecl{{.*}} k 'int'279 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0280 // CHECK-NEXT: <<<NULL>>>281 // CHECK-NEXT: BinaryOperator{{.*}}'<'282 // CHECK-NEXT: ImplicitCastExpr283 // CHECK-NEXT: DeclRefExpr{{.*}}'k' 'int'284 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5285 // CHECK-NEXT: UnaryOperator{{.*}}++286 // CHECK-NEXT: DeclRefExpr{{.*}}'k' 'int'287 // CHECK-NEXT: ForStmt288 // CHECK-NEXT: DeclStmt289 // CHECK-NEXT: VarDecl{{.*}} l 'int'290 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0291 // CHECK-NEXT: <<<NULL>>>292 // CHECK-NEXT: BinaryOperator{{.*}}'<'293 // CHECK-NEXT: ImplicitCastExpr294 // CHECK-NEXT: DeclRefExpr{{.*}}'l' 'int'295 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5296 // CHECK-NEXT: UnaryOperator{{.*}}++297 // CHECK-NEXT: DeclRefExpr{{.*}}'l' 'int'298 // CHECK-NEXT: ForStmt299 // CHECK-NEXT: DeclStmt300 // CHECK-NEXT: VarDecl{{.*}} m 'int'301 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0302 // CHECK-NEXT: <<<NULL>>>303 // CHECK-NEXT: BinaryOperator{{.*}}'<'304 // CHECK-NEXT: ImplicitCastExpr305 // CHECK-NEXT: DeclRefExpr{{.*}}'m' 'int'306 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5307 // CHECK-NEXT: UnaryOperator{{.*}}++308 // CHECK-NEXT: DeclRefExpr{{.*}}'m' 'int'309 // CHECK-NEXT: ForStmt310 // CHECK-NEXT: DeclStmt311 // CHECK-NEXT: VarDecl{{.*}} n 'int'312 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0313 // CHECK-NEXT: <<<NULL>>>314 // CHECK-NEXT: BinaryOperator{{.*}}'<'315 // CHECK-NEXT: ImplicitCastExpr316 // CHECK-NEXT: DeclRefExpr{{.*}}'n' 'int'317 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5318 // CHECK-NEXT: UnaryOperator{{.*}}++319 // CHECK-NEXT: DeclRefExpr{{.*}}'n' 'int'320 // CHECK-NEXT: NullStmt321 322}323 324void Inst() {325 TemplUses<S, 2>();326}327#endif // PCH_HELPER328