220 lines · cpp
1 2// RUN: %clang_cc1 %s -fopenacc -ast-dump | FileCheck %s3 4// Test this with PCH.5// RUN: %clang_cc1 %s -fopenacc -emit-pch -o %t %s6// RUN: %clang_cc1 %s -fopenacc -include-pch %t -ast-dump-all | FileCheck %s7#ifndef PCH_HELPER8#define PCH_HELPER9 10struct S {11 constexpr S(){};12 constexpr operator auto() {return 1;}13};14 15void NormalUses() {16 // CHECK: FunctionDecl{{.*}}NormalUses17 // CHECK-NEXT: CompoundStmt18 19#pragma acc parallel loop collapse(1)20 for(int i = 0; i < 5; ++i);21 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} parallel loop22 // CHECK-NEXT: collapse clause23 // CHECK-NEXT: ConstantExpr{{.*}}'int'24 // CHECK-NEXT: value: Int 125 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 126 // CHECK-NEXT: ForStmt27 // CHECK-NEXT: DeclStmt28 // CHECK-NEXT: VarDecl{{.*}} i 'int'29 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 030 // CHECK-NEXT: <<<NULL>>>31 // CHECK-NEXT: BinaryOperator{{.*}}'<'32 // CHECK-NEXT: ImplicitCastExpr33 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'34 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 535 // CHECK-NEXT: UnaryOperator{{.*}}++36 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'37 // CHECK-NEXT: NullStmt38 39#pragma acc serial loop collapse(force:S{})40 for(int i = 0; i < 5; ++i);41 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} serial loop42 // CHECK-NEXT: collapse clause43 // CHECK-NEXT: ConstantExpr{{.*}}'int'44 // CHECK-NEXT: value: Int 145 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <UserDefinedConversion>46 // CHECK-NEXT: CXXMemberCallExpr{{.*}} 'int'47 // CHECK-NEXT: MemberExpr{{.*}} .operator auto48 // CHECK-NEXT: MaterializeTemporaryExpr{{.*}}'S' lvalue49 // CHECK-NEXT: CXXTemporaryObjectExpr{{.*}}'S' 'void ()' list50 // CHECK-NEXT: ForStmt51 // CHECK-NEXT: DeclStmt52 // CHECK-NEXT: VarDecl{{.*}} i 'int'53 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 054 // CHECK-NEXT: <<<NULL>>>55 // CHECK-NEXT: BinaryOperator{{.*}}'<'56 // CHECK-NEXT: ImplicitCastExpr57 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'58 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 559 // CHECK-NEXT: UnaryOperator{{.*}}++60 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'61 // CHECK-NEXT: NullStmt62}63 64template<typename T, unsigned Value>65void TemplUses() {66 // CHECK: FunctionTemplateDecl{{.*}}TemplUses67 // CHECK-NEXT: TemplateTypeParmDecl {{.*}} referenced typename depth 0 index 0 T68 // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} referenced 'unsigned int' depth 0 index 1 Value69 // CHECK-NEXT: FunctionDecl{{.*}} TemplUses 'void ()'70 // CHECK-NEXT: CompoundStmt71 72#pragma acc parallel loop collapse(Value)73 for(int i = 0; i < 5; ++i)74 for(int j = 0; j < 5; ++j);75 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} parallel loop76 // CHECK-NEXT: collapse clause77 // CHECK-NEXT: DeclRefExpr{{.*}} 'unsigned int' NonTypeTemplateParm{{.*}} 'Value'78 // CHECK-NEXT: ForStmt79 // CHECK-NEXT: DeclStmt80 // CHECK-NEXT: VarDecl{{.*}} i 'int'81 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 082 // CHECK-NEXT: <<<NULL>>>83 // CHECK-NEXT: BinaryOperator{{.*}}'<'84 // CHECK-NEXT: ImplicitCastExpr85 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'86 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 587 // CHECK-NEXT: UnaryOperator{{.*}}++88 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'89 // CHECK-NEXT: ForStmt90 // CHECK-NEXT: DeclStmt91 // CHECK-NEXT: VarDecl{{.*}} j 'int'92 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 093 // CHECK-NEXT: <<<NULL>>>94 // CHECK-NEXT: BinaryOperator{{.*}}'<'95 // CHECK-NEXT: ImplicitCastExpr96 // CHECK-NEXT: DeclRefExpr{{.*}}'j' 'int'97 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 598 // CHECK-NEXT: UnaryOperator{{.*}}++99 // CHECK-NEXT: DeclRefExpr{{.*}}'j' 'int'100 // CHECK-NEXT: NullStmt101 102#pragma acc kernels loop collapse(force:T{} + S{})103 for(int i = 0; i < 5; ++i)104 for(int j = 0; j < 5; ++j);105 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} kernels loop106 // CHECK-NEXT: collapse clause107 // CHECK-NEXT: BinaryOperator {{.*}}'+'108 // CHECK-NEXT: CXXUnresolvedConstructExpr{{.*}}'T' 'T' list109 // CHECK-NEXT: InitListExpr110 // CHECK-NEXT: CXXTemporaryObjectExpr{{.*}}'S' 'void ()' list111 // CHECK-NEXT: ForStmt112 // CHECK-NEXT: DeclStmt113 // CHECK-NEXT: VarDecl{{.*}} i 'int'114 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0115 // CHECK-NEXT: <<<NULL>>>116 // CHECK-NEXT: BinaryOperator{{.*}}'<'117 // CHECK-NEXT: ImplicitCastExpr118 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'119 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5120 // CHECK-NEXT: UnaryOperator{{.*}}++121 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'122 // CHECK-NEXT: ForStmt123 // CHECK-NEXT: DeclStmt124 // CHECK-NEXT: VarDecl{{.*}} j 'int'125 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0126 // CHECK-NEXT: <<<NULL>>>127 // CHECK-NEXT: BinaryOperator{{.*}}'<'128 // CHECK-NEXT: ImplicitCastExpr129 // CHECK-NEXT: DeclRefExpr{{.*}}'j' 'int'130 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5131 // CHECK-NEXT: UnaryOperator{{.*}}++132 // CHECK-NEXT: DeclRefExpr{{.*}}'j' 'int'133 // CHECK-NEXT: NullStmt134 135 // Instantiation:136 // CHECK-NEXT: FunctionDecl{{.*}} used TemplUses 'void ()' implicit_instantiation137 // CHECK-NEXT: TemplateArgument type 'S'138 // CHECK-NEXT: RecordType{{.*}} 'S'139 // CHECK-NEXT: CXXRecord{{.*}} 'S'140 // CHECK-NEXT: TemplateArgument integral '2U'141 // CHECK-NEXT: CompoundStmt142 143 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} parallel loop144 // CHECK-NEXT: collapse clause145 // CHECK-NEXT: ConstantExpr{{.*}}'unsigned int'146 // CHECK-NEXT: value: Int 2147 // CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}} 'unsigned int'148 // CHECK-NEXT: NonTypeTemplateParmDecl149 // CHECK-NEXT: IntegerLiteral {{.*}} 'unsigned int' 2150 // CHECK-NEXT: ForStmt151 // CHECK-NEXT: DeclStmt152 // CHECK-NEXT: VarDecl{{.*}} i 'int'153 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0154 // CHECK-NEXT: <<<NULL>>>155 // CHECK-NEXT: BinaryOperator{{.*}}'<'156 // CHECK-NEXT: ImplicitCastExpr157 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'158 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5159 // CHECK-NEXT: UnaryOperator{{.*}}++160 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'161 // CHECK-NEXT: ForStmt162 // CHECK-NEXT: DeclStmt163 // CHECK-NEXT: VarDecl{{.*}} j 'int'164 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0165 // CHECK-NEXT: <<<NULL>>>166 // CHECK-NEXT: BinaryOperator{{.*}}'<'167 // CHECK-NEXT: ImplicitCastExpr168 // CHECK-NEXT: DeclRefExpr{{.*}}'j' 'int'169 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5170 // CHECK-NEXT: UnaryOperator{{.*}}++171 // CHECK-NEXT: DeclRefExpr{{.*}}'j' 'int'172 // CHECK-NEXT: NullStmt173 174 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} kernels loop175 // CHECK-NEXT: collapse clause176 // CHECK-NEXT: ConstantExpr{{.*}}'int'177 // CHECK-NEXT: value: Int 2178 // CHECK-NEXT: BinaryOperator {{.*}}'+'179 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <UserDefinedConversion>180 // CHECK-NEXT: CXXMemberCallExpr{{.*}} 'int'181 // CHECK-NEXT: MemberExpr{{.*}} .operator auto182 // CHECK-NEXT: MaterializeTemporaryExpr{{.*}}'S' lvalue183 // CHECK-NEXT: CXXTemporaryObjectExpr{{.*}}'S' 'void ()' list184 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <UserDefinedConversion>185 // CHECK-NEXT: CXXMemberCallExpr{{.*}} 'int'186 // CHECK-NEXT: MemberExpr{{.*}} .operator auto187 // CHECK-NEXT: MaterializeTemporaryExpr{{.*}}'S' lvalue188 // CHECK-NEXT: CXXTemporaryObjectExpr{{.*}}'S' 'void ()' list189 // CHECK-NEXT: ForStmt190 // CHECK-NEXT: DeclStmt191 // CHECK-NEXT: VarDecl{{.*}} i 'int'192 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0193 // CHECK-NEXT: <<<NULL>>>194 // CHECK-NEXT: BinaryOperator{{.*}}'<'195 // CHECK-NEXT: ImplicitCastExpr196 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'197 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5198 // CHECK-NEXT: UnaryOperator{{.*}}++199 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'200 // CHECK-NEXT: ForStmt201 // CHECK-NEXT: DeclStmt202 // CHECK-NEXT: VarDecl{{.*}} j 'int'203 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0204 // CHECK-NEXT: <<<NULL>>>205 // CHECK-NEXT: BinaryOperator{{.*}}'<'206 // CHECK-NEXT: ImplicitCastExpr207 // CHECK-NEXT: DeclRefExpr{{.*}}'j' 'int'208 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5209 // CHECK-NEXT: UnaryOperator{{.*}}++210 // CHECK-NEXT: DeclRefExpr{{.*}}'j' 'int'211 // CHECK-NEXT: NullStmt212 213}214 215void Inst() {216 TemplUses<S, 2>();217}218 219#endif // PCH_HELPER220