brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.9 KiB · eb59dc9 Raw
245 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 7#ifndef PCH_HELPER8#define PCH_HELPER9 10void NormalFunc() {11  // CHECK-LABEL: NormalFunc12  // CHECK-NEXT: CompoundStmt13 14#pragma acc parallel loop15  for(int i = 0; i < 5;++i);16  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} parallel loop17  // CHECK-NEXT: ForStmt18  // CHECK-NEXT: DeclStmt19  // CHECK-NEXT: VarDecl{{.*}}i20  // CHECK-NEXT: IntegerLiteral {{.*}}'int' 021  // CHECK-NEXT: <<<NULL>>>22  // CHECK-NEXT: BinaryOperator {{.*}} 'bool' '<'23  // CHECK-NEXT: ImplicitCastExpr24  // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'25  // CHECK-NEXT: IntegerLiteral {{.*}}'int' 526  // CHECK-NEXT: UnaryOperator{{.*}} '++'27  // CHECK-NEXT: DeclRefExpr{{.*}}'i'28  // CHECK-NEXT: NullStmt29 30_Pragma("acc parallel loop")31  for(int i = 0; i < 5;++i);32  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} parallel loop33  // CHECK-NEXT: ForStmt34  // CHECK-NEXT: DeclStmt35  // CHECK-NEXT: VarDecl{{.*}}i36  // CHECK-NEXT: IntegerLiteral {{.*}}'int' 037  // CHECK-NEXT: <<<NULL>>>38  // CHECK-NEXT: BinaryOperator {{.*}} 'bool' '<'39  // CHECK-NEXT: ImplicitCastExpr40  // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'41  // CHECK-NEXT: IntegerLiteral {{.*}}'int' 542  // CHECK-NEXT: UnaryOperator{{.*}} '++'43  // CHECK-NEXT: DeclRefExpr{{.*}}'i'44  // CHECK-NEXT: NullStmt45 46#pragma acc serial loop47  for(int i = 0; i < 5;++i);48  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} serial loop49  // CHECK-NEXT: ForStmt50  // CHECK-NEXT: DeclStmt51  // CHECK-NEXT: VarDecl{{.*}}i52  // CHECK-NEXT: IntegerLiteral {{.*}}'int' 053  // CHECK-NEXT: <<<NULL>>>54  // CHECK-NEXT: BinaryOperator {{.*}} 'bool' '<'55  // CHECK-NEXT: ImplicitCastExpr56  // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'57  // CHECK-NEXT: IntegerLiteral {{.*}}'int' 558  // CHECK-NEXT: UnaryOperator{{.*}} '++'59  // CHECK-NEXT: DeclRefExpr{{.*}}'i'60  // CHECK-NEXT: NullStmt61 62#pragma acc kernels loop63  for(int i = 0; i < 5;++i);64  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} kernels loop65  // CHECK-NEXT: ForStmt66  // CHECK-NEXT: DeclStmt67  // CHECK-NEXT: VarDecl{{.*}}i68  // CHECK-NEXT: IntegerLiteral {{.*}}'int' 069  // CHECK-NEXT: <<<NULL>>>70  // CHECK-NEXT: BinaryOperator {{.*}} 'bool' '<'71  // CHECK-NEXT: ImplicitCastExpr72  // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'73  // CHECK-NEXT: IntegerLiteral {{.*}}'int' 574  // CHECK-NEXT: UnaryOperator{{.*}} '++'75  // CHECK-NEXT: DeclRefExpr{{.*}}'i'76  // CHECK-NEXT: NullStmt77 78 79  int array[5];80  // CHECK-NEXT: DeclStmt81  // CHECK-NEXT: VarDecl82#pragma acc parallel loop83  for(auto x : array){}84  // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} parallel loop85  // CHECK-NEXT: CXXForRangeStmt86  // CHECK: CompoundStmt87 88#pragma acc parallel89  // CHECK-NEXT: OpenACCComputeConstruct {{.*}}parallel90  // CHECK-NEXT: CompoundStmt91  {92#pragma acc serial loop93    // CHECK-NEXT: OpenACCCombinedConstruct {{.*}}serial loop94    // CHECK-NEXT: CXXForRangeStmt95    // CHECK: CompoundStmt96    for(auto x: array) {97#pragma acc loop98  // CHECK-NEXT: OpenACCLoopConstruct{{.*}} parent: serial loop99  // CHECK-NEXT: CXXForRangeStmt100  // CHECK: CompoundStmt101    for(auto y: array) { }102  }103  }104}105template<typename T>106void TemplFunc() {107  // CHECK-LABEL: FunctionTemplateDecl {{.*}}TemplFunc108  // CHECK-NEXT: TemplateTypeParmDecl109  // CHECK-NEXT: FunctionDecl{{.*}}TemplFunc110  // CHECK-NEXT: CompoundStmt111 112#pragma acc serial loop113  // CHECK-NEXT: OpenACCCombinedConstruct {{.*}} serial loop114  for(typename T::type t = 0; t < 5;++t) {115  // CHECK-NEXT: ForStmt116  // CHECK-NEXT: DeclStmt117  // CHECK-NEXT: VarDecl{{.*}} referenced t 'typename T::type'118  // CHECK-NEXT: IntegerLiteral {{.*}} 'int' 0119  // CHECK-NEXT: <<<NULL>>120  // CHECK-NEXT: BinaryOperator{{.*}} '<dependent type>' '<'121  // CHECK-NEXT: DeclRefExpr {{.*}} 'typename T::type' lvalue Var122  // CHECK-NEXT: IntegerLiteral {{.*}} 'int' 5123  // CHECK-NEXT: UnaryOperator{{.*}} '<dependent type>' lvalue prefix '++'124  // CHECK-NEXT: DeclRefExpr {{.*}} 'typename T::type' lvalue Var125  // CHECK-NEXT: CompoundStmt126    typename T::type I;127  // CHECK-NEXT: DeclStmt128  // CHECK-NEXT: VarDecl{{.*}} I 'typename T::type'129 130  }131 132#pragma acc parallel loop133  for(int a = 0; a < 5; ++a) {134    // CHECK-NEXT: OpenACCCombinedConstruct {{.*}} parallel loop135    // CHECK-NEXT: ForStmt136    // CHECK: CompoundStmt137#pragma acc kernels loop138    for(int b = 0; b < 5; ++b) {139    // CHECK-NEXT: OpenACCCombinedConstruct {{.*}} kernels loop140    // CHECK-NEXT: ForStmt141    // CHECK: CompoundStmt142#pragma acc loop143    // CHECK-NEXT: OpenACCLoopConstruct{{.*}} parent: kernels loop144    // CHECK-NEXT: ForStmt145    // CHECK-NEXT: DeclStmt146    // CHECK-NEXT: VarDecl {{.*}} i 'int'147    // CHECK-NEXT: IntegerLiteral {{.*}} 'int' 0148    // CHECK-NEXT: <<<NULL>>>149    // CHECK-NEXT: BinaryOperator{{.*}}'bool' '<'150    // CHECK-NEXT: ImplicitCastExpr151    // CHECK-NEXT: DeclRefExpr152    // CHECK-NEXT: IntegerLiteral {{.*}} 'int' 5153    // CHECK-NEXT: UnaryOperator{{.*}} prefix '++'154    // CHECK-NEXT: DeclRefExpr{{.*}} 'i' 'int'155    // CHECK-NEXT: NullStmt156      for(int i = 0; i < 5;++i);157 158#pragma acc loop159    // CHECK-NEXT: OpenACCLoopConstruct{{.*}} parent: kernels loop160    // CHECK-NEXT: ForStmt161    // CHECK-NEXT: DeclStmt162    // CHECK-NEXT: VarDecl {{.*}} i 'int'163    // CHECK-NEXT: IntegerLiteral {{.*}} 'int' 0164    // CHECK-NEXT: <<<NULL>>>165    // CHECK-NEXT: BinaryOperator{{.*}}'bool' '<'166    // CHECK-NEXT: ImplicitCastExpr167    // CHECK-NEXT: DeclRefExpr168    // CHECK-NEXT: IntegerLiteral {{.*}} 'int' 5169    // CHECK-NEXT: UnaryOperator{{.*}} prefix '++'170    // CHECK-NEXT: DeclRefExpr{{.*}} 'i' 'int'171    // CHECK-NEXT: NullStmt172      for(int i = 0; i < 5;++i);173    }174  }175 176  // Instantiation:177  // CHECK-NEXT: FunctionDecl{{.*}} TemplFunc 'void ()' implicit_instantiation178  // CHECK-NEXT: TemplateArgument type 'S'179  // CHECK-NEXT: RecordType{{.*}} 'S'180  // CHECK-NEXT: CXXRecord{{.*}} 'S'181  // CHECK-NEXT: CompoundStmt182 183  // CHECK-NEXT: OpenACCCombinedConstruct {{.*}} serial loop184  // CHECK-NEXT: ForStmt185  // CHECK-NEXT: DeclStmt186  // CHECK-NEXT: VarDecl{{.*}} t 'typename S::type':'int'187  // CHECK-NEXT: IntegerLiteral {{.*}} 'int' 0188  // CHECK-NEXT: <<<NULL>>189  // CHECK-NEXT: BinaryOperator{{.*}} 'bool' '<'190  // CHECK-NEXT: ImplicitCastExpr191  // CHECK-NEXT: DeclRefExpr {{.*}} 'typename S::type':'int' lvalue Var192  // CHECK-NEXT: IntegerLiteral {{.*}} 'int' 5193  // CHECK-NEXT: UnaryOperator{{.*}} 'typename S::type':'int' lvalue prefix '++'194  // CHECK-NEXT: DeclRefExpr {{.*}} 'typename S::type':'int' lvalue Var195  // CHECK-NEXT: CompoundStmt196  // CHECK-NEXT: DeclStmt197  // CHECK-NEXT: VarDecl{{.*}} I 'typename S::type':'int'198 199  // CHECK-NEXT: OpenACCCombinedConstruct {{.*}} parallel loop200  // CHECK-NEXT: ForStmt201  // CHECK: CompoundStmt202 203  // CHECK-NEXT: OpenACCCombinedConstruct {{.*}} kernels loop204  // CHECK-NEXT: ForStmt205  // CHECK: CompoundStmt206 207  // CHECK-NEXT: OpenACCLoopConstruct{{.*}} parent: kernels loop208  // CHECK-NEXT: ForStmt209  // CHECK-NEXT: DeclStmt210  // CHECK-NEXT: VarDecl {{.*}} i 'int'211  // CHECK-NEXT: IntegerLiteral {{.*}} 'int' 0212  // CHECK-NEXT: <<<NULL>>>213  // CHECK-NEXT: BinaryOperator{{.*}}'bool' '<'214  // CHECK-NEXT: ImplicitCastExpr215  // CHECK-NEXT: DeclRefExpr216  // CHECK-NEXT: IntegerLiteral {{.*}} 'int' 5217  // CHECK-NEXT: UnaryOperator{{.*}} prefix '++'218  // CHECK-NEXT: DeclRefExpr{{.*}} 'i' 'int'219  // CHECK-NEXT: NullStmt220 221  // CHECK-NEXT: OpenACCLoopConstruct{{.*}} parent: kernels loop222  // CHECK-NEXT: ForStmt223  // CHECK-NEXT: DeclStmt224  // CHECK-NEXT: VarDecl {{.*}} i 'int'225  // CHECK-NEXT: IntegerLiteral {{.*}} 'int' 0226  // CHECK-NEXT: <<<NULL>>>227  // CHECK-NEXT: BinaryOperator{{.*}}'bool' '<'228  // CHECK-NEXT: ImplicitCastExpr229  // CHECK-NEXT: DeclRefExpr230  // CHECK-NEXT: IntegerLiteral {{.*}} 'int' 5231  // CHECK-NEXT: UnaryOperator{{.*}} prefix '++'232  // CHECK-NEXT: DeclRefExpr{{.*}} 'i' 'int'233  // CHECK-NEXT: NullStmt234 235}236 237struct S {238  using type = int;239};240 241void use() {242  TemplFunc<S>();243}244#endif245