brintos

brintos / llvm-project-archived public Read only

0
0
Text · 13.2 KiB · 9fbe9af Raw
373 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 9template<unsigned I, typename ConvertsToInt, typename Int>10void TemplUses(ConvertsToInt CTI, Int IsI) {11  // CHECK: FunctionTemplateDecl{{.*}}TemplUses12  // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} 'unsigned int' depth 0 index 0 I13  // CHECK-NEXT: TemplateTypeParmDecl{{.*}}typename depth 0 index 1 ConvertsToInt14  // CHECK-NEXT: TemplateTypeParmDecl{{.*}}typename depth 0 index 2 Int15  // CHECK-NEXT: FunctionDecl{{.*}}TemplUses 'void (ConvertsToInt, Int)'16  // CHECK-NEXT: ParmVarDecl{{.*}}CTI 'ConvertsToInt'17  // CHECK-NEXT: ParmVarDecl{{.*}}IsI 'Int'18  // CHECK-NEXT: CompoundStmt19 20  // CHECK-NEXT: OpenACCLoopConstruct{{.*}}<orphan>21  // CHECK-NEXT: worker clause{{.*}}22  // CHECK-NEXT: ForStmt23  // CHECK-NEXT: DeclStmt24  // CHECK-NEXT: VarDecl{{.*}} i 'int'25  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 026  // CHECK-NEXT: <<<NULL>>>27  // CHECK-NEXT: BinaryOperator{{.*}}'<'28  // CHECK-NEXT: ImplicitCastExpr29  // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'30  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 531  // CHECK-NEXT: UnaryOperator{{.*}}++32  // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'33  // CHECK-NEXT: NullStmt34#pragma acc loop worker35  for(int i = 0; i < 5; ++i);36 37  // CHECK-NEXT: OpenACCComputeConstruct {{.*}} parallel38  // CHECK-NEXT: OpenACCLoopConstruct{{.*}} parent: parallel39  // CHECK-NEXT: worker clause{{.*}}40  // CHECK-NEXT: ForStmt41  // CHECK-NEXT: DeclStmt42  // CHECK-NEXT: VarDecl{{.*}} i 'int'43  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 044  // CHECK-NEXT: <<<NULL>>>45  // CHECK-NEXT: BinaryOperator{{.*}}'<'46  // CHECK-NEXT: ImplicitCastExpr47  // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'48  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 549  // CHECK-NEXT: UnaryOperator{{.*}}++50  // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'51  // CHECK-NEXT: NullStmt52#pragma acc parallel53#pragma acc loop worker54  for(int i = 0; i < 5; ++i);55 56  // CHECK-NEXT: OpenACCComputeConstruct {{.*}} serial57  // CHECK-NEXT: OpenACCLoopConstruct{{.*}} parent: serial58  // CHECK-NEXT: worker clause{{.*}}59  // CHECK-NEXT: ForStmt60  // CHECK-NEXT: DeclStmt61  // CHECK-NEXT: VarDecl{{.*}} i 'int'62  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 063  // CHECK-NEXT: <<<NULL>>>64  // CHECK-NEXT: BinaryOperator{{.*}}'<'65  // CHECK-NEXT: ImplicitCastExpr66  // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'67  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 568  // CHECK-NEXT: UnaryOperator{{.*}}++69  // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'70  // CHECK-NEXT: NullStmt71#pragma acc serial72#pragma acc loop worker73  for(int i = 0; i < 5; ++i);74 75  // CHECK-NEXT: OpenACCComputeConstruct {{.*}} kernels76  // CHECK-NEXT: OpenACCLoopConstruct{{.*}} parent: kernels77  // CHECK-NEXT: worker clause{{.*}}78  // CHECK-NEXT: DeclRefExpr{{.*}} 'ConvertsToInt' lvalue ParmVar79  // CHECK-NEXT: ForStmt80  // CHECK-NEXT: DeclStmt81  // CHECK-NEXT: VarDecl{{.*}} i 'int'82  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 083  // CHECK-NEXT: <<<NULL>>>84  // CHECK-NEXT: BinaryOperator{{.*}}'<'85  // CHECK-NEXT: ImplicitCastExpr86  // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'87  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 588  // CHECK-NEXT: UnaryOperator{{.*}}++89  // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'90  // CHECK-NEXT: NullStmt91#pragma acc kernels92#pragma acc loop worker(CTI)93  for(int i = 0; i < 5; ++i);94 95  // CHECK-NEXT: OpenACCComputeConstruct {{.*}} kernels96  // CHECK-NEXT: OpenACCLoopConstruct{{.*}} parent: kernels97  // CHECK-NEXT: worker clause{{.*}}98  // CHECK-NEXT: DeclRefExpr{{.*}} 'Int' lvalue ParmVar99  // CHECK-NEXT: ForStmt100  // CHECK-NEXT: DeclStmt101  // CHECK-NEXT: VarDecl{{.*}} i 'int'102  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0103  // CHECK-NEXT: <<<NULL>>>104  // CHECK-NEXT: BinaryOperator{{.*}}'<'105  // CHECK-NEXT: ImplicitCastExpr106  // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'107  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5108  // CHECK-NEXT: UnaryOperator{{.*}}++109  // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'110  // CHECK-NEXT: NullStmt111#pragma acc kernels112#pragma acc loop worker(num:IsI)113  for(int i = 0; i < 5; ++i);114 115  // CHECK-NEXT: OpenACCComputeConstruct {{.*}} kernels116  // CHECK-NEXT: OpenACCLoopConstruct{{.*}} parent: kernels117  // CHECK-NEXT: worker clause{{.*}}118  // CHECK-NEXT: DeclRefExpr{{.*}} 'unsigned int' NonTypeTemplateParm{{.*}}'I' 'unsigned int'119  // CHECK-NEXT: ForStmt120  // CHECK-NEXT: DeclStmt121  // CHECK-NEXT: VarDecl{{.*}} i 'int'122  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0123  // CHECK-NEXT: <<<NULL>>>124  // CHECK-NEXT: BinaryOperator{{.*}}'<'125  // CHECK-NEXT: ImplicitCastExpr126  // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'127  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5128  // CHECK-NEXT: UnaryOperator{{.*}}++129  // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'130  // CHECK-NEXT: NullStmt131#pragma acc kernels132#pragma acc loop worker(num:I)133  for(int i = 0; i < 5; ++i);134 135  // Instantiations:136  // CHECK-NEXT: FunctionDecl{{.*}} TemplUses 'void (Converts, int)' implicit_instantiation137  // CHECK-NEXT: TemplateArgument integral '3U'138  // CHECK-NEXT: TemplateArgument type 'Converts'139  // CHECK-NEXT: RecordType{{.*}}'Converts'140  // CHECK-NEXT: CXXRecord{{.*}}'Converts141  // CHECK-NEXT: TemplateArgument type 'int'142  // CHECK-NEXT: BuiltinType{{.*}}'int'143  // CHECK-NEXT: ParmVarDecl{{.*}} CTI 'Converts'144  // CHECK-NEXT: ParmVarDecl{{.*}} IsI 'int'145  // CHECK-NEXT: CompoundStmt146  //147  // CHECK-NEXT: OpenACCLoopConstruct{{.*}}<orphan>148  // CHECK-NEXT: worker clause{{.*}}149  // 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: NullStmt161  //162  // CHECK-NEXT: OpenACCComputeConstruct {{.*}} parallel163  // CHECK-NEXT: OpenACCLoopConstruct{{.*}} parent: parallel164  // CHECK-NEXT: worker clause{{.*}}165  // CHECK-NEXT: ForStmt166  // CHECK-NEXT: DeclStmt167  // CHECK-NEXT: VarDecl{{.*}} i 'int'168  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0169  // CHECK-NEXT: <<<NULL>>>170  // CHECK-NEXT: BinaryOperator{{.*}}'<'171  // CHECK-NEXT: ImplicitCastExpr172  // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'173  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5174  // CHECK-NEXT: UnaryOperator{{.*}}++175  // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'176  // CHECK-NEXT: NullStmt177  //178  // CHECK-NEXT: OpenACCComputeConstruct {{.*}} serial179  // CHECK-NEXT: OpenACCLoopConstruct{{.*}} parent: serial180  // CHECK-NEXT: worker clause{{.*}}181  // CHECK-NEXT: ForStmt182  // CHECK-NEXT: DeclStmt183  // CHECK-NEXT: VarDecl{{.*}} i 'int'184  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0185  // CHECK-NEXT: <<<NULL>>>186  // CHECK-NEXT: BinaryOperator{{.*}}'<'187  // CHECK-NEXT: ImplicitCastExpr188  // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'189  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5190  // CHECK-NEXT: UnaryOperator{{.*}}++191  // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'192  // CHECK-NEXT: NullStmt193  //194  // CHECK-NEXT: OpenACCComputeConstruct {{.*}} kernels195  // CHECK-NEXT: OpenACCLoopConstruct{{.*}} parent: kernels196  // CHECK-NEXT: worker clause{{.*}}197  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <UserDefinedConversion>198  // CHECK-NEXT: CXXMemberCallExpr{{.*}} 'int'199  // CHECK-NEXT: MemberExpr{{.*}} .operator int200  // CHECK-NEXT: DeclRefExpr{{.*}} 'Converts' lvalue ParmVar201  // CHECK-NEXT: ForStmt202  // CHECK-NEXT: DeclStmt203  // CHECK-NEXT: VarDecl{{.*}} i 'int'204  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0205  // CHECK-NEXT: <<<NULL>>>206  // CHECK-NEXT: BinaryOperator{{.*}}'<'207  // CHECK-NEXT: ImplicitCastExpr208  // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'209  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5210  // CHECK-NEXT: UnaryOperator{{.*}}++211  // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'212  // CHECK-NEXT: NullStmt213  //214  // CHECK-NEXT: OpenACCComputeConstruct {{.*}} kernels215  // CHECK-NEXT: OpenACCLoopConstruct{{.*}} parent: kernels216  // CHECK-NEXT: worker clause{{.*}}217  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'int' <LValueToRValue>218  // CHECK-NEXT: DeclRefExpr{{.*}} 'int' lvalue ParmVar{{.*}} 'IsI' 'int'219  // CHECK-NEXT: ForStmt220  // CHECK-NEXT: DeclStmt221  // CHECK-NEXT: VarDecl{{.*}} i 'int'222  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0223  // CHECK-NEXT: <<<NULL>>>224  // CHECK-NEXT: BinaryOperator{{.*}}'<'225  // CHECK-NEXT: ImplicitCastExpr226  // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'227  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5228  // CHECK-NEXT: UnaryOperator{{.*}}++229  // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'230  // CHECK-NEXT: NullStmt231  //232  // CHECK-NEXT: OpenACCComputeConstruct {{.*}} kernels233  // CHECK-NEXT: OpenACCLoopConstruct{{.*}} parent: kernels234  // CHECK-NEXT: worker clause{{.*}}235  // CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}}'unsigned int'236  // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}}'unsigned int' depth 0 index 0 I237  // CHECK-NEXT: IntegerLiteral{{.*}} 'unsigned int' 3238  // CHECK-NEXT: ForStmt239  // CHECK-NEXT: DeclStmt240  // CHECK-NEXT: VarDecl{{.*}} i 'int'241  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0242  // CHECK-NEXT: <<<NULL>>>243  // CHECK-NEXT: BinaryOperator{{.*}}'<'244  // CHECK-NEXT: ImplicitCastExpr245  // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'246  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5247  // CHECK-NEXT: UnaryOperator{{.*}}++248  // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'249  // CHECK-NEXT: NullStmt250}251 252struct Converts{253  operator int();254};255 256void uses() {257  // CHECK: FunctionDecl{{.*}} uses258  // CHECK-NEXT: CompoundStmt259  //260  // CHECK-NEXT: CallExpr261  TemplUses<3>(Converts{}, 5);262 263  // CHECK: OpenACCLoopConstruct{{.*}}<orphan>264  // CHECK-NEXT: worker clause{{.*}}265  // CHECK-NEXT: ForStmt266  // CHECK-NEXT: DeclStmt267  // CHECK-NEXT: VarDecl{{.*}} i 'int'268  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0269  // CHECK-NEXT: <<<NULL>>>270  // CHECK-NEXT: BinaryOperator{{.*}}'<'271  // CHECK-NEXT: ImplicitCastExpr272  // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'273  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5274  // CHECK-NEXT: UnaryOperator{{.*}}++275  // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'276  // CHECK-NEXT: NullStmt277#pragma acc loop worker278  for(int i = 0; i < 5; ++i);279 280  // CHECK-NEXT: OpenACCComputeConstruct {{.*}} parallel281  // CHECK-NEXT: OpenACCLoopConstruct{{.*}} parent: parallel282  // CHECK-NEXT: worker clause{{.*}}283  // CHECK-NEXT: ForStmt284  // CHECK-NEXT: DeclStmt285  // CHECK-NEXT: VarDecl{{.*}} i 'int'286  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0287  // CHECK-NEXT: <<<NULL>>>288  // CHECK-NEXT: BinaryOperator{{.*}}'<'289  // CHECK-NEXT: ImplicitCastExpr290  // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'291  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5292  // CHECK-NEXT: UnaryOperator{{.*}}++293  // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'294  // CHECK-NEXT: NullStmt295#pragma acc parallel296#pragma acc loop worker297  for(int i = 0; i < 5; ++i);298 299  // CHECK-NEXT: OpenACCComputeConstruct {{.*}} serial300  // CHECK-NEXT: OpenACCLoopConstruct{{.*}} parent: serial301  // CHECK-NEXT: worker clause{{.*}}302  // CHECK-NEXT: ForStmt303  // CHECK-NEXT: DeclStmt304  // CHECK-NEXT: VarDecl{{.*}} i 'int'305  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0306  // CHECK-NEXT: <<<NULL>>>307  // CHECK-NEXT: BinaryOperator{{.*}}'<'308  // CHECK-NEXT: ImplicitCastExpr309  // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'310  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5311  // CHECK-NEXT: UnaryOperator{{.*}}++312  // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'313  // CHECK-NEXT: NullStmt314#pragma acc serial315#pragma acc loop worker316  for(int i = 0; i < 5; ++i);317 318  Converts CTI;319  // CHECK-NEXT: DeclStmt320  // CHECK-NEXT: VarDecl321  // CHECK-NEXT: CXXConstructExpr322 323  // CHECK-NEXT: OpenACCComputeConstruct {{.*}} kernels324  // CHECK-NEXT: OpenACCLoopConstruct{{.*}} parent: kernels325  // CHECK-NEXT: worker clause{{.*}}326  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int' <UserDefinedConversion>327  // CHECK-NEXT: CXXMemberCallExpr{{.*}} 'int'328  // CHECK-NEXT: MemberExpr{{.*}} .operator int329  // CHECK-NEXT: DeclRefExpr{{.*}}'Converts' lvalue Var330  // CHECK-NEXT: ForStmt331  // CHECK-NEXT: DeclStmt332  // CHECK-NEXT: VarDecl{{.*}} i 'int'333  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0334  // CHECK-NEXT: <<<NULL>>>335  // CHECK-NEXT: BinaryOperator{{.*}}'<'336  // CHECK-NEXT: ImplicitCastExpr337  // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'338  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5339  // CHECK-NEXT: UnaryOperator{{.*}}++340  // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'341  // CHECK-NEXT: NullStmt342#pragma acc kernels343#pragma acc loop worker(CTI)344  for(int i = 0; i < 5; ++i);345 346  int IsI;347  // CHECK-NEXT: DeclStmt348  // CHECK-NEXT: VarDecl349 350  // CHECK-NEXT: OpenACCComputeConstruct {{.*}} kernels351  // CHECK-NEXT: OpenACCLoopConstruct{{.*}} parent: kernels352  // CHECK-NEXT: worker clause{{.*}}353  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int' <LValueToRValue>354  // CHECK-NEXT: DeclRefExpr{{.*}}'int' lvalue Var355  // CHECK-NEXT: ForStmt356  // CHECK-NEXT: DeclStmt357  // CHECK-NEXT: VarDecl{{.*}} i 'int'358  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0359  // CHECK-NEXT: <<<NULL>>>360  // CHECK-NEXT: BinaryOperator{{.*}}'<'361  // CHECK-NEXT: ImplicitCastExpr362  // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'363  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5364  // CHECK-NEXT: UnaryOperator{{.*}}++365  // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'366  // CHECK-NEXT: NullStmt367#pragma acc kernels368#pragma acc loop worker(num:IsI)369  for(int i = 0; i < 5; ++i);370}371 372#endif // PCH_HELPER373