1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | #ifndef LLVM_CLANG_BASIC_OPENMPKINDS_H |
15 | #define LLVM_CLANG_BASIC_OPENMPKINDS_H |
16 | |
17 | #include "llvm/ADT/StringRef.h" |
18 | |
19 | namespace clang { |
20 | |
21 | |
22 | enum OpenMPDirectiveKind { |
23 | #define OPENMP_DIRECTIVE(Name) \ |
24 | OMPD_##Name, |
25 | #define OPENMP_DIRECTIVE_EXT(Name, Str) \ |
26 | OMPD_##Name, |
27 | #include "clang/Basic/OpenMPKinds.def" |
28 | OMPD_unknown |
29 | }; |
30 | |
31 | |
32 | enum OpenMPClauseKind { |
33 | #define OPENMP_CLAUSE(Name, Class) \ |
34 | OMPC_##Name, |
35 | #include "clang/Basic/OpenMPKinds.def" |
36 | OMPC_threadprivate, |
37 | OMPC_uniform, |
38 | OMPC_unknown |
39 | }; |
40 | |
41 | |
42 | enum OpenMPDefaultClauseKind { |
43 | #define OPENMP_DEFAULT_KIND(Name) \ |
44 | OMPC_DEFAULT_##Name, |
45 | #include "clang/Basic/OpenMPKinds.def" |
46 | OMPC_DEFAULT_unknown |
47 | }; |
48 | |
49 | |
50 | enum OpenMPProcBindClauseKind { |
51 | #define OPENMP_PROC_BIND_KIND(Name) \ |
52 | OMPC_PROC_BIND_##Name, |
53 | #include "clang/Basic/OpenMPKinds.def" |
54 | OMPC_PROC_BIND_unknown |
55 | }; |
56 | |
57 | |
58 | enum OpenMPScheduleClauseKind { |
59 | #define OPENMP_SCHEDULE_KIND(Name) \ |
60 | OMPC_SCHEDULE_##Name, |
61 | #include "clang/Basic/OpenMPKinds.def" |
62 | OMPC_SCHEDULE_unknown |
63 | }; |
64 | |
65 | |
66 | enum OpenMPScheduleClauseModifier { |
67 | OMPC_SCHEDULE_MODIFIER_unknown = OMPC_SCHEDULE_unknown, |
68 | #define OPENMP_SCHEDULE_MODIFIER(Name) \ |
69 | OMPC_SCHEDULE_MODIFIER_##Name, |
70 | #include "clang/Basic/OpenMPKinds.def" |
71 | OMPC_SCHEDULE_MODIFIER_last |
72 | }; |
73 | |
74 | |
75 | enum OpenMPDependClauseKind { |
76 | #define OPENMP_DEPEND_KIND(Name) \ |
77 | OMPC_DEPEND_##Name, |
78 | #include "clang/Basic/OpenMPKinds.def" |
79 | OMPC_DEPEND_unknown |
80 | }; |
81 | |
82 | |
83 | enum OpenMPLinearClauseKind { |
84 | #define OPENMP_LINEAR_KIND(Name) \ |
85 | OMPC_LINEAR_##Name, |
86 | #include "clang/Basic/OpenMPKinds.def" |
87 | OMPC_LINEAR_unknown |
88 | }; |
89 | |
90 | |
91 | enum OpenMPMapClauseKind { |
92 | #define OPENMP_MAP_KIND(Name) \ |
93 | OMPC_MAP_##Name, |
94 | #include "clang/Basic/OpenMPKinds.def" |
95 | OMPC_MAP_unknown |
96 | }; |
97 | |
98 | |
99 | enum OpenMPMapModifierKind { |
100 | OMPC_MAP_MODIFIER_unknown = OMPC_MAP_unknown, |
101 | #define OPENMP_MAP_MODIFIER_KIND(Name) \ |
102 | OMPC_MAP_MODIFIER_##Name, |
103 | #include "clang/Basic/OpenMPKinds.def" |
104 | OMPC_MAP_MODIFIER_last |
105 | }; |
106 | |
107 | |
108 | enum OpenMPToModifierKind { |
109 | #define OPENMP_TO_MODIFIER_KIND(Name) \ |
110 | OMPC_TO_MODIFIER_##Name, |
111 | #include "clang/Basic/OpenMPKinds.def" |
112 | OMPC_TO_MODIFIER_unknown |
113 | }; |
114 | |
115 | |
116 | enum OpenMPFromModifierKind { |
117 | #define OPENMP_FROM_MODIFIER_KIND(Name) \ |
118 | OMPC_FROM_MODIFIER_##Name, |
119 | #include "clang/Basic/OpenMPKinds.def" |
120 | OMPC_FROM_MODIFIER_unknown |
121 | }; |
122 | |
123 | |
124 | enum OpenMPDistScheduleClauseKind { |
125 | #define OPENMP_DIST_SCHEDULE_KIND(Name) OMPC_DIST_SCHEDULE_##Name, |
126 | #include "clang/Basic/OpenMPKinds.def" |
127 | OMPC_DIST_SCHEDULE_unknown |
128 | }; |
129 | |
130 | |
131 | enum OpenMPDefaultmapClauseKind { |
132 | #define OPENMP_DEFAULTMAP_KIND(Name) \ |
133 | OMPC_DEFAULTMAP_##Name, |
134 | #include "clang/Basic/OpenMPKinds.def" |
135 | OMPC_DEFAULTMAP_unknown |
136 | }; |
137 | |
138 | |
139 | enum OpenMPDefaultmapClauseModifier { |
140 | OMPC_DEFAULTMAP_MODIFIER_unknown = OMPC_DEFAULTMAP_unknown, |
141 | #define OPENMP_DEFAULTMAP_MODIFIER(Name) \ |
142 | OMPC_DEFAULTMAP_MODIFIER_##Name, |
143 | #include "clang/Basic/OpenMPKinds.def" |
144 | OMPC_DEFAULTMAP_MODIFIER_last |
145 | }; |
146 | |
147 | |
148 | enum OpenMPAtomicDefaultMemOrderClauseKind { |
149 | #define OPENMP_ATOMIC_DEFAULT_MEM_ORDER_KIND(Name) \ |
150 | OMPC_ATOMIC_DEFAULT_MEM_ORDER_##Name, |
151 | #include "clang/Basic/OpenMPKinds.def" |
152 | OMPC_ATOMIC_DEFAULT_MEM_ORDER_unknown |
153 | }; |
154 | |
155 | |
156 | struct OpenMPScheduleTy final { |
157 | OpenMPScheduleClauseKind Schedule = OMPC_SCHEDULE_unknown; |
158 | OpenMPScheduleClauseModifier M1 = OMPC_SCHEDULE_MODIFIER_unknown; |
159 | OpenMPScheduleClauseModifier M2 = OMPC_SCHEDULE_MODIFIER_unknown; |
160 | }; |
161 | |
162 | OpenMPDirectiveKind getOpenMPDirectiveKind(llvm::StringRef Str); |
163 | const char *getOpenMPDirectiveName(OpenMPDirectiveKind Kind); |
164 | |
165 | OpenMPClauseKind getOpenMPClauseKind(llvm::StringRef Str); |
166 | const char *getOpenMPClauseName(OpenMPClauseKind Kind); |
167 | |
168 | unsigned getOpenMPSimpleClauseType(OpenMPClauseKind Kind, llvm::StringRef Str); |
169 | const char *getOpenMPSimpleClauseTypeName(OpenMPClauseKind Kind, unsigned Type); |
170 | |
171 | bool isAllowedClauseForDirective(OpenMPDirectiveKind DKind, |
172 | OpenMPClauseKind CKind); |
173 | |
174 | |
175 | |
176 | |
177 | |
178 | |
179 | bool isOpenMPLoopDirective(OpenMPDirectiveKind DKind); |
180 | |
181 | |
182 | |
183 | |
184 | |
185 | bool isOpenMPWorksharingDirective(OpenMPDirectiveKind DKind); |
186 | |
187 | |
188 | |
189 | |
190 | |
191 | bool isOpenMPTaskLoopDirective(OpenMPDirectiveKind DKind); |
192 | |
193 | |
194 | |
195 | |
196 | |
197 | bool isOpenMPParallelDirective(OpenMPDirectiveKind DKind); |
198 | |
199 | |
200 | |
201 | |
202 | |
203 | |
204 | bool isOpenMPTargetExecutionDirective(OpenMPDirectiveKind DKind); |
205 | |
206 | |
207 | |
208 | |
209 | |
210 | |
211 | |
212 | bool isOpenMPTargetDataManagementDirective(OpenMPDirectiveKind DKind); |
213 | |
214 | |
215 | |
216 | |
217 | |
218 | |
219 | |
220 | bool isOpenMPNestingTeamsDirective(OpenMPDirectiveKind DKind); |
221 | |
222 | |
223 | |
224 | |
225 | |
226 | bool isOpenMPTeamsDirective(OpenMPDirectiveKind DKind); |
227 | |
228 | |
229 | |
230 | |
231 | |
232 | bool isOpenMPSimdDirective(OpenMPDirectiveKind DKind); |
233 | |
234 | |
235 | |
236 | |
237 | |
238 | |
239 | bool isOpenMPDistributeDirective(OpenMPDirectiveKind DKind); |
240 | |
241 | |
242 | |
243 | |
244 | |
245 | |
246 | |
247 | bool isOpenMPNestingDistributeDirective(OpenMPDirectiveKind DKind); |
248 | |
249 | |
250 | |
251 | |
252 | |
253 | bool isOpenMPPrivate(OpenMPClauseKind Kind); |
254 | |
255 | |
256 | |
257 | |
258 | |
259 | bool isOpenMPThreadPrivate(OpenMPClauseKind Kind); |
260 | |
261 | |
262 | |
263 | bool isOpenMPTaskingDirective(OpenMPDirectiveKind Kind); |
264 | |
265 | |
266 | |
267 | |
268 | bool isOpenMPLoopBoundSharingDirective(OpenMPDirectiveKind Kind); |
269 | |
270 | |
271 | void getOpenMPCaptureRegions( |
272 | llvm::SmallVectorImpl<OpenMPDirectiveKind> &CaptureRegions, |
273 | OpenMPDirectiveKind DKind); |
274 | } |
275 | |
276 | #endif |
277 | |
278 | |