1 // RUN: %clang_cc1 %s -fopenacc -ast-dump | FileCheck %s 2 3 // Test this with PCH. 4 // RUN: %clang_cc1 %s -fopenacc -emit-pch -o %t %s 5 // RUN: %clang_cc1 %s -fopenacc -include-pch %t -ast-dump-all | FileCheck %s 6 #ifndef PCH_HELPER 7 #define PCH_HELPER 8 9 void NormalUses() { 10 // CHECK: FunctionDecl{{.*}}NormalUses 11 // CHECK-NEXT: CompoundStmt 12 13 #pragma acc loop auto 14 for(int i = 0; i < 5; ++i){} 15 // CHECK-NEXT: OpenACCLoopConstruct{{.*}} 16 // CHECK-NEXT: auto clause 17 // CHECK-NEXT: ForStmt 18 // CHECK-NEXT: DeclStmt 19 // CHECK-NEXT: VarDecl{{.*}} i 'int' 20 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0 21 // CHECK-NEXT: <<<NULL>>> 22 // CHECK-NEXT: BinaryOperator{{.*}}'<' 23 // CHECK-NEXT: ImplicitCastExpr 24 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int' 25 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5 26 // CHECK-NEXT: UnaryOperator{{.*}}++ 27 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int' 28 // CHECK-NEXT: CompoundStmt 29 30 #pragma acc loop seq 31 for(;;){} 32 // CHECK-NEXT: OpenACCLoopConstruct{{.*}} 33 // CHECK-NEXT: seq clause 34 // CHECK-NEXT: ForStmt 35 // CHECK-NEXT: <<<NULL>>> 36 // CHECK-NEXT: <<<NULL>>> 37 // CHECK-NEXT: <<<NULL>>> 38 // CHECK-NEXT: <<<NULL>>> 39 // CHECK-NEXT: CompoundStmt 40 41 #pragma acc loop independent 42 for(int i = 0; i < 5; ++i){} 43 // CHECK-NEXT: OpenACCLoopConstruct{{.*}} 44 // CHECK-NEXT: independent clause 45 // CHECK-NEXT: ForStmt 46 // CHECK-NEXT: DeclStmt 47 // CHECK-NEXT: VarDecl{{.*}} i 'int' 48 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0 49 // CHECK-NEXT: <<<NULL>>> 50 // CHECK-NEXT: BinaryOperator{{.*}}'<' 51 // CHECK-NEXT: ImplicitCastExpr 52 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int' 53 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5 54 // CHECK-NEXT: UnaryOperator{{.*}}++ 55 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int' 56 // CHECK-NEXT: CompoundStmt 57 } 58 59 template<typename T> 60 void TemplUses() { 61 // CHECK: FunctionTemplateDecl{{.*}}TemplUses 62 // CHECK-NEXT: TemplateTypeParmDecl 63 // CHECK-NEXT: FunctionDecl{{.*}} TemplUses 64 // CHECK-NEXT: CompoundStmt 65 66 #pragma acc loop auto 67 for(int i = 0; i < 5; ++i){} 68 // CHECK-NEXT: OpenACCLoopConstruct{{.*}} 69 // CHECK-NEXT: auto clause 70 // CHECK-NEXT: ForStmt 71 // CHECK-NEXT: DeclStmt 72 // CHECK-NEXT: VarDecl{{.*}} i 'int' 73 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0 74 // CHECK-NEXT: <<<NULL>>> 75 // CHECK-NEXT: BinaryOperator{{.*}}'<' 76 // CHECK-NEXT: ImplicitCastExpr 77 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int' 78 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5 79 // CHECK-NEXT: UnaryOperator{{.*}}++ 80 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int' 81 // CHECK-NEXT: CompoundStmt 82 83 #pragma acc loop seq 84 for(;;){} 85 // CHECK-NEXT: OpenACCLoopConstruct{{.*}} 86 // CHECK-NEXT: seq clause 87 // CHECK-NEXT: ForStmt 88 // CHECK-NEXT: <<<NULL>>> 89 // CHECK-NEXT: <<<NULL>>> 90 // CHECK-NEXT: <<<NULL>>> 91 // CHECK-NEXT: <<<NULL>>> 92 // CHECK-NEXT: CompoundStmt 93 94 #pragma acc loop independent 95 for(int i = 0; i < 5; ++i){} 96 // CHECK-NEXT: OpenACCLoopConstruct{{.*}} 97 // CHECK-NEXT: independent clause 98 // CHECK-NEXT: ForStmt 99 // CHECK-NEXT: DeclStmt 100 // CHECK-NEXT: VarDecl{{.*}} i 'int' 101 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0 102 // CHECK-NEXT: <<<NULL>>> 103 // CHECK-NEXT: BinaryOperator{{.*}}'<' 104 // CHECK-NEXT: ImplicitCastExpr 105 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int' 106 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5 107 // CHECK-NEXT: UnaryOperator{{.*}}++ 108 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int' 109 // CHECK-NEXT: CompoundStmt 110 111 // Instantiations. 112 // CHECK-NEXT: FunctionDecl{{.*}}TemplUses 'void ()' implicit_instantiation 113 // CHECK-NEXT: TemplateArgument 114 // CHECK-NEXT: BuiltinType 115 // CHECK-NEXT: CompoundStmt 116 117 // CHECK-NEXT: OpenACCLoopConstruct{{.*}} 118 // CHECK-NEXT: auto clause 119 // CHECK-NEXT: ForStmt 120 // CHECK-NEXT: DeclStmt 121 // CHECK-NEXT: VarDecl{{.*}} i 'int' 122 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0 123 // CHECK-NEXT: <<<NULL>>> 124 // CHECK-NEXT: BinaryOperator{{.*}}'<' 125 // CHECK-NEXT: ImplicitCastExpr 126 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int' 127 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5 128 // CHECK-NEXT: UnaryOperator{{.*}}++ 129 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int' 130 // CHECK-NEXT: CompoundStmt 131 132 // CHECK-NEXT: OpenACCLoopConstruct{{.*}} 133 // CHECK-NEXT: seq clause 134 // CHECK-NEXT: ForStmt 135 // CHECK-NEXT: <<<NULL>>> 136 // CHECK-NEXT: <<<NULL>>> 137 // CHECK-NEXT: <<<NULL>>> 138 // CHECK-NEXT: <<<NULL>>> 139 // CHECK-NEXT: CompoundStmt 140 141 // CHECK-NEXT: OpenACCLoopConstruct{{.*}} 142 // CHECK-NEXT: independent clause 143 // CHECK-NEXT: ForStmt 144 // CHECK-NEXT: DeclStmt 145 // CHECK-NEXT: VarDecl{{.*}} i 'int' 146 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0 147 // CHECK-NEXT: <<<NULL>>> 148 // CHECK-NEXT: BinaryOperator{{.*}}'<' 149 // CHECK-NEXT: ImplicitCastExpr 150 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int' 151 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5 152 // CHECK-NEXT: UnaryOperator{{.*}}++ 153 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int' 154 // CHECK-NEXT: CompoundStmt 155 } 156 157 void Inst() { 158 TemplUses<int>(); 159 } 160 #endif // PCH_HELPER 161