161 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 9void NormalUses() {10 // CHECK: FunctionDecl{{.*}}NormalUses11 // CHECK-NEXT: CompoundStmt12 13#pragma acc loop auto14 for(int i = 0; i < 5; ++i){}15 // CHECK-NEXT: OpenACCLoopConstruct{{.*}}16 // CHECK-NEXT: auto clause17 // CHECK-NEXT: ForStmt18 // CHECK-NEXT: DeclStmt19 // CHECK-NEXT: VarDecl{{.*}} i 'int'20 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 021 // CHECK-NEXT: <<<NULL>>>22 // CHECK-NEXT: BinaryOperator{{.*}}'<'23 // CHECK-NEXT: ImplicitCastExpr24 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'25 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 526 // CHECK-NEXT: UnaryOperator{{.*}}++27 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'28 // CHECK-NEXT: CompoundStmt29 30#pragma acc loop seq31 for(;;){}32 // CHECK-NEXT: OpenACCLoopConstruct{{.*}}33 // CHECK-NEXT: seq clause34 // CHECK-NEXT: ForStmt35 // CHECK-NEXT: <<<NULL>>>36 // CHECK-NEXT: <<<NULL>>>37 // CHECK-NEXT: <<<NULL>>>38 // CHECK-NEXT: <<<NULL>>>39 // CHECK-NEXT: CompoundStmt40 41#pragma acc loop independent42 for(int i = 0; i < 5; ++i){}43 // CHECK-NEXT: OpenACCLoopConstruct{{.*}}44 // CHECK-NEXT: independent clause45 // CHECK-NEXT: ForStmt46 // CHECK-NEXT: DeclStmt47 // CHECK-NEXT: VarDecl{{.*}} i 'int'48 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 049 // CHECK-NEXT: <<<NULL>>>50 // CHECK-NEXT: BinaryOperator{{.*}}'<'51 // CHECK-NEXT: ImplicitCastExpr52 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'53 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 554 // CHECK-NEXT: UnaryOperator{{.*}}++55 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'56 // CHECK-NEXT: CompoundStmt57}58 59template<typename T>60void TemplUses() {61 // CHECK: FunctionTemplateDecl{{.*}}TemplUses62 // CHECK-NEXT: TemplateTypeParmDecl63 // CHECK-NEXT: FunctionDecl{{.*}} TemplUses64 // CHECK-NEXT: CompoundStmt65 66#pragma acc loop auto67 for(int i = 0; i < 5; ++i){}68 // CHECK-NEXT: OpenACCLoopConstruct{{.*}}69 // CHECK-NEXT: auto clause70 // CHECK-NEXT: ForStmt71 // CHECK-NEXT: DeclStmt72 // CHECK-NEXT: VarDecl{{.*}} i 'int'73 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 074 // CHECK-NEXT: <<<NULL>>>75 // CHECK-NEXT: BinaryOperator{{.*}}'<'76 // CHECK-NEXT: ImplicitCastExpr77 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'78 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 579 // CHECK-NEXT: UnaryOperator{{.*}}++80 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'81 // CHECK-NEXT: CompoundStmt82 83#pragma acc loop seq84 for(;;){}85 // CHECK-NEXT: OpenACCLoopConstruct{{.*}}86 // CHECK-NEXT: seq clause87 // CHECK-NEXT: ForStmt88 // CHECK-NEXT: <<<NULL>>>89 // CHECK-NEXT: <<<NULL>>>90 // CHECK-NEXT: <<<NULL>>>91 // CHECK-NEXT: <<<NULL>>>92 // CHECK-NEXT: CompoundStmt93 94#pragma acc loop independent95 for(int i = 0; i < 5; ++i){}96 // CHECK-NEXT: OpenACCLoopConstruct{{.*}}97 // CHECK-NEXT: independent clause98 // CHECK-NEXT: ForStmt99 // CHECK-NEXT: DeclStmt100 // CHECK-NEXT: VarDecl{{.*}} i 'int'101 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0102 // CHECK-NEXT: <<<NULL>>>103 // CHECK-NEXT: BinaryOperator{{.*}}'<'104 // CHECK-NEXT: ImplicitCastExpr105 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'106 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5107 // CHECK-NEXT: UnaryOperator{{.*}}++108 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'109 // CHECK-NEXT: CompoundStmt110 111 // Instantiations.112 // CHECK-NEXT: FunctionDecl{{.*}}TemplUses 'void ()' implicit_instantiation113 // CHECK-NEXT: TemplateArgument114 // CHECK-NEXT: BuiltinType115 // CHECK-NEXT: CompoundStmt116 117 // CHECK-NEXT: OpenACCLoopConstruct{{.*}}118 // CHECK-NEXT: auto clause119 // 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: CompoundStmt131 132 // CHECK-NEXT: OpenACCLoopConstruct{{.*}}133 // CHECK-NEXT: seq clause134 // CHECK-NEXT: ForStmt135 // CHECK-NEXT: <<<NULL>>>136 // CHECK-NEXT: <<<NULL>>>137 // CHECK-NEXT: <<<NULL>>>138 // CHECK-NEXT: <<<NULL>>>139 // CHECK-NEXT: CompoundStmt140 141 // CHECK-NEXT: OpenACCLoopConstruct{{.*}}142 // CHECK-NEXT: independent clause143 // CHECK-NEXT: ForStmt144 // CHECK-NEXT: DeclStmt145 // CHECK-NEXT: VarDecl{{.*}} i 'int'146 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0147 // CHECK-NEXT: <<<NULL>>>148 // CHECK-NEXT: BinaryOperator{{.*}}'<'149 // CHECK-NEXT: ImplicitCastExpr150 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'151 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5152 // CHECK-NEXT: UnaryOperator{{.*}}++153 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'154 // CHECK-NEXT: CompoundStmt155}156 157void Inst() {158 TemplUses<int>();159}160#endif // PCH_HELPER161