xref: /llvm-project/clang/test/SemaOpenACC/loop-construct-auto_seq_independent-ast.cpp (revision b0cfbfd74bfd9d077f7c1854a1b38dcbe9d402e4)
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