diff options
Diffstat (limited to 'clang/lib/Basic/OpenMPKinds.cpp')
-rw-r--r-- | clang/lib/Basic/OpenMPKinds.cpp | 96 |
1 files changed, 88 insertions, 8 deletions
diff --git a/clang/lib/Basic/OpenMPKinds.cpp b/clang/lib/Basic/OpenMPKinds.cpp index 2f2e6537ebd3..36bce7e44afb 100644 --- a/clang/lib/Basic/OpenMPKinds.cpp +++ b/clang/lib/Basic/OpenMPKinds.cpp @@ -104,14 +104,27 @@ unsigned clang::getOpenMPSimpleClauseType(OpenMPClauseKind Kind, StringRef Str, #define OPENMP_DEVICE_TYPE_KIND(Name) .Case(#Name, OMPC_DEVICE_TYPE_##Name) #include "clang/Basic/OpenMPKinds.def" .Default(OMPC_DEVICE_TYPE_unknown); + case OMPC_at: + return llvm::StringSwitch<OpenMPAtClauseKind>(Str) +#define OPENMP_AT_KIND(Name) .Case(#Name, OMPC_AT_##Name) +#include "clang/Basic/OpenMPKinds.def" + .Default(OMPC_AT_unknown); + case OMPC_severity: + return llvm::StringSwitch<OpenMPSeverityClauseKind>(Str) +#define OPENMP_SEVERITY_KIND(Name) .Case(#Name, OMPC_SEVERITY_##Name) +#include "clang/Basic/OpenMPKinds.def" + .Default(OMPC_SEVERITY_unknown); case OMPC_lastprivate: return llvm::StringSwitch<OpenMPLastprivateModifier>(Str) #define OPENMP_LASTPRIVATE_KIND(Name) .Case(#Name, OMPC_LASTPRIVATE_##Name) #include "clang/Basic/OpenMPKinds.def" .Default(OMPC_LASTPRIVATE_unknown); case OMPC_order: - return llvm::StringSwitch<OpenMPOrderClauseKind>(Str) -#define OPENMP_ORDER_KIND(Name) .Case(#Name, OMPC_ORDER_##Name) + return llvm::StringSwitch<unsigned>(Str) +#define OPENMP_ORDER_KIND(Name) \ + .Case(#Name, static_cast<unsigned>(OMPC_ORDER_##Name)) +#define OPENMP_ORDER_MODIFIER(Name) \ + .Case(#Name, static_cast<unsigned>(OMPC_ORDER_MODIFIER_##Name)) #include "clang/Basic/OpenMPKinds.def" .Default(OMPC_ORDER_unknown); case OMPC_update: @@ -139,6 +152,24 @@ unsigned clang::getOpenMPSimpleClauseType(OpenMPClauseKind Kind, StringRef Str, #define OPENMP_BIND_KIND(Name) .Case(#Name, OMPC_BIND_##Name) #include "clang/Basic/OpenMPKinds.def" .Default(OMPC_BIND_unknown); + case OMPC_grainsize: { + unsigned Type = llvm::StringSwitch<unsigned>(Str) +#define OPENMP_GRAINSIZE_MODIFIER(Name) .Case(#Name, OMPC_GRAINSIZE_##Name) +#include "clang/Basic/OpenMPKinds.def" + .Default(OMPC_GRAINSIZE_unknown); + if (LangOpts.OpenMP < 51) + return OMPC_GRAINSIZE_unknown; + return Type; + } + case OMPC_num_tasks: { + unsigned Type = llvm::StringSwitch<unsigned>(Str) +#define OPENMP_NUMTASKS_MODIFIER(Name) .Case(#Name, OMPC_NUMTASKS_##Name) +#include "clang/Basic/OpenMPKinds.def" + .Default(OMPC_NUMTASKS_unknown); + if (LangOpts.OpenMP < 51) + return OMPC_NUMTASKS_unknown; + return Type; + } case OMPC_unknown: case OMPC_threadprivate: case OMPC_if: @@ -178,9 +209,7 @@ unsigned clang::getOpenMPSimpleClauseType(OpenMPClauseKind Kind, StringRef Str, case OMPC_num_teams: case OMPC_thread_limit: case OMPC_priority: - case OMPC_grainsize: case OMPC_nogroup: - case OMPC_num_tasks: case OMPC_hint: case OMPC_uniform: case OMPC_use_device_ptr: @@ -336,6 +365,26 @@ const char *clang::getOpenMPSimpleClauseTypeName(OpenMPClauseKind Kind, #include "clang/Basic/OpenMPKinds.def" } llvm_unreachable("Invalid OpenMP 'device_type' clause type"); + case OMPC_at: + switch (Type) { + case OMPC_AT_unknown: + return "unknown"; +#define OPENMP_AT_KIND(Name) \ + case OMPC_AT_##Name: \ + return #Name; +#include "clang/Basic/OpenMPKinds.def" + } + llvm_unreachable("Invalid OpenMP 'at' clause type"); + case OMPC_severity: + switch (Type) { + case OMPC_SEVERITY_unknown: + return "unknown"; +#define OPENMP_SEVERITY_KIND(Name) \ + case OMPC_SEVERITY_##Name: \ + return #Name; +#include "clang/Basic/OpenMPKinds.def" + } + llvm_unreachable("Invalid OpenMP 'severity' clause type"); case OMPC_lastprivate: switch (Type) { case OMPC_LASTPRIVATE_unknown: @@ -349,10 +398,14 @@ const char *clang::getOpenMPSimpleClauseTypeName(OpenMPClauseKind Kind, case OMPC_order: switch (Type) { case OMPC_ORDER_unknown: + case OMPC_ORDER_MODIFIER_last: return "unknown"; #define OPENMP_ORDER_KIND(Name) \ - case OMPC_ORDER_##Name: \ - return #Name; + case OMPC_ORDER_##Name: \ + return #Name; +#define OPENMP_ORDER_MODIFIER(Name) \ + case OMPC_ORDER_MODIFIER_##Name: \ + return #Name; #include "clang/Basic/OpenMPKinds.def" } llvm_unreachable("Invalid OpenMP 'order' clause type"); @@ -406,6 +459,26 @@ const char *clang::getOpenMPSimpleClauseTypeName(OpenMPClauseKind Kind, #include "clang/Basic/OpenMPKinds.def" } llvm_unreachable("Invalid OpenMP 'bind' clause type"); + case OMPC_grainsize: + switch (Type) { + case OMPC_GRAINSIZE_unknown: + return "unknown"; +#define OPENMP_GRAINSIZE_MODIFIER(Name) \ + case OMPC_GRAINSIZE_##Name: \ + return #Name; +#include "clang/Basic/OpenMPKinds.def" + } + llvm_unreachable("Invalid OpenMP 'grainsize' clause modifier"); + case OMPC_num_tasks: + switch (Type) { + case OMPC_NUMTASKS_unknown: + return "unknown"; +#define OPENMP_NUMTASKS_MODIFIER(Name) \ + case OMPC_NUMTASKS_##Name: \ + return #Name; +#include "clang/Basic/OpenMPKinds.def" + } + llvm_unreachable("Invalid OpenMP 'num_tasks' clause modifier"); case OMPC_unknown: case OMPC_threadprivate: case OMPC_if: @@ -445,9 +518,7 @@ const char *clang::getOpenMPSimpleClauseTypeName(OpenMPClauseKind Kind, case OMPC_num_teams: case OMPC_thread_limit: case OMPC_priority: - case OMPC_grainsize: case OMPC_nogroup: - case OMPC_num_tasks: case OMPC_hint: case OMPC_uniform: case OMPC_use_device_ptr: @@ -650,6 +721,14 @@ bool clang::isOpenMPLoopTransformationDirective(OpenMPDirectiveKind DKind) { return DKind == OMPD_tile || DKind == OMPD_unroll; } +bool clang::isOpenMPCombinedParallelADirective(OpenMPDirectiveKind DKind) { + return DKind == OMPD_parallel_for || DKind == OMPD_parallel_for_simd || + DKind == OMPD_parallel_master || + DKind == OMPD_parallel_master_taskloop || + DKind == OMPD_parallel_master_taskloop_simd || + DKind == OMPD_parallel_sections; +} + void clang::getOpenMPCaptureRegions( SmallVectorImpl<OpenMPDirectiveKind> &CaptureRegions, OpenMPDirectiveKind DKind) { @@ -763,6 +842,7 @@ void clang::getOpenMPCaptureRegions( case OMPD_allocate: case OMPD_taskyield: case OMPD_barrier: + case OMPD_error: case OMPD_taskwait: case OMPD_cancellation_point: case OMPD_cancel: |