1 // RUN: %clang_cc1 %s -fopenacc -ast-dump | FileCheck %s
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
10 // CHECK: FunctionDecl{{.*}}NormalUses
11 // CHECK-NEXT: CompoundStmt
13 #pragma acc parallel loop auto
14 for(int i
= 0; i
< 5; ++i
){}
15 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} parallel loop
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
30 #pragma acc serial loop seq
32 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} serial loop
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
41 #pragma acc kernels loop independent
42 for(int i
= 0; i
< 5; ++i
){}
43 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} kernels loop
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
61 // CHECK: FunctionTemplateDecl{{.*}}TemplUses
62 // CHECK-NEXT: TemplateTypeParmDecl
63 // CHECK-NEXT: FunctionDecl{{.*}} TemplUses
64 // CHECK-NEXT: CompoundStmt
66 #pragma acc parallel loop auto
67 for(int i
= 0; i
< 5; ++i
){}
68 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} parallel loop
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
83 #pragma acc serial loop seq
85 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} serial loop
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
94 #pragma acc kernels loop independent
95 for(int i
= 0; i
< 5; ++i
){}
96 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} kernels loop
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
112 // CHECK-NEXT: FunctionDecl{{.*}}TemplUses 'void ()' implicit_instantiation
113 // CHECK-NEXT: TemplateArgument
114 // CHECK-NEXT: BuiltinType
115 // CHECK-NEXT: CompoundStmt
117 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} parallel loop
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
132 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} serial loop
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
141 // CHECK-NEXT: OpenACCCombinedConstruct{{.*}} kernels loop
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