12b939e18Serichkeane // RUN: %clang_cc1 %s -fopenacc -ast-dump | FileCheck %s 22b939e18Serichkeane 32b939e18Serichkeane // Test this with PCH. 42b939e18Serichkeane // RUN: %clang_cc1 %s -fopenacc -emit-pch -o %t %s 52b939e18Serichkeane // RUN: %clang_cc1 %s -fopenacc -include-pch %t -ast-dump-all | FileCheck %s 62b939e18Serichkeane #ifndef PCH_HELPER 72b939e18Serichkeane #define PCH_HELPER 82b939e18Serichkeane 92b939e18Serichkeane void NormalUses() { 102b939e18Serichkeane // CHECK: FunctionDecl{{.*}}NormalUses 112b939e18Serichkeane // CHECK-NEXT: CompoundStmt 122b939e18Serichkeane 132b939e18Serichkeane #pragma acc loop auto 14*b0cfbfd7SErich Keane for(int i = 0; i < 5; ++i){} 152b939e18Serichkeane // CHECK-NEXT: OpenACCLoopConstruct{{.*}} 162b939e18Serichkeane // CHECK-NEXT: auto clause 172b939e18Serichkeane // CHECK-NEXT: ForStmt 18*b0cfbfd7SErich Keane // CHECK-NEXT: DeclStmt 19*b0cfbfd7SErich Keane // CHECK-NEXT: VarDecl{{.*}} i 'int' 20*b0cfbfd7SErich Keane // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0 212b939e18Serichkeane // CHECK-NEXT: <<<NULL>>> 22*b0cfbfd7SErich Keane // CHECK-NEXT: BinaryOperator{{.*}}'<' 23*b0cfbfd7SErich Keane // CHECK-NEXT: ImplicitCastExpr 24*b0cfbfd7SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int' 25*b0cfbfd7SErich Keane // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5 26*b0cfbfd7SErich Keane // CHECK-NEXT: UnaryOperator{{.*}}++ 27*b0cfbfd7SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int' 282b939e18Serichkeane // CHECK-NEXT: CompoundStmt 292b939e18Serichkeane 302b939e18Serichkeane #pragma acc loop seq 312b939e18Serichkeane for(;;){} 322b939e18Serichkeane // CHECK-NEXT: OpenACCLoopConstruct{{.*}} 332b939e18Serichkeane // CHECK-NEXT: seq clause 342b939e18Serichkeane // CHECK-NEXT: ForStmt 352b939e18Serichkeane // CHECK-NEXT: <<<NULL>>> 362b939e18Serichkeane // CHECK-NEXT: <<<NULL>>> 372b939e18Serichkeane // CHECK-NEXT: <<<NULL>>> 382b939e18Serichkeane // CHECK-NEXT: <<<NULL>>> 392b939e18Serichkeane // CHECK-NEXT: CompoundStmt 402b939e18Serichkeane 412b939e18Serichkeane #pragma acc loop independent 42*b0cfbfd7SErich Keane for(int i = 0; i < 5; ++i){} 432b939e18Serichkeane // CHECK-NEXT: OpenACCLoopConstruct{{.*}} 442b939e18Serichkeane // CHECK-NEXT: independent clause 452b939e18Serichkeane // CHECK-NEXT: ForStmt 46*b0cfbfd7SErich Keane // CHECK-NEXT: DeclStmt 47*b0cfbfd7SErich Keane // CHECK-NEXT: VarDecl{{.*}} i 'int' 48*b0cfbfd7SErich Keane // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0 492b939e18Serichkeane // CHECK-NEXT: <<<NULL>>> 50*b0cfbfd7SErich Keane // CHECK-NEXT: BinaryOperator{{.*}}'<' 51*b0cfbfd7SErich Keane // CHECK-NEXT: ImplicitCastExpr 52*b0cfbfd7SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int' 53*b0cfbfd7SErich Keane // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5 54*b0cfbfd7SErich Keane // CHECK-NEXT: UnaryOperator{{.*}}++ 55*b0cfbfd7SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int' 562b939e18Serichkeane // CHECK-NEXT: CompoundStmt 572b939e18Serichkeane } 582b939e18Serichkeane 592b939e18Serichkeane template<typename T> 602b939e18Serichkeane void TemplUses() { 612b939e18Serichkeane // CHECK: FunctionTemplateDecl{{.*}}TemplUses 622b939e18Serichkeane // CHECK-NEXT: TemplateTypeParmDecl 632b939e18Serichkeane // CHECK-NEXT: FunctionDecl{{.*}} TemplUses 642b939e18Serichkeane // CHECK-NEXT: CompoundStmt 652b939e18Serichkeane 662b939e18Serichkeane #pragma acc loop auto 67*b0cfbfd7SErich Keane for(int i = 0; i < 5; ++i){} 682b939e18Serichkeane // CHECK-NEXT: OpenACCLoopConstruct{{.*}} 692b939e18Serichkeane // CHECK-NEXT: auto clause 702b939e18Serichkeane // CHECK-NEXT: ForStmt 71*b0cfbfd7SErich Keane // CHECK-NEXT: DeclStmt 72*b0cfbfd7SErich Keane // CHECK-NEXT: VarDecl{{.*}} i 'int' 73*b0cfbfd7SErich Keane // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0 742b939e18Serichkeane // CHECK-NEXT: <<<NULL>>> 75*b0cfbfd7SErich Keane // CHECK-NEXT: BinaryOperator{{.*}}'<' 76*b0cfbfd7SErich Keane // CHECK-NEXT: ImplicitCastExpr 77*b0cfbfd7SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int' 78*b0cfbfd7SErich Keane // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5 79*b0cfbfd7SErich Keane // CHECK-NEXT: UnaryOperator{{.*}}++ 80*b0cfbfd7SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int' 812b939e18Serichkeane // CHECK-NEXT: CompoundStmt 822b939e18Serichkeane 832b939e18Serichkeane #pragma acc loop seq 842b939e18Serichkeane for(;;){} 852b939e18Serichkeane // CHECK-NEXT: OpenACCLoopConstruct{{.*}} 862b939e18Serichkeane // CHECK-NEXT: seq clause 872b939e18Serichkeane // CHECK-NEXT: ForStmt 882b939e18Serichkeane // CHECK-NEXT: <<<NULL>>> 892b939e18Serichkeane // CHECK-NEXT: <<<NULL>>> 902b939e18Serichkeane // CHECK-NEXT: <<<NULL>>> 912b939e18Serichkeane // CHECK-NEXT: <<<NULL>>> 922b939e18Serichkeane // CHECK-NEXT: CompoundStmt 932b939e18Serichkeane 942b939e18Serichkeane #pragma acc loop independent 95*b0cfbfd7SErich Keane for(int i = 0; i < 5; ++i){} 962b939e18Serichkeane // CHECK-NEXT: OpenACCLoopConstruct{{.*}} 972b939e18Serichkeane // CHECK-NEXT: independent clause 982b939e18Serichkeane // CHECK-NEXT: ForStmt 99*b0cfbfd7SErich Keane // CHECK-NEXT: DeclStmt 100*b0cfbfd7SErich Keane // CHECK-NEXT: VarDecl{{.*}} i 'int' 101*b0cfbfd7SErich Keane // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0 1022b939e18Serichkeane // CHECK-NEXT: <<<NULL>>> 103*b0cfbfd7SErich Keane // CHECK-NEXT: BinaryOperator{{.*}}'<' 104*b0cfbfd7SErich Keane // CHECK-NEXT: ImplicitCastExpr 105*b0cfbfd7SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int' 106*b0cfbfd7SErich Keane // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5 107*b0cfbfd7SErich Keane // CHECK-NEXT: UnaryOperator{{.*}}++ 108*b0cfbfd7SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int' 1092b939e18Serichkeane // CHECK-NEXT: CompoundStmt 1102b939e18Serichkeane 1112b939e18Serichkeane // Instantiations. 1122b939e18Serichkeane // CHECK-NEXT: FunctionDecl{{.*}}TemplUses 'void ()' implicit_instantiation 1132b939e18Serichkeane // CHECK-NEXT: TemplateArgument 1142b939e18Serichkeane // CHECK-NEXT: BuiltinType 1152b939e18Serichkeane // CHECK-NEXT: CompoundStmt 1162b939e18Serichkeane 1172b939e18Serichkeane // CHECK-NEXT: OpenACCLoopConstruct{{.*}} 1182b939e18Serichkeane // CHECK-NEXT: auto clause 1192b939e18Serichkeane // CHECK-NEXT: ForStmt 120*b0cfbfd7SErich Keane // CHECK-NEXT: DeclStmt 121*b0cfbfd7SErich Keane // CHECK-NEXT: VarDecl{{.*}} i 'int' 122*b0cfbfd7SErich Keane // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0 1232b939e18Serichkeane // CHECK-NEXT: <<<NULL>>> 124*b0cfbfd7SErich Keane // CHECK-NEXT: BinaryOperator{{.*}}'<' 125*b0cfbfd7SErich Keane // CHECK-NEXT: ImplicitCastExpr 126*b0cfbfd7SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int' 127*b0cfbfd7SErich Keane // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5 128*b0cfbfd7SErich Keane // CHECK-NEXT: UnaryOperator{{.*}}++ 129*b0cfbfd7SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int' 1302b939e18Serichkeane // CHECK-NEXT: CompoundStmt 1312b939e18Serichkeane 1322b939e18Serichkeane // CHECK-NEXT: OpenACCLoopConstruct{{.*}} 1332b939e18Serichkeane // CHECK-NEXT: seq clause 1342b939e18Serichkeane // CHECK-NEXT: ForStmt 1352b939e18Serichkeane // CHECK-NEXT: <<<NULL>>> 1362b939e18Serichkeane // CHECK-NEXT: <<<NULL>>> 1372b939e18Serichkeane // CHECK-NEXT: <<<NULL>>> 1382b939e18Serichkeane // CHECK-NEXT: <<<NULL>>> 1392b939e18Serichkeane // CHECK-NEXT: CompoundStmt 1402b939e18Serichkeane 1412b939e18Serichkeane // CHECK-NEXT: OpenACCLoopConstruct{{.*}} 1422b939e18Serichkeane // CHECK-NEXT: independent clause 1432b939e18Serichkeane // CHECK-NEXT: ForStmt 144*b0cfbfd7SErich Keane // CHECK-NEXT: DeclStmt 145*b0cfbfd7SErich Keane // CHECK-NEXT: VarDecl{{.*}} i 'int' 146*b0cfbfd7SErich Keane // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0 1472b939e18Serichkeane // CHECK-NEXT: <<<NULL>>> 148*b0cfbfd7SErich Keane // CHECK-NEXT: BinaryOperator{{.*}}'<' 149*b0cfbfd7SErich Keane // CHECK-NEXT: ImplicitCastExpr 150*b0cfbfd7SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int' 151*b0cfbfd7SErich Keane // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5 152*b0cfbfd7SErich Keane // CHECK-NEXT: UnaryOperator{{.*}}++ 153*b0cfbfd7SErich Keane // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int' 1542b939e18Serichkeane // CHECK-NEXT: CompoundStmt 1552b939e18Serichkeane } 1562b939e18Serichkeane 1572b939e18Serichkeane void Inst() { 1582b939e18Serichkeane TemplUses<int>(); 1592b939e18Serichkeane } 1602b939e18Serichkeane #endif // PCH_HELPER 161