16 #include "llvm/ADT/StringRef.h"
17 #include "llvm/ADT/StringSwitch.h"
18 #include "llvm/Support/ErrorHandling.h"
21 using namespace clang;
24 return llvm::StringSwitch<OpenMPDirectiveKind>(Str)
26 #define OPENMP_DIRECTIVE_EXT(Name, Str) .Case(Str, OMPD_##Name)
27 #include "clang/Basic/OpenMPKinds.def"
36 #define OPENMP_DIRECTIVE(Name) \
39 #define OPENMP_DIRECTIVE_EXT(Name, Str) \
42 #include "clang/Basic/OpenMPKinds.def"
45 llvm_unreachable(
"Invalid OpenMP directive kind");
55 return llvm::StringSwitch<OpenMPClauseKind>(Str)
57 #include "clang/Basic/OpenMPKinds.def"
66 #define OPENMP_CLAUSE(Name, Class) \
69 #include "clang/Basic/OpenMPKinds.def"
71 return "threadprivate or thread local";
73 llvm_unreachable(
"Invalid OpenMP clause kind");
80 return llvm::StringSwitch<OpenMPDefaultClauseKind>(Str)
82 #include "clang/Basic/OpenMPKinds.def"
85 return llvm::StringSwitch<OpenMPProcBindClauseKind>(Str)
87 #include "clang/Basic/OpenMPKinds.def"
90 return llvm::StringSwitch<OpenMPScheduleClauseKind>(Str)
92 #include "clang/Basic/OpenMPKinds.def"
95 return llvm::StringSwitch<OpenMPDependClauseKind>(Str)
97 #include "clang/Basic/OpenMPKinds.def"
103 case OMPC_num_threads:
107 case OMPC_firstprivate:
108 case OMPC_lastprivate:
114 case OMPC_copyprivate:
127 llvm_unreachable(
"Invalid OpenMP simple clause kind");
137 #define OPENMP_DEFAULT_KIND(Name) \
138 case OMPC_DEFAULT_##Name: \
140 #include "clang/Basic/OpenMPKinds.def"
142 llvm_unreachable(
"Invalid OpenMP 'default' clause type");
147 #define OPENMP_PROC_BIND_KIND(Name) \
148 case OMPC_PROC_BIND_##Name: \
150 #include "clang/Basic/OpenMPKinds.def"
152 llvm_unreachable(
"Invalid OpenMP 'proc_bind' clause type");
157 #define OPENMP_SCHEDULE_KIND(Name) \
158 case OMPC_SCHEDULE_##Name: \
160 #include "clang/Basic/OpenMPKinds.def"
166 #define OPENMP_DEPEND_KIND(Name) \
167 case OMPC_DEPEND_##Name: \
169 #include "clang/Basic/OpenMPKinds.def"
171 llvm_unreachable(
"Invalid OpenMP 'schedule' clause type");
176 case OMPC_num_threads:
180 case OMPC_firstprivate:
181 case OMPC_lastprivate:
187 case OMPC_copyprivate:
200 llvm_unreachable(
"Invalid OpenMP simple clause kind");
210 #define OPENMP_PARALLEL_CLAUSE(Name) \
213 #include "clang/Basic/OpenMPKinds.def"
220 #define OPENMP_SIMD_CLAUSE(Name) \
223 #include "clang/Basic/OpenMPKinds.def"
230 #define OPENMP_FOR_CLAUSE(Name) \
233 #include "clang/Basic/OpenMPKinds.def"
240 #define OPENMP_FOR_SIMD_CLAUSE(Name) \
243 #include "clang/Basic/OpenMPKinds.def"
250 #define OPENMP_SECTIONS_CLAUSE(Name) \
253 #include "clang/Basic/OpenMPKinds.def"
260 #define OPENMP_SINGLE_CLAUSE(Name) \
263 #include "clang/Basic/OpenMPKinds.def"
268 case OMPD_parallel_for:
270 #define OPENMP_PARALLEL_FOR_CLAUSE(Name) \
273 #include "clang/Basic/OpenMPKinds.def"
278 case OMPD_parallel_for_simd:
280 #define OPENMP_PARALLEL_FOR_SIMD_CLAUSE(Name) \
283 #include "clang/Basic/OpenMPKinds.def"
288 case OMPD_parallel_sections:
290 #define OPENMP_PARALLEL_SECTIONS_CLAUSE(Name) \
293 #include "clang/Basic/OpenMPKinds.def"
300 #define OPENMP_TASK_CLAUSE(Name) \
303 #include "clang/Basic/OpenMPKinds.def"
309 return CKind == OMPC_flush;
313 #define OPENMP_ATOMIC_CLAUSE(Name) \
316 #include "clang/Basic/OpenMPKinds.def"
323 #define OPENMP_TARGET_CLAUSE(Name) \
326 #include "clang/Basic/OpenMPKinds.def"
333 #define OPENMP_TEAMS_CLAUSE(Name) \
336 #include "clang/Basic/OpenMPKinds.def"
342 case OMPD_threadprivate:
350 case OMPD_cancellation_point:
359 return DKind == OMPD_simd || DKind == OMPD_for || DKind == OMPD_for_simd ||
360 DKind == OMPD_parallel_for ||
361 DKind == OMPD_parallel_for_simd;
365 return DKind == OMPD_for || DKind == OMPD_for_simd ||
366 DKind == OMPD_sections || DKind == OMPD_section ||
367 DKind == OMPD_single || DKind == OMPD_parallel_for ||
368 DKind == OMPD_parallel_for_simd ||
369 DKind == OMPD_parallel_sections;
373 return DKind == OMPD_parallel || DKind == OMPD_parallel_for ||
374 DKind == OMPD_parallel_for_simd ||
375 DKind == OMPD_parallel_sections;
379 return DKind == OMPD_teams;
383 return DKind == OMPD_simd || DKind == OMPD_for_simd ||
384 DKind == OMPD_parallel_for_simd;
388 return Kind == OMPC_private || Kind == OMPC_firstprivate ||
389 Kind == OMPC_lastprivate || Kind == OMPC_linear ||
390 Kind == OMPC_reduction;
const char * getOpenMPSimpleClauseTypeName(OpenMPClauseKind Kind, unsigned Type)
bool isAllowedClauseForDirective(OpenMPDirectiveKind DKind, OpenMPClauseKind CKind)
const char * getOpenMPClauseName(OpenMPClauseKind Kind)
Defines some OpenMP-specific enums and functions.
bool isOpenMPTeamsDirective(OpenMPDirectiveKind DKind)
Checks if the specified directive is a teams-kind directive.
OpenMPClauseKind getOpenMPClauseKind(llvm::StringRef Str)
bool isOpenMPWorksharingDirective(OpenMPDirectiveKind DKind)
Checks if the specified directive is a worksharing directive.
#define OPENMP_CLAUSE(Name, Class)
#define OPENMP_PROC_BIND_KIND(Name)
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.
#define OPENMP_DEPEND_KIND(Name)
OpenMPClauseKind
OpenMP clauses.
#define OPENMP_DIRECTIVE(Name)
Defines the clang::IdentifierInfo, clang::IdentifierTable, and clang::Selector interfaces.
OpenMPDirectiveKind
OpenMP directives.
bool isOpenMPSimdDirective(OpenMPDirectiveKind DKind)
Checks if the specified directive is a simd directive.
#define OPENMP_DEFAULT_KIND(Name)
bool isOpenMPThreadPrivate(OpenMPClauseKind Kind)
Checks if the specified clause is one of threadprivate clauses like 'threadprivate', 'copyin' or 'copyprivate'.
unsigned getOpenMPSimpleClauseType(OpenMPClauseKind Kind, llvm::StringRef Str)
OpenMPDirectiveKind getOpenMPDirectiveKind(llvm::StringRef Str)
const char * getOpenMPDirectiveName(OpenMPDirectiveKind Kind)
#define OPENMP_SCHEDULE_KIND(Name)
bool isOpenMPLoopDirective(OpenMPDirectiveKind DKind)
Checks if the specified directive is a directive with an associated loop construct.