brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.6 KiB · fd8cd04 Raw
217 lines · cpp
1// RUN: %clang_cc1 %s -fopenacc -Wno-openacc-cache-var-inside-loop -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 use() {11  // CHECK: FunctionDecl{{.*}} use 'void ()'12  // CHECK-NEXT: CompoundStmt13  int Array[5];14  // CHECK-NEXT: DeclStmt15  // CHECK-NEXT: VarDecl{{.*}}Array 'int[5]'16 17#pragma acc loop18  // CHECK-NEXT: OpenACCLoopConstruct19  for (int i = 0; i < 5; ++i) {20  // CHECK-NEXT: ForStmt21  // CHECK-NEXT: DeclStmt22  // CHECK-NEXT: VarDecl{{.*}}i 'int'23  // CHECK-NEXT: IntegerLiteral24  // CHECK-NEXT: <<<NULL>>>25  // CHECK-NEXT: BinaryOperator26  // CHECK-NEXT: ImplicitCastExpr27  // CHECK-NEXT: DeclRefExpr28  // CHECK-NEXT: IntegerLiteral29  // CHECK-NEXT: UnaryOperator30  // CHECK-NEXT: DeclRefExpr31  // CHECK-NEXT: CompoundStmt32#pragma acc cache(Array[1])33  // CHECK-NEXT: OpenACCCacheConstruct{{.*}} cache34  // CHECK-NEXT: ArraySubscriptExpr{{.*}}'int' lvalue35  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int *' <ArrayToPointerDecay>36  // CHECK-NEXT: DeclRefExpr{{.*}}'Array' 'int[5]'37  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 138_Pragma("acc cache(Array[1])")39  // CHECK-NEXT: OpenACCCacheConstruct{{.*}} cache40  // CHECK-NEXT: ArraySubscriptExpr{{.*}}'int' lvalue41  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int *' <ArrayToPointerDecay>42  // CHECK-NEXT: DeclRefExpr{{.*}}'Array' 'int[5]'43  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 144#pragma acc cache(Array[1:2])45  // CHECK-NEXT: OpenACCCacheConstruct{{.*}} cache46  // CHECK-NEXT: ArraySectionExpr{{.*}}'<array section type>' lvalue47  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int *' <ArrayToPointerDecay>48  // CHECK-NEXT: DeclRefExpr{{.*}}'Array' 'int[5]'49  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 150  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 251 52  // No vars here, since they are bad references.53#pragma acc cache (Array[i])54  // CHECK-NEXT: OpenACCCacheConstruct{{.*}} cache55  }56 57  // No vars here, since they are bad references.58#pragma acc cache(Array[1:2])59  // CHECK-NEXT: OpenACCCacheConstruct{{.*}} cache60 61  return;62  // CHECK-NEXT: ReturnStmt63}64 65struct S {66  int Array[5];67  int Array2D[5][5];68 69  void StructUse() {70    // CHECK: CXXMethodDecl{{.*}}StructUse 'void ()'71    // CHECK-NEXT: CompoundStmt72#pragma acc loop73  // CHECK-NEXT: OpenACCLoopConstruct74  for (int i = 0; i < 5; ++i) {75  // CHECK-NEXT: ForStmt76  // CHECK-NEXT: DeclStmt77  // CHECK-NEXT: VarDecl{{.*}}i 'int'78  // CHECK-NEXT: IntegerLiteral79  // CHECK-NEXT: <<<NULL>>>80  // CHECK-NEXT: BinaryOperator81  // CHECK-NEXT: ImplicitCastExpr82  // CHECK-NEXT: DeclRefExpr83  // CHECK-NEXT: IntegerLiteral84  // CHECK-NEXT: UnaryOperator85  // CHECK-NEXT: DeclRefExpr86  // CHECK-NEXT: CompoundStmt87#pragma acc cache(Array[1])88    // CHECK-NEXT: OpenACCCacheConstruct{{.*}} cache89    // CHECK-NEXT: ArraySubscriptExpr{{.*}}'int' lvalue90    // CHECK-NEXT: ImplicitCastExpr{{.*}}'int *' <ArrayToPointerDecay>91    // CHECK-NEXT: MemberExpr{{.*}} 'int[5]' lvalue ->Array92    // CHECK-NEXT: CXXThisExpr{{.*}} 'S *'93    // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 194#pragma acc cache(Array[1:2])95    // CHECK-NEXT: OpenACCCacheConstruct{{.*}} cache96    // CHECK-NEXT: ArraySectionExpr{{.*}}'<array section type>' lvalue97    // CHECK-NEXT: ImplicitCastExpr{{.*}}'int *' <ArrayToPointerDecay>98    // CHECK-NEXT: MemberExpr{{.*}} 'int[5]' lvalue ->Array99    // CHECK-NEXT: CXXThisExpr{{.*}} 'S *'100    // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 1101    // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 2102#pragma acc cache(Array2D[1][1])103    // CHECK-NEXT: OpenACCCacheConstruct{{.*}} cache104    // CHECK-NEXT: ArraySubscriptExpr{{.*}}'int' lvalue105    // CHECK-NEXT: ImplicitCastExpr{{.*}}'int *' <ArrayToPointerDecay>106    // CHECK-NEXT: ArraySubscriptExpr{{.*}}'int[5]' lvalue107    // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)[5]' <ArrayToPointerDecay>108    // CHECK-NEXT: MemberExpr{{.*}} 'int[5][5]' lvalue ->Array2D109    // CHECK-NEXT: CXXThisExpr{{.*}} 'S *'110    // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 1111    // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 1112#pragma acc cache(Array2D[1][1:2])113    // CHECK-NEXT: OpenACCCacheConstruct{{.*}} cache114    // CHECK-NEXT: ArraySectionExpr{{.*}}'<array section type>' lvalue115    // CHECK-NEXT: ImplicitCastExpr{{.*}}'int *' <ArrayToPointerDecay>116    // CHECK-NEXT: ArraySubscriptExpr{{.*}}'int[5]' lvalue117    // CHECK-NEXT: ImplicitCastExpr{{.*}}'int (*)[5]' <ArrayToPointerDecay>118    // CHECK-NEXT: MemberExpr{{.*}} 'int[5][5]' lvalue ->Array2D119    // CHECK-NEXT: CXXThisExpr{{.*}} 'S *'120    // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 1121    // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 1122    // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 2123  }124  }125};126 127template<typename T>128void templ_use() {129  // CHECK: FunctionDecl{{.*}} templ_use 'void ()'130  // CHECK-NEXT: CompoundStmt131  T Array[5];132  // CHECK-NEXT: DeclStmt133  // CHECK-NEXT: VarDecl{{.*}}Array 'T[5]'134 135#pragma acc loop136  // CHECK-NEXT: OpenACCLoopConstruct137  for (int i = 0; i < 5; ++i) {138  // CHECK-NEXT: ForStmt139  // CHECK-NEXT: DeclStmt140  // CHECK-NEXT: VarDecl{{.*}}i 'int'141  // CHECK-NEXT: IntegerLiteral142  // CHECK-NEXT: <<<NULL>>>143  // CHECK-NEXT: BinaryOperator144  // CHECK-NEXT: ImplicitCastExpr145  // CHECK-NEXT: DeclRefExpr146  // CHECK-NEXT: IntegerLiteral147  // CHECK-NEXT: UnaryOperator148  // CHECK-NEXT: DeclRefExpr149  // CHECK-NEXT: CompoundStmt150#pragma acc cache(Array[1])151  // CHECK-NEXT: OpenACCCacheConstruct{{.*}} cache152  // CHECK-NEXT: ArraySubscriptExpr{{.*}}'T' lvalue153  // CHECK-NEXT: DeclRefExpr{{.*}}'Array' 'T[5]'154  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 1155#pragma acc cache(Array[1:2])156  // CHECK-NEXT: OpenACCCacheConstruct{{.*}} cache157  // CHECK-NEXT: ArraySectionExpr{{.*}}'<dependent type>' lvalue158  // CHECK-NEXT: DeclRefExpr{{.*}}'Array' 'T[5]'159  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 1160  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 2161 162    // No vars here, since they are bad references.163#pragma acc cache(Array[i])164  // CHECK-NEXT: OpenACCCacheConstruct{{.*}} cache165  }166  // No vars here, since they are bad references.167#pragma acc cache(Array[1])168  // CHECK-NEXT: OpenACCCacheConstruct{{.*}} cache169 170  return;171  // CHECK-NEXT: ReturnStmt172 173  // Instantiation:174  // CHECK: FunctionDecl{{.*}} templ_use 'void ()' implicit_instantiation175  // CHECK-NEXT: TemplateArgument type 'int'176  // CHECK-NEXT: BuiltinType{{.*}} 'int'177  // CHECK-NEXT: CompoundStmt178  // CHECK-NEXT: DeclStmt179  // CHECK-NEXT: VarDecl{{.*}}Array 'int[5]'180 181  // CHECK-NEXT: OpenACCLoopConstruct182  // CHECK-NEXT: ForStmt183  // CHECK-NEXT: DeclStmt184  // CHECK-NEXT: VarDecl{{.*}}i 'int'185  // CHECK-NEXT: IntegerLiteral186  // CHECK-NEXT: <<<NULL>>>187  // CHECK-NEXT: BinaryOperator188  // CHECK-NEXT: ImplicitCastExpr189  // CHECK-NEXT: DeclRefExpr190  // CHECK-NEXT: IntegerLiteral191  // CHECK-NEXT: UnaryOperator192  // CHECK-NEXT: DeclRefExpr193  // CHECK-NEXT: CompoundStmt194  //195  // CHECK-NEXT: OpenACCCacheConstruct{{.*}} cache196  // CHECK-NEXT: ArraySubscriptExpr{{.*}}'int' lvalue197  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int *' <ArrayToPointerDecay>198  // CHECK-NEXT: DeclRefExpr{{.*}}'Array' 'int[5]'199  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 1200  // CHECK-NEXT: OpenACCCacheConstruct{{.*}} cache201  // CHECK-NEXT: ArraySectionExpr{{.*}}'<array section type>' lvalue202  // CHECK-NEXT: ImplicitCastExpr{{.*}}'int *' <ArrayToPointerDecay>203  // CHECK-NEXT: DeclRefExpr{{.*}}'Array' 'int[5]'204  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 1205  // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 2206 207  // No vars here, since they are bad references.208  // CHECK-NEXT: OpenACCCacheConstruct{{.*}} cache209  // CHECK-NEXT: OpenACCCacheConstruct{{.*}} cache210  // CHECK-NEXT: ReturnStmt211}212 213void foo() {214  templ_use<int>();215}216#endif217