brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.9 KiB · 89ba7cb Raw
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