clang  10.0.0svn
OpenMPKinds.h
Go to the documentation of this file.
1 //===--- OpenMPKinds.h - OpenMP enums ---------------------------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 ///
9 /// \file
10 /// Defines some OpenMP-specific enums and functions.
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 /// OpenMP directives.
23 #define OPENMP_DIRECTIVE(Name) \
24  OMPD_##Name,
25 #define OPENMP_DIRECTIVE_EXT(Name, Str) \
26  OMPD_##Name,
27 #include "clang/Basic/OpenMPKinds.def"
29 };
30 
31 /// OpenMP clauses.
33 #define OPENMP_CLAUSE(Name, Class) \
34  OMPC_##Name,
35 #include "clang/Basic/OpenMPKinds.def"
40 };
41 
42 /// OpenMP attributes for 'default' clause.
44 #define OPENMP_DEFAULT_KIND(Name) \
45  OMPC_DEFAULT_##Name,
46 #include "clang/Basic/OpenMPKinds.def"
48 };
49 
50 /// OpenMP attributes for 'proc_bind' clause.
52 #define OPENMP_PROC_BIND_KIND(Name) \
53  OMPC_PROC_BIND_##Name,
54 #include "clang/Basic/OpenMPKinds.def"
56 };
57 
58 /// OpenMP attributes for 'schedule' clause.
60 #define OPENMP_SCHEDULE_KIND(Name) \
61  OMPC_SCHEDULE_##Name,
62 #include "clang/Basic/OpenMPKinds.def"
64 };
65 
66 /// OpenMP modifiers for 'schedule' clause.
69 #define OPENMP_SCHEDULE_MODIFIER(Name) \
70  OMPC_SCHEDULE_MODIFIER_##Name,
71 #include "clang/Basic/OpenMPKinds.def"
73 };
74 
75 /// OpenMP attributes for 'depend' clause.
77 #define OPENMP_DEPEND_KIND(Name) \
78  OMPC_DEPEND_##Name,
79 #include "clang/Basic/OpenMPKinds.def"
81 };
82 
83 /// OpenMP attributes for 'linear' clause.
85 #define OPENMP_LINEAR_KIND(Name) \
86  OMPC_LINEAR_##Name,
87 #include "clang/Basic/OpenMPKinds.def"
89 };
90 
91 /// OpenMP mapping kind for 'map' clause.
93 #define OPENMP_MAP_KIND(Name) \
94  OMPC_MAP_##Name,
95 #include "clang/Basic/OpenMPKinds.def"
97 };
98 
99 /// OpenMP modifier kind for 'map' clause.
102 #define OPENMP_MAP_MODIFIER_KIND(Name) \
103  OMPC_MAP_MODIFIER_##Name,
104 #include "clang/Basic/OpenMPKinds.def"
106 };
107 
108 /// OpenMP modifier kind for 'to' clause.
110 #define OPENMP_TO_MODIFIER_KIND(Name) \
111  OMPC_TO_MODIFIER_##Name,
112 #include "clang/Basic/OpenMPKinds.def"
114 };
115 
116 /// OpenMP modifier kind for 'from' clause.
118 #define OPENMP_FROM_MODIFIER_KIND(Name) \
119  OMPC_FROM_MODIFIER_##Name,
120 #include "clang/Basic/OpenMPKinds.def"
122 };
123 
124 /// OpenMP attributes for 'dist_schedule' clause.
126 #define OPENMP_DIST_SCHEDULE_KIND(Name) OMPC_DIST_SCHEDULE_##Name,
127 #include "clang/Basic/OpenMPKinds.def"
129 };
130 
131 /// OpenMP attributes for 'defaultmap' clause.
133 #define OPENMP_DEFAULTMAP_KIND(Name) \
134  OMPC_DEFAULTMAP_##Name,
135 #include "clang/Basic/OpenMPKinds.def"
137 };
138 
139 /// OpenMP modifiers for 'defaultmap' clause.
142 #define OPENMP_DEFAULTMAP_MODIFIER(Name) \
143  OMPC_DEFAULTMAP_MODIFIER_##Name,
144 #include "clang/Basic/OpenMPKinds.def"
146 };
147 
148 /// OpenMP attributes for 'atomic_default_mem_order' clause.
150 #define OPENMP_ATOMIC_DEFAULT_MEM_ORDER_KIND(Name) \
151  OMPC_ATOMIC_DEFAULT_MEM_ORDER_##Name,
152 #include "clang/Basic/OpenMPKinds.def"
154 };
155 
156 /// OpenMP device type for 'device_type' clause.
158 #define OPENMP_DEVICE_TYPE_KIND(Name) \
159  OMPC_DEVICE_TYPE_##Name,
160 #include "clang/Basic/OpenMPKinds.def"
162 };
163 
164 /// Scheduling data for loop-based OpenMP directives.
165 struct OpenMPScheduleTy final {
169 };
170 
171 OpenMPDirectiveKind getOpenMPDirectiveKind(llvm::StringRef Str);
173 
174 OpenMPClauseKind getOpenMPClauseKind(llvm::StringRef Str);
176 
177 unsigned getOpenMPSimpleClauseType(OpenMPClauseKind Kind, llvm::StringRef Str);
179 
181  OpenMPClauseKind CKind);
182 
183 /// Checks if the specified directive is a directive with an associated
184 /// loop construct.
185 /// \param DKind Specified directive.
186 /// \return true - the directive is a loop-associated directive like 'omp simd'
187 /// or 'omp for' directive, otherwise - false.
189 
190 /// Checks if the specified directive is a worksharing directive.
191 /// \param DKind Specified directive.
192 /// \return true - the directive is a worksharing directive like 'omp for',
193 /// otherwise - false.
195 
196 /// Checks if the specified directive is a taskloop directive.
197 /// \param DKind Specified directive.
198 /// \return true - the directive is a worksharing directive like 'omp taskloop',
199 /// otherwise - false.
201 
202 /// Checks if the specified directive is a parallel-kind directive.
203 /// \param DKind Specified directive.
204 /// \return true - the directive is a parallel-like directive like 'omp
205 /// parallel', otherwise - false.
207 
208 /// Checks if the specified directive is a target code offload directive.
209 /// \param DKind Specified directive.
210 /// \return true - the directive is a target code offload directive like
211 /// 'omp target', 'omp target parallel', 'omp target xxx'
212 /// otherwise - false.
214 
215 /// Checks if the specified directive is a target data offload directive.
216 /// \param DKind Specified directive.
217 /// \return true - the directive is a target data offload directive like
218 /// 'omp target data', 'omp target update', 'omp target enter data',
219 /// 'omp target exit data'
220 /// otherwise - false.
222 
223 /// Checks if the specified composite/combined directive constitutes a teams
224 /// directive in the outermost nest. For example
225 /// 'omp teams distribute' or 'omp teams distribute parallel for'.
226 /// \param DKind Specified directive.
227 /// \return true - the directive has teams on the outermost nest, otherwise -
228 /// false.
230 
231 /// Checks if the specified directive is a teams-kind directive. For example,
232 /// 'omp teams distribute' or 'omp target teams'.
233 /// \param DKind Specified directive.
234 /// \return true - the directive is a teams-like directive, otherwise - false.
236 
237 /// Checks if the specified directive is a simd directive.
238 /// \param DKind Specified directive.
239 /// \return true - the directive is a simd directive like 'omp simd',
240 /// otherwise - false.
242 
243 /// Checks if the specified directive is a distribute directive.
244 /// \param DKind Specified directive.
245 /// \return true - the directive is a distribute-directive like 'omp
246 /// distribute',
247 /// otherwise - false.
249 
250 /// Checks if the specified composite/combined directive constitutes a
251 /// distribute directive in the outermost nest. For example,
252 /// 'omp distribute parallel for' or 'omp distribute'.
253 /// \param DKind Specified directive.
254 /// \return true - the directive has distribute on the outermost nest.
255 /// otherwise - false.
257 
258 /// Checks if the specified clause is one of private clauses like
259 /// 'private', 'firstprivate', 'reduction' etc..
260 /// \param Kind Clause kind.
261 /// \return true - the clause is a private clause, otherwise - false.
263 
264 /// Checks if the specified clause is one of threadprivate clauses like
265 /// 'threadprivate', 'copyin' or 'copyprivate'.
266 /// \param Kind Clause kind.
267 /// \return true - the clause is a threadprivate clause, otherwise - false.
269 
270 /// Checks if the specified directive kind is one of tasking directives - task,
271 /// taskloop or taksloop simd.
273 
274 /// Checks if the specified directive kind is one of the composite or combined
275 /// directives that need loop bound sharing across loops outlined in nested
276 /// functions
278 
279 /// Return the captured regions of an OpenMP directive.
282  OpenMPDirectiveKind DKind);
283 }
284 
285 #endif
286 
OpenMPFromModifierKind
OpenMP modifier kind for 'from' clause.
Definition: OpenMPKinds.h:117
Scheduling data for loop-based OpenMP directives.
Definition: OpenMPKinds.h:165
OpenMPDefaultmapClauseKind
OpenMP attributes for 'defaultmap' clause.
Definition: OpenMPKinds.h:132
bool isOpenMPNestingDistributeDirective(OpenMPDirectiveKind DKind)
Checks if the specified composite/combined directive constitutes a distribute directive in the outerm...
bool isOpenMPTargetDataManagementDirective(OpenMPDirectiveKind DKind)
Checks if the specified directive is a target data offload directive.
The base class of the type hierarchy.
Definition: Type.h:1436
const char * getOpenMPSimpleClauseTypeName(OpenMPClauseKind Kind, unsigned Type)
bool isAllowedClauseForDirective(OpenMPDirectiveKind DKind, OpenMPClauseKind CKind)
OpenMPDefaultmapClauseModifier
OpenMP modifiers for 'defaultmap' clause.
Definition: OpenMPKinds.h:140
OpenMPMapModifierKind
OpenMP modifier kind for 'map' clause.
Definition: OpenMPKinds.h:100
const char * getOpenMPClauseName(OpenMPClauseKind Kind)
Definition: OpenMPKinds.cpp:62
bool isOpenMPTaskingDirective(OpenMPDirectiveKind Kind)
Checks if the specified directive kind is one of tasking directives - task, taskloop or taksloop simd...
OpenMPLinearClauseKind
OpenMP attributes for 'linear' clause.
Definition: OpenMPKinds.h:84
OpenMPDistScheduleClauseKind
OpenMP attributes for 'dist_schedule' clause.
Definition: OpenMPKinds.h:125
OpenMPScheduleClauseKind Schedule
Definition: OpenMPKinds.h:166
bool isOpenMPTeamsDirective(OpenMPDirectiveKind DKind)
Checks if the specified directive is a teams-kind directive.
OpenMPScheduleClauseModifier M2
Definition: OpenMPKinds.h:168
OpenMPClauseKind getOpenMPClauseKind(llvm::StringRef Str)
bool isOpenMPTargetExecutionDirective(OpenMPDirectiveKind DKind)
Checks if the specified directive is a target code offload directive.
bool isOpenMPWorksharingDirective(OpenMPDirectiveKind DKind)
Checks if the specified directive is a worksharing directive.
bool isOpenMPPrivate(OpenMPClauseKind Kind)
Checks if the specified clause is one of private clauses like 'private', 'firstprivate', 'reduction' etc.
bool isOpenMPParallelDirective(OpenMPDirectiveKind DKind)
Checks if the specified directive is a parallel-kind directive.
OpenMPClauseKind
OpenMP clauses.
Definition: OpenMPKinds.h:32
OpenMPDeviceType
OpenMP device type for 'device_type' clause.
Definition: OpenMPKinds.h:157
bool isOpenMPTaskLoopDirective(OpenMPDirectiveKind DKind)
Checks if the specified directive is a taskloop directive.
OpenMPProcBindClauseKind
OpenMP attributes for 'proc_bind' clause.
Definition: OpenMPKinds.h:51
Kind
OpenMPDependClauseKind
OpenMP attributes for 'depend' clause.
Definition: OpenMPKinds.h:76
OpenMPDirectiveKind
OpenMP directives.
Definition: OpenMPKinds.h:22
bool isOpenMPLoopBoundSharingDirective(OpenMPDirectiveKind Kind)
Checks if the specified directive kind is one of the composite or combined directives that need loop ...
OpenMPScheduleClauseModifier
OpenMP modifiers for 'schedule' clause.
Definition: OpenMPKinds.h:67
Dataflow Directional Tag Classes.
OpenMPAtomicDefaultMemOrderClauseKind
OpenMP attributes for 'atomic_default_mem_order' clause.
Definition: OpenMPKinds.h:149
OpenMPScheduleClauseModifier M1
Definition: OpenMPKinds.h:167
bool isOpenMPSimdDirective(OpenMPDirectiveKind DKind)
Checks if the specified directive is a simd directive.
bool isOpenMPThreadPrivate(OpenMPClauseKind Kind)
Checks if the specified clause is one of threadprivate clauses like 'threadprivate', 'copyin' or 'copyprivate'.
OpenMPToModifierKind
OpenMP modifier kind for 'to' clause.
Definition: OpenMPKinds.h:109
void getOpenMPCaptureRegions(llvm::SmallVectorImpl< OpenMPDirectiveKind > &CaptureRegions, OpenMPDirectiveKind DKind)
Return the captured regions of an OpenMP directive.
unsigned getOpenMPSimpleClauseType(OpenMPClauseKind Kind, llvm::StringRef Str)
bool isOpenMPDistributeDirective(OpenMPDirectiveKind DKind)
Checks if the specified directive is a distribute directive.
OpenMPScheduleClauseKind
OpenMP attributes for &#39;schedule&#39; clause.
Definition: OpenMPKinds.h:59
OpenMPDefaultClauseKind
OpenMP attributes for &#39;default&#39; clause.
Definition: OpenMPKinds.h:43
OpenMPDirectiveKind getOpenMPDirectiveKind(llvm::StringRef Str)
const char * getOpenMPDirectiveName(OpenMPDirectiveKind Kind)
Definition: OpenMPKinds.cpp:30
OpenMPMapClauseKind
OpenMP mapping kind for &#39;map&#39; clause.
Definition: OpenMPKinds.h:92
bool isOpenMPLoopDirective(OpenMPDirectiveKind DKind)
Checks if the specified directive is a directive with an associated loop construct.
bool isOpenMPNestingTeamsDirective(OpenMPDirectiveKind DKind)
Checks if the specified composite/combined directive constitutes a teams directive in the outermost n...