brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.7 KiB · 7048ff7 Raw
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