brintos

brintos / llvm-project-archived public Read only

0
0
Text · 12.3 KiB · 55a334c Raw
328 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 parallel loop tile(S{}, 1, 2, *)19  for(int i = 0;i < 5;++i)20    for(int j = 0;j < 5;++j)21      for(int k = 0;k < 5;++k)22        for(int l = 0;l < 5;++l);23  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} parallel loop24  // CHECK-NEXT: tile clause25  // CHECK-NEXT: ConstantExpr{{.*}} 'int'26  // CHECK-NEXT: value: Int 127  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int' <UserDefinedConversion>28  // CHECK-NEXT: CXXMemberCallExpr{{.*}}'int'29  // CHECK-NEXT: MemberExpr{{.*}} .operator auto30  // CHECK-NEXT: MaterializeTemporaryExpr{{.*}} 'S' lvalue31  // CHECK-NEXT: CXXTemporaryObjectExpr{{.*}} 'S' 'void ()' list32  // CHECK-NEXT: ConstantExpr{{.*}} 'int'33  // CHECK-NEXT: value: Int 134  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 135  // CHECK-NEXT: ConstantExpr{{.*}} 'int'36  // CHECK-NEXT: value: Int 237  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 238  // CHECK-NEXT: OpenACCAsteriskSizeExpr{{.*}}'int'39  // CHECK-NEXT: ForStmt40  // CHECK-NEXT: DeclStmt41  // CHECK-NEXT: VarDecl{{.*}} i 'int'42  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 043  // CHECK-NEXT: <<<NULL>>>44  // CHECK-NEXT: BinaryOperator{{.*}}'<'45  // CHECK-NEXT: ImplicitCastExpr46  // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'47  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 548  // CHECK-NEXT: UnaryOperator{{.*}}++49  // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'50  // CHECK-NEXT: ForStmt51  // CHECK-NEXT: DeclStmt52  // CHECK-NEXT: VarDecl{{.*}} j 'int'53  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 054  // CHECK-NEXT: <<<NULL>>>55  // CHECK-NEXT: BinaryOperator{{.*}}'<'56  // CHECK-NEXT: ImplicitCastExpr57  // CHECK-NEXT: DeclRefExpr{{.*}}'j' 'int'58  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 559  // CHECK-NEXT: UnaryOperator{{.*}}++60  // CHECK-NEXT: DeclRefExpr{{.*}}'j' 'int'61  // CHECK-NEXT: ForStmt62  // CHECK-NEXT: DeclStmt63  // CHECK-NEXT: VarDecl{{.*}} k 'int'64  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 065  // CHECK-NEXT: <<<NULL>>>66  // CHECK-NEXT: BinaryOperator{{.*}}'<'67  // CHECK-NEXT: ImplicitCastExpr68  // CHECK-NEXT: DeclRefExpr{{.*}}'k' 'int'69  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 570  // CHECK-NEXT: UnaryOperator{{.*}}++71  // CHECK-NEXT: DeclRefExpr{{.*}}'k' 'int'72  // CHECK-NEXT: ForStmt73  // CHECK-NEXT: DeclStmt74  // CHECK-NEXT: VarDecl{{.*}} l 'int'75  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 076  // CHECK-NEXT: <<<NULL>>>77  // CHECK-NEXT: BinaryOperator{{.*}}'<'78  // CHECK-NEXT: ImplicitCastExpr79  // CHECK-NEXT: DeclRefExpr{{.*}}'l' 'int'80  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 581  // CHECK-NEXT: UnaryOperator{{.*}}++82  // CHECK-NEXT: DeclRefExpr{{.*}}'l' 'int'83  // CHECK-NEXT: NullStmt84}85 86template<typename T, unsigned Value>87void TemplUses() {88  // CHECK: FunctionTemplateDecl{{.*}}TemplUses89  // CHECK-NEXT: TemplateTypeParmDecl {{.*}} referenced typename depth 0 index 0 T90  // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} referenced 'unsigned int' depth 0 index 1 Value91  // CHECK-NEXT: FunctionDecl{{.*}} TemplUses 'void ()'92  // CHECK-NEXT: CompoundStmt93 94#pragma acc serial loop tile(S{}, T{}, *, T{} + S{}, Value, Value + 3)95  for(int i = 0;i < 5;++i)96    for(int j = 0;j < 5;++j)97      for(int k = 0;k < 5;++k)98        for(int l = 0;l < 5;++l)99          for(int m = 0;m < 5;++m)100            for(int n = 0;n < 5;++n);101  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}}serial loop102  // CHECK-NEXT: tile clause103  //104  // CHECK-NEXT: ConstantExpr{{.*}} 'int'105  // CHECK-NEXT: value: Int 1106  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int' <UserDefinedConversion>107  // CHECK-NEXT: CXXMemberCallExpr{{.*}}'int'108  // CHECK-NEXT: MemberExpr{{.*}} .operator auto109  // CHECK-NEXT: MaterializeTemporaryExpr{{.*}} 'S' lvalue110  // CHECK-NEXT: CXXTemporaryObjectExpr{{.*}} 'S' 'void ()' list111  //112  // CHECK-NEXT: CXXUnresolvedConstructExpr{{.*}} 'T' 'T' list113  // CHECK-NEXT: InitListExpr{{.*}}'void'114  //115  // CHECK-NEXT: OpenACCAsteriskSizeExpr{{.*}}'int'116  //117  // CHECK-NEXT: BinaryOperator{{.*}}'<dependent type>' '+'118  // CHECK-NEXT: CXXUnresolvedConstructExpr{{.*}} 'T' 'T' list119  // CHECK-NEXT: InitListExpr{{.*}}'void'120  // CHECK-NEXT: CXXTemporaryObjectExpr{{.*}} 'S' 'void ()' list121  //122  // CHECK-NEXT: DeclRefExpr{{.*}}'unsigned int' NonTypeTemplateParm{{.*}}'Value' 'unsigned int'123  //124  // CHECK-NEXT: BinaryOperator{{.*}}'unsigned int' '+'125  // CHECK-NEXT: DeclRefExpr{{.*}}'unsigned int' NonTypeTemplateParm{{.*}}'Value' 'unsigned int'126  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'unsigned int' <IntegralCast>127  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 3128  // CHECK-NEXT: ForStmt129  // CHECK-NEXT: DeclStmt130  // CHECK-NEXT: VarDecl{{.*}} i 'int'131  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0132  // CHECK-NEXT: <<<NULL>>>133  // CHECK-NEXT: BinaryOperator{{.*}}'<'134  // CHECK-NEXT: ImplicitCastExpr135  // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'136  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5137  // CHECK-NEXT: UnaryOperator{{.*}}++138  // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'139  // CHECK-NEXT: ForStmt140  // CHECK-NEXT: DeclStmt141  // CHECK-NEXT: VarDecl{{.*}} j 'int'142  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0143  // CHECK-NEXT: <<<NULL>>>144  // CHECK-NEXT: BinaryOperator{{.*}}'<'145  // CHECK-NEXT: ImplicitCastExpr146  // CHECK-NEXT: DeclRefExpr{{.*}}'j' 'int'147  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5148  // CHECK-NEXT: UnaryOperator{{.*}}++149  // CHECK-NEXT: DeclRefExpr{{.*}}'j' 'int'150  // CHECK-NEXT: ForStmt151  // CHECK-NEXT: DeclStmt152  // CHECK-NEXT: VarDecl{{.*}} k 'int'153  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0154  // CHECK-NEXT: <<<NULL>>>155  // CHECK-NEXT: BinaryOperator{{.*}}'<'156  // CHECK-NEXT: ImplicitCastExpr157  // CHECK-NEXT: DeclRefExpr{{.*}}'k' 'int'158  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5159  // CHECK-NEXT: UnaryOperator{{.*}}++160  // CHECK-NEXT: DeclRefExpr{{.*}}'k' 'int'161  // CHECK-NEXT: ForStmt162  // CHECK-NEXT: DeclStmt163  // CHECK-NEXT: VarDecl{{.*}} l 'int'164  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0165  // CHECK-NEXT: <<<NULL>>>166  // CHECK-NEXT: BinaryOperator{{.*}}'<'167  // CHECK-NEXT: ImplicitCastExpr168  // CHECK-NEXT: DeclRefExpr{{.*}}'l' 'int'169  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5170  // CHECK-NEXT: UnaryOperator{{.*}}++171  // CHECK-NEXT: DeclRefExpr{{.*}}'l' 'int'172  // CHECK-NEXT: ForStmt173  // CHECK-NEXT: DeclStmt174  // CHECK-NEXT: VarDecl{{.*}} m 'int'175  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0176  // CHECK-NEXT: <<<NULL>>>177  // CHECK-NEXT: BinaryOperator{{.*}}'<'178  // CHECK-NEXT: ImplicitCastExpr179  // CHECK-NEXT: DeclRefExpr{{.*}}'m' 'int'180  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5181  // CHECK-NEXT: UnaryOperator{{.*}}++182  // CHECK-NEXT: DeclRefExpr{{.*}}'m' 'int'183  // CHECK-NEXT: ForStmt184  // CHECK-NEXT: DeclStmt185  // CHECK-NEXT: VarDecl{{.*}} n 'int'186  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0187  // CHECK-NEXT: <<<NULL>>>188  // CHECK-NEXT: BinaryOperator{{.*}}'<'189  // CHECK-NEXT: ImplicitCastExpr190  // CHECK-NEXT: DeclRefExpr{{.*}}'n' 'int'191  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5192  // CHECK-NEXT: UnaryOperator{{.*}}++193  // CHECK-NEXT: DeclRefExpr{{.*}}'n' 'int'194  // CHECK-NEXT: NullStmt195 196  // Instantiation:197  // CHECK-NEXT: FunctionDecl{{.*}} used TemplUses 'void ()' implicit_instantiation198  // CHECK-NEXT: TemplateArgument type 'S'199  // CHECK-NEXT: RecordType{{.*}} 'S'200  // CHECK-NEXT: CXXRecord{{.*}} 'S'201  // CHECK-NEXT: TemplateArgument integral '2U'202  // CHECK-NEXT: CompoundStmt203 204  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}}serial loop205  // CHECK-NEXT: tile clause206  //207  // CHECK-NEXT: ConstantExpr{{.*}} 'int'208  // CHECK-NEXT: value: Int 1209  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int' <UserDefinedConversion>210  // CHECK-NEXT: CXXMemberCallExpr{{.*}}'int'211  // CHECK-NEXT: MemberExpr{{.*}} .operator auto212  // CHECK-NEXT: MaterializeTemporaryExpr{{.*}} 'S' lvalue213  // CHECK-NEXT: CXXTemporaryObjectExpr{{.*}} 'S' 'void ()' list214  //215  // CHECK-NEXT: ConstantExpr{{.*}} 'int'216  // CHECK-NEXT: value: Int 1217  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int' <UserDefinedConversion>218  // CHECK-NEXT: CXXMemberCallExpr{{.*}}'int'219  // CHECK-NEXT: MemberExpr{{.*}} .operator auto220  // CHECK-NEXT: MaterializeTemporaryExpr{{.*}} 'S' lvalue221  // CHECK-NEXT: CXXTemporaryObjectExpr{{.*}} 'S' 'void ()' list222  //223  // CHECK-NEXT: OpenACCAsteriskSizeExpr{{.*}}'int'224  //225  // CHECK-NEXT: ConstantExpr{{.*}} 'int'226  // CHECK-NEXT: value: Int 2227  // CHECK-NEXT: BinaryOperator{{.*}}'int' '+'228  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int' <UserDefinedConversion>229  // CHECK-NEXT: CXXMemberCallExpr{{.*}}'int'230  // CHECK-NEXT: MemberExpr{{.*}} .operator auto231  // CHECK-NEXT: MaterializeTemporaryExpr{{.*}} 'S' lvalue232  // CHECK-NEXT: CXXTemporaryObjectExpr{{.*}} 'S' 'void ()' list233  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int' <UserDefinedConversion>234  // CHECK-NEXT: CXXMemberCallExpr{{.*}}'int'235  // CHECK-NEXT: MemberExpr{{.*}} .operator auto236  // CHECK-NEXT: MaterializeTemporaryExpr{{.*}} 'S' lvalue237  // CHECK-NEXT: CXXTemporaryObjectExpr{{.*}} 'S' 'void ()' list238  //239  // CHECK-NEXT: ConstantExpr{{.*}} 'unsigned int'240  // CHECK-NEXT: value: Int 2241  // CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}} 'unsigned int'242  // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} 'unsigned int' depth 0 index 1 Value243  // CHECK-NEXT: IntegerLiteral{{.*}} 'unsigned int' 2244  //245  // CHECK-NEXT: ConstantExpr{{.*}} 'unsigned int'246  // CHECK-NEXT: value: Int 5247  // CHECK-NEXT: BinaryOperator{{.*}}'unsigned int' '+'248  // CHECK-NEXT: SubstNonTypeTemplateParmExpr{{.*}} 'unsigned int'249  // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} 'unsigned int' depth 0 index 1 Value250  // CHECK-NEXT: IntegerLiteral{{.*}} 'unsigned int' 2251  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'unsigned int' <IntegralCast>252  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 3253 254  // CHECK-NEXT: ForStmt255  // CHECK-NEXT: DeclStmt256  // CHECK-NEXT: VarDecl{{.*}} i 'int'257  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0258  // CHECK-NEXT: <<<NULL>>>259  // CHECK-NEXT: BinaryOperator{{.*}}'<'260  // CHECK-NEXT: ImplicitCastExpr261  // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'262  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5263  // CHECK-NEXT: UnaryOperator{{.*}}++264  // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'265  // CHECK-NEXT: ForStmt266  // CHECK-NEXT: DeclStmt267  // CHECK-NEXT: VarDecl{{.*}} j 'int'268  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0269  // CHECK-NEXT: <<<NULL>>>270  // CHECK-NEXT: BinaryOperator{{.*}}'<'271  // CHECK-NEXT: ImplicitCastExpr272  // CHECK-NEXT: DeclRefExpr{{.*}}'j' 'int'273  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5274  // CHECK-NEXT: UnaryOperator{{.*}}++275  // CHECK-NEXT: DeclRefExpr{{.*}}'j' 'int'276  // CHECK-NEXT: ForStmt277  // CHECK-NEXT: DeclStmt278  // CHECK-NEXT: VarDecl{{.*}} k 'int'279  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0280  // CHECK-NEXT: <<<NULL>>>281  // CHECK-NEXT: BinaryOperator{{.*}}'<'282  // CHECK-NEXT: ImplicitCastExpr283  // CHECK-NEXT: DeclRefExpr{{.*}}'k' 'int'284  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5285  // CHECK-NEXT: UnaryOperator{{.*}}++286  // CHECK-NEXT: DeclRefExpr{{.*}}'k' 'int'287  // CHECK-NEXT: ForStmt288  // CHECK-NEXT: DeclStmt289  // CHECK-NEXT: VarDecl{{.*}} l 'int'290  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0291  // CHECK-NEXT: <<<NULL>>>292  // CHECK-NEXT: BinaryOperator{{.*}}'<'293  // CHECK-NEXT: ImplicitCastExpr294  // CHECK-NEXT: DeclRefExpr{{.*}}'l' 'int'295  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5296  // CHECK-NEXT: UnaryOperator{{.*}}++297  // CHECK-NEXT: DeclRefExpr{{.*}}'l' 'int'298  // CHECK-NEXT: ForStmt299  // CHECK-NEXT: DeclStmt300  // CHECK-NEXT: VarDecl{{.*}} m 'int'301  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0302  // CHECK-NEXT: <<<NULL>>>303  // CHECK-NEXT: BinaryOperator{{.*}}'<'304  // CHECK-NEXT: ImplicitCastExpr305  // CHECK-NEXT: DeclRefExpr{{.*}}'m' 'int'306  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5307  // CHECK-NEXT: UnaryOperator{{.*}}++308  // CHECK-NEXT: DeclRefExpr{{.*}}'m' 'int'309  // CHECK-NEXT: ForStmt310  // CHECK-NEXT: DeclStmt311  // CHECK-NEXT: VarDecl{{.*}} n 'int'312  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0313  // CHECK-NEXT: <<<NULL>>>314  // CHECK-NEXT: BinaryOperator{{.*}}'<'315  // CHECK-NEXT: ImplicitCastExpr316  // CHECK-NEXT: DeclRefExpr{{.*}}'n' 'int'317  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5318  // CHECK-NEXT: UnaryOperator{{.*}}++319  // CHECK-NEXT: DeclRefExpr{{.*}}'n' 'int'320  // CHECK-NEXT: NullStmt321 322}323 324void Inst() {325  TemplUses<S, 2>();326}327#endif // PCH_HELPER328