219 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 loop collapse(1)19 for(int i = 0; i < 5; ++i);20 // CHECK-NEXT: OpenACCLoopConstruct21 // CHECK-NEXT: collapse clause22 // CHECK-NEXT: ConstantExpr{{.*}}'int'23 // CHECK-NEXT: value: Int 124 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 125 // CHECK-NEXT: ForStmt26 // CHECK-NEXT: DeclStmt27 // CHECK-NEXT: VarDecl{{.*}} i 'int'28 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 029 // CHECK-NEXT: <<<NULL>>>30 // CHECK-NEXT: BinaryOperator{{.*}}'<'31 // CHECK-NEXT: ImplicitCastExpr32 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'33 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 534 // CHECK-NEXT: UnaryOperator{{.*}}++35 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'36 // CHECK-NEXT: NullStmt37 38#pragma acc loop collapse(force:S{})39 for(int i = 0; i < 5; ++i);40 // CHECK-NEXT: OpenACCLoopConstruct41 // CHECK-NEXT: collapse clause42 // CHECK-NEXT: ConstantExpr{{.*}}'int'43 // CHECK-NEXT: value: Int 144 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <UserDefinedConversion>45 // CHECK-NEXT: CXXMemberCallExpr{{.*}} 'int'46 // CHECK-NEXT: MemberExpr{{.*}} .operator auto47 // CHECK-NEXT: MaterializeTemporaryExpr{{.*}}'S' lvalue48 // CHECK-NEXT: CXXTemporaryObjectExpr{{.*}}'S' 'void ()' list49 // CHECK-NEXT: ForStmt50 // CHECK-NEXT: DeclStmt51 // CHECK-NEXT: VarDecl{{.*}} i 'int'52 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 053 // CHECK-NEXT: <<<NULL>>>54 // CHECK-NEXT: BinaryOperator{{.*}}'<'55 // CHECK-NEXT: ImplicitCastExpr56 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'57 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 558 // CHECK-NEXT: UnaryOperator{{.*}}++59 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'60 // CHECK-NEXT: NullStmt61}62 63template<typename T, unsigned Value>64void TemplUses() {65 // CHECK: FunctionTemplateDecl{{.*}}TemplUses66 // CHECK-NEXT: TemplateTypeParmDecl {{.*}} referenced typename depth 0 index 0 T67 // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} referenced 'unsigned int' depth 0 index 1 Value68 // CHECK-NEXT: FunctionDecl{{.*}} TemplUses 'void ()'69 // CHECK-NEXT: CompoundStmt70 71#pragma acc loop collapse(Value)72 for(int i = 0; i < 5; ++i)73 for(int j = 0; j < 5; ++j);74 // CHECK-NEXT: OpenACCLoopConstruct75 // CHECK-NEXT: collapse clause76 // CHECK-NEXT: DeclRefExpr{{.*}} 'unsigned int' NonTypeTemplateParm{{.*}} 'Value'77 // CHECK-NEXT: ForStmt78 // CHECK-NEXT: DeclStmt79 // CHECK-NEXT: VarDecl{{.*}} i 'int'80 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 081 // CHECK-NEXT: <<<NULL>>>82 // CHECK-NEXT: BinaryOperator{{.*}}'<'83 // CHECK-NEXT: ImplicitCastExpr84 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'85 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 586 // CHECK-NEXT: UnaryOperator{{.*}}++87 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'88 // CHECK-NEXT: ForStmt89 // CHECK-NEXT: DeclStmt90 // CHECK-NEXT: VarDecl{{.*}} j 'int'91 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 092 // CHECK-NEXT: <<<NULL>>>93 // CHECK-NEXT: BinaryOperator{{.*}}'<'94 // CHECK-NEXT: ImplicitCastExpr95 // CHECK-NEXT: DeclRefExpr{{.*}}'j' 'int'96 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 597 // CHECK-NEXT: UnaryOperator{{.*}}++98 // CHECK-NEXT: DeclRefExpr{{.*}}'j' 'int'99 // CHECK-NEXT: NullStmt100 101#pragma acc loop collapse(force:T{} + S{})102 for(int i = 0; i < 5; ++i)103 for(int j = 0; j < 5; ++j);104 // CHECK-NEXT: OpenACCLoopConstruct105 // CHECK-NEXT: collapse clause106 // CHECK-NEXT: BinaryOperator {{.*}}'+'107 // CHECK-NEXT: CXXUnresolvedConstructExpr{{.*}}'T' 'T' list108 // CHECK-NEXT: InitListExpr109 // CHECK-NEXT: CXXTemporaryObjectExpr{{.*}}'S' 'void ()' list110 // CHECK-NEXT: ForStmt111 // CHECK-NEXT: DeclStmt112 // CHECK-NEXT: VarDecl{{.*}} i 'int'113 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0114 // CHECK-NEXT: <<<NULL>>>115 // CHECK-NEXT: BinaryOperator{{.*}}'<'116 // CHECK-NEXT: ImplicitCastExpr117 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'118 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5119 // CHECK-NEXT: UnaryOperator{{.*}}++120 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'121 // CHECK-NEXT: ForStmt122 // CHECK-NEXT: DeclStmt123 // CHECK-NEXT: VarDecl{{.*}} j 'int'124 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0125 // CHECK-NEXT: <<<NULL>>>126 // CHECK-NEXT: BinaryOperator{{.*}}'<'127 // CHECK-NEXT: ImplicitCastExpr128 // CHECK-NEXT: DeclRefExpr{{.*}}'j' 'int'129 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5130 // CHECK-NEXT: UnaryOperator{{.*}}++131 // CHECK-NEXT: DeclRefExpr{{.*}}'j' 'int'132 // CHECK-NEXT: NullStmt133 134 // Instantiation:135 // CHECK-NEXT: FunctionDecl{{.*}} used TemplUses 'void ()' implicit_instantiation136 // CHECK-NEXT: TemplateArgument type 'S'137 // CHECK-NEXT: RecordType{{.*}} 'S'138 // CHECK-NEXT: CXXRecord{{.*}} 'S'139 // CHECK-NEXT: TemplateArgument integral '2U'140 // CHECK-NEXT: CompoundStmt141 142 // CHECK-NEXT: OpenACCLoopConstruct143 // CHECK-NEXT: collapse clause144 // CHECK-NEXT: ConstantExpr{{.*}}'unsigned int'145 // CHECK-NEXT: value: Int 2146 // CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}} 'unsigned int'147 // CHECK-NEXT: NonTypeTemplateParmDecl148 // CHECK-NEXT: IntegerLiteral {{.*}} 'unsigned int' 2149 // CHECK-NEXT: ForStmt150 // CHECK-NEXT: DeclStmt151 // CHECK-NEXT: VarDecl{{.*}} i 'int'152 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0153 // CHECK-NEXT: <<<NULL>>>154 // CHECK-NEXT: BinaryOperator{{.*}}'<'155 // CHECK-NEXT: ImplicitCastExpr156 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'157 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5158 // CHECK-NEXT: UnaryOperator{{.*}}++159 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'160 // CHECK-NEXT: ForStmt161 // CHECK-NEXT: DeclStmt162 // CHECK-NEXT: VarDecl{{.*}} j 'int'163 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0164 // CHECK-NEXT: <<<NULL>>>165 // CHECK-NEXT: BinaryOperator{{.*}}'<'166 // CHECK-NEXT: ImplicitCastExpr167 // CHECK-NEXT: DeclRefExpr{{.*}}'j' 'int'168 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5169 // CHECK-NEXT: UnaryOperator{{.*}}++170 // CHECK-NEXT: DeclRefExpr{{.*}}'j' 'int'171 // CHECK-NEXT: NullStmt172 173 // CHECK-NEXT: OpenACCLoopConstruct174 // CHECK-NEXT: collapse clause175 // CHECK-NEXT: ConstantExpr{{.*}}'int'176 // CHECK-NEXT: value: Int 2177 // CHECK-NEXT: BinaryOperator {{.*}}'+'178 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <UserDefinedConversion>179 // CHECK-NEXT: CXXMemberCallExpr{{.*}} 'int'180 // CHECK-NEXT: MemberExpr{{.*}} .operator auto181 // CHECK-NEXT: MaterializeTemporaryExpr{{.*}}'S' lvalue182 // CHECK-NEXT: CXXTemporaryObjectExpr{{.*}}'S' 'void ()' list183 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <UserDefinedConversion>184 // CHECK-NEXT: CXXMemberCallExpr{{.*}} 'int'185 // CHECK-NEXT: MemberExpr{{.*}} .operator auto186 // CHECK-NEXT: MaterializeTemporaryExpr{{.*}}'S' lvalue187 // CHECK-NEXT: CXXTemporaryObjectExpr{{.*}}'S' 'void ()' list188 // CHECK-NEXT: ForStmt189 // CHECK-NEXT: DeclStmt190 // CHECK-NEXT: VarDecl{{.*}} i 'int'191 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0192 // CHECK-NEXT: <<<NULL>>>193 // CHECK-NEXT: BinaryOperator{{.*}}'<'194 // CHECK-NEXT: ImplicitCastExpr195 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'196 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5197 // CHECK-NEXT: UnaryOperator{{.*}}++198 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'199 // CHECK-NEXT: ForStmt200 // CHECK-NEXT: DeclStmt201 // CHECK-NEXT: VarDecl{{.*}} j 'int'202 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0203 // CHECK-NEXT: <<<NULL>>>204 // CHECK-NEXT: BinaryOperator{{.*}}'<'205 // CHECK-NEXT: ImplicitCastExpr206 // CHECK-NEXT: DeclRefExpr{{.*}}'j' 'int'207 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5208 // CHECK-NEXT: UnaryOperator{{.*}}++209 // CHECK-NEXT: DeclRefExpr{{.*}}'j' 'int'210 // CHECK-NEXT: NullStmt211 212}213 214void Inst() {215 TemplUses<S, 2>();216}217 218#endif // PCH_HELPER219