brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.3 KiB · c926c22 Raw
235 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 8#ifndef PCH_HELPER9#define PCH_HELPER10 11void NormalFunc() {12  // CHECK-LABEL: NormalFunc13  // CHECK-NEXT: CompoundStmt14 15#pragma acc loop16  for(int i = 0; i < 5;++i);17  // CHECK-NEXT: OpenACCLoopConstruct{{.*}} <orphan>18  // CHECK-NEXT: ForStmt19  // CHECK-NEXT: DeclStmt20  // CHECK-NEXT: VarDecl {{.*}} used i 'int'21  // CHECK-NEXT: IntegerLiteral {{.*}} 'int' 022  // CHECK-NEXT: <<<NULL>>23  // CHECK-NEXT: BinaryOperator{{.*}}'bool' '<'24  // CHECK-NEXT: ImplicitCastExpr25  // CHECK-NEXT: DeclRefExpr26  // CHECK-NEXT: IntegerLiteral {{.*}} 'int' 527  // CHECK-NEXT: UnaryOperator{{.*}} prefix '++'28  // CHECK-NEXT: DeclRefExpr{{.*}} 'i' 'int'29  // CHECK-NEXT: NullStmt30 31_Pragma("acc loop")32  for(int i = 0; i < 5;++i);33  // CHECK-NEXT: OpenACCLoopConstruct{{.*}} <orphan>34  // CHECK-NEXT: ForStmt35  // CHECK-NEXT: DeclStmt36  // CHECK-NEXT: VarDecl {{.*}} used i 'int'37  // CHECK-NEXT: IntegerLiteral {{.*}} 'int' 038  // CHECK-NEXT: <<<NULL>>39  // CHECK-NEXT: BinaryOperator{{.*}}'bool' '<'40  // CHECK-NEXT: ImplicitCastExpr41  // CHECK-NEXT: DeclRefExpr42  // CHECK-NEXT: IntegerLiteral {{.*}} 'int' 543  // CHECK-NEXT: UnaryOperator{{.*}} prefix '++'44  // CHECK-NEXT: DeclRefExpr{{.*}} 'i' 'int'45  // CHECK-NEXT: NullStmt46 47  int array[5];48  // CHECK-NEXT: DeclStmt49  // CHECK-NEXT: VarDecl50#pragma acc loop51  for(auto x : array){}52  // CHECK-NEXT: OpenACCLoopConstruct{{.*}} <orphan>53  // CHECK-NEXT: CXXForRangeStmt54  // CHECK: CompoundStmt55 56#pragma acc parallel57  // CHECK-NEXT: OpenACCComputeConstruct {{.*}}parallel58  // CHECK-NEXT: CompoundStmt59  {60#pragma acc parallel61    // CHECK-NEXT: OpenACCComputeConstruct {{.*}}parallel62    // CHECK-NEXT: CompoundStmt63    {64#pragma acc loop65      for(int i = 0; i < 5;++i);66    // CHECK-NEXT: OpenACCLoopConstruct{{.*}} parent: parallel67    // CHECK-NEXT: ForStmt68    // CHECK-NEXT: DeclStmt69    // CHECK-NEXT: VarDecl {{.*}} used i 'int'70    // CHECK-NEXT: IntegerLiteral {{.*}} 'int' 071    // CHECK-NEXT: <<<NULL>>>72    // CHECK-NEXT: BinaryOperator{{.*}}'bool' '<'73    // CHECK-NEXT: ImplicitCastExpr74    // CHECK-NEXT: DeclRefExpr75    // CHECK-NEXT: IntegerLiteral {{.*}} 'int' 576    // CHECK-NEXT: UnaryOperator{{.*}} prefix '++'77    // CHECK-NEXT: DeclRefExpr{{.*}} 'i' 'int'78    // CHECK-NEXT: NullStmt79    }80  }81}82 83template<typename T>84void TemplFunc() {85  // CHECK-LABEL: FunctionTemplateDecl {{.*}}TemplFunc86  // CHECK-NEXT: TemplateTypeParmDecl87  // CHECK-NEXT: FunctionDecl{{.*}}TemplFunc88  // CHECK-NEXT: CompoundStmt89 90#pragma acc loop91  // CHECK-NEXT: OpenACCLoopConstruct{{.*}} <orphan>92  for(typename T::type t = 0; t < 5;++t) {93  // CHECK-NEXT: ForStmt94  // CHECK-NEXT: DeclStmt95  // CHECK-NEXT: VarDecl{{.*}} referenced t 'typename T::type'96  // CHECK-NEXT: IntegerLiteral {{.*}} 'int' 097  // CHECK-NEXT: <<<NULL>>98  // CHECK-NEXT: BinaryOperator{{.*}} '<dependent type>' '<'99  // CHECK-NEXT: DeclRefExpr {{.*}} 'typename T::type' lvalue Var100  // CHECK-NEXT: IntegerLiteral {{.*}} 'int' 5101  // CHECK-NEXT: UnaryOperator{{.*}} '<dependent type>' lvalue prefix '++'102  // CHECK-NEXT: DeclRefExpr {{.*}} 'typename T::type' lvalue Var103  // CHECK-NEXT: CompoundStmt104    typename T::type I;105  // CHECK-NEXT: DeclStmt106  // CHECK-NEXT: VarDecl{{.*}} I 'typename T::type'107 108  }109 110#pragma acc serial111  {112    // CHECK-NEXT: OpenACCComputeConstruct {{.*}}serial113    // CHECK-NEXT: CompoundStmt114#pragma acc parallel115    {116    // CHECK-NEXT: OpenACCComputeConstruct {{.*}}parallel117    // CHECK-NEXT: CompoundStmt118#pragma acc loop119    // CHECK-NEXT: OpenACCLoopConstruct{{.*}} parent: parallel120    // CHECK-NEXT: ForStmt121    // CHECK-NEXT: DeclStmt122    // CHECK-NEXT: VarDecl {{.*}} i 'int'123    // CHECK-NEXT: IntegerLiteral {{.*}} 'int' 0124    // CHECK-NEXT: <<<NULL>>>125    // CHECK-NEXT: BinaryOperator{{.*}}'bool' '<'126    // CHECK-NEXT: ImplicitCastExpr127    // CHECK-NEXT: DeclRefExpr128    // CHECK-NEXT: IntegerLiteral {{.*}} 'int' 5129    // CHECK-NEXT: UnaryOperator{{.*}} prefix '++'130    // CHECK-NEXT: DeclRefExpr{{.*}} 'i' 'int'131    // CHECK-NEXT: NullStmt132      for(int i = 0; i < 5;++i);133 134#pragma acc loop135    // CHECK-NEXT: OpenACCLoopConstruct{{.*}} parent: parallel136    // CHECK-NEXT: ForStmt137    // CHECK-NEXT: DeclStmt138    // CHECK-NEXT: VarDecl {{.*}} i 'int'139    // CHECK-NEXT: IntegerLiteral {{.*}} 'int' 0140    // CHECK-NEXT: <<<NULL>>>141    // CHECK-NEXT: BinaryOperator{{.*}}'bool' '<'142    // CHECK-NEXT: ImplicitCastExpr143    // CHECK-NEXT: DeclRefExpr144    // CHECK-NEXT: IntegerLiteral {{.*}} 'int' 5145    // CHECK-NEXT: UnaryOperator{{.*}} prefix '++'146    // CHECK-NEXT: DeclRefExpr{{.*}} 'i' 'int'147    // CHECK-NEXT: NullStmt148      for(int i = 0; i < 5;++i);149    }150  }151 152  typename T::type array[5];153  // CHECK-NEXT: DeclStmt154  // CHECK-NEXT: VarDecl155 156#pragma acc loop157  for(auto x : array){}158  // CHECK-NEXT: OpenACCLoopConstruct{{.*}} <orphan>159  // CHECK-NEXT: CXXForRangeStmt160  // CHECK: CompoundStmt161 162  // Instantiation:163  // CHECK-NEXT: FunctionDecl{{.*}} TemplFunc 'void ()' implicit_instantiation164  // CHECK-NEXT: TemplateArgument type 'S'165  // CHECK-NEXT: RecordType{{.*}} 'S'166  // CHECK-NEXT: CXXRecord{{.*}} 'S'167  // CHECK-NEXT: CompoundStmt168 169  // CHECK-NEXT: OpenACCLoopConstruct{{.*}} <orphan>170  // CHECK-NEXT: ForStmt171  // CHECK-NEXT: DeclStmt172  // CHECK-NEXT: VarDecl{{.*}} used t 'typename S::type':'int'173  // CHECK-NEXT: IntegerLiteral {{.*}} 'int' 0174  // CHECK-NEXT: <<<NULL>>175  // CHECK-NEXT: BinaryOperator{{.*}} 'bool' '<'176  // CHECK-NEXT: ImplicitCastExpr{{.*}} 'typename S::type':'int' <LValueToRValue>177  // CHECK-NEXT: DeclRefExpr {{.*}} 'typename S::type':'int' lvalue Var178  // CHECK-NEXT: IntegerLiteral {{.*}} 'int' 5179  // CHECK-NEXT: UnaryOperator{{.*}} 'typename S::type':'int' lvalue prefix '++'180  // CHECK-NEXT: DeclRefExpr {{.*}} 'typename S::type':'int' lvalue Var181  // CHECK-NEXT: CompoundStmt182  // CHECK-NEXT: DeclStmt183  // CHECK-NEXT: VarDecl{{.*}} I 'typename S::type':'int'184 185  // CHECK-NEXT: OpenACCComputeConstruct {{.*}}serial186  // CHECK-NEXT: CompoundStmt187  //188  // CHECK-NEXT: OpenACCComputeConstruct {{.*}}parallel189  // CHECK-NEXT: CompoundStmt190 191  // CHECK-NEXT: OpenACCLoopConstruct{{.*}} parent: parallel192  // CHECK-NEXT: ForStmt193  // CHECK-NEXT: DeclStmt194  // CHECK-NEXT: VarDecl {{.*}} i 'int'195  // CHECK-NEXT: IntegerLiteral {{.*}} 'int' 0196  // CHECK-NEXT: <<<NULL>>>197  // CHECK-NEXT: BinaryOperator{{.*}}'bool' '<'198  // CHECK-NEXT: ImplicitCastExpr199  // CHECK-NEXT: DeclRefExpr200  // CHECK-NEXT: IntegerLiteral {{.*}} 'int' 5201  // CHECK-NEXT: UnaryOperator{{.*}} prefix '++'202  // CHECK-NEXT: DeclRefExpr{{.*}} 'i' 'int'203  // CHECK-NEXT: NullStmt204 205  // CHECK-NEXT: OpenACCLoopConstruct{{.*}} parent: parallel206  // CHECK-NEXT: ForStmt207  // CHECK-NEXT: DeclStmt208  // CHECK-NEXT: VarDecl {{.*}} i 'int'209  // CHECK-NEXT: IntegerLiteral {{.*}} 'int' 0210  // CHECK-NEXT: <<<NULL>>>211  // CHECK-NEXT: BinaryOperator{{.*}}'bool' '<'212  // CHECK-NEXT: ImplicitCastExpr213  // CHECK-NEXT: DeclRefExpr214  // CHECK-NEXT: IntegerLiteral {{.*}} 'int' 5215  // CHECK-NEXT: UnaryOperator{{.*}} prefix '++'216  // CHECK-NEXT: DeclRefExpr{{.*}} 'i' 'int'217  // CHECK-NEXT: NullStmt218 219  // CHECK-NEXT: DeclStmt220  // CHECK-NEXT: VarDecl221  // CHECK-NEXT: OpenACCLoopConstruct{{.*}} <orphan>222  // CHECK-NEXT: CXXForRangeStmt223  // CHECK: CompoundStmt224}225 226struct S {227  using type = int;228};229 230void use() {231  TemplFunc<S>();232}233#endif234 235