diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2013-12-22 00:07:40 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2013-12-22 00:07:40 +0000 | 
| commit | bfef399519ca9b8a4b4c6b563253bad7e0eeffe0 (patch) | |
| tree | df8df0b0067b381eab470a3b8f28d14a552a6340 /lib/Basic/OpenMPKinds.cpp | |
| parent | 6a0372513edbc473b538d2f724efac50405d6fef (diff) | |
Diffstat (limited to 'lib/Basic/OpenMPKinds.cpp')
| -rw-r--r-- | lib/Basic/OpenMPKinds.cpp | 94 | 
1 files changed, 92 insertions, 2 deletions
| diff --git a/lib/Basic/OpenMPKinds.cpp b/lib/Basic/OpenMPKinds.cpp index 835908d2a1b5..1350934d0e65 100644 --- a/lib/Basic/OpenMPKinds.cpp +++ b/lib/Basic/OpenMPKinds.cpp @@ -32,12 +32,102 @@ const char *clang::getOpenMPDirectiveName(OpenMPDirectiveKind Kind) {    assert(Kind < NUM_OPENMP_DIRECTIVES);    switch (Kind) {    case OMPD_unknown: -    return ("unknown"); +    return "unknown";  #define OPENMP_DIRECTIVE(Name) \    case OMPD_##Name : return #Name;  #include "clang/Basic/OpenMPKinds.def" -  default: +  case NUM_OPENMP_DIRECTIVES:      break;    }    llvm_unreachable("Invalid OpenMP directive kind");  } + +OpenMPClauseKind clang::getOpenMPClauseKind(StringRef Str) { +  return llvm::StringSwitch<OpenMPClauseKind>(Str) +#define OPENMP_CLAUSE(Name, Class) \ +           .Case(#Name, OMPC_##Name) +#include "clang/Basic/OpenMPKinds.def" +           .Default(OMPC_unknown); +} + +const char *clang::getOpenMPClauseName(OpenMPClauseKind Kind) { +  assert(Kind < NUM_OPENMP_CLAUSES); +  switch (Kind) { +  case OMPC_unknown: +    return "unknown"; +#define OPENMP_CLAUSE(Name, Class) \ +  case OMPC_##Name : return #Name; +#include "clang/Basic/OpenMPKinds.def" +  case OMPC_threadprivate: +    return "threadprivate or thread local"; +  case NUM_OPENMP_CLAUSES: +    break; +  } +  llvm_unreachable("Invalid OpenMP clause kind"); +} + +unsigned clang::getOpenMPSimpleClauseType(OpenMPClauseKind Kind, +                                          StringRef Str) { +  switch (Kind) { +  case OMPC_default: +    return llvm::StringSwitch<OpenMPDefaultClauseKind>(Str) +#define OPENMP_DEFAULT_KIND(Name) \ +             .Case(#Name, OMPC_DEFAULT_##Name) +#include "clang/Basic/OpenMPKinds.def" +             .Default(OMPC_DEFAULT_unknown); +  case OMPC_unknown: +  case OMPC_threadprivate: +  case OMPC_private: +  case OMPC_firstprivate: +  case OMPC_shared: +  case NUM_OPENMP_CLAUSES: +    break; +  } +  llvm_unreachable("Invalid OpenMP simple clause kind"); +} + +const char *clang::getOpenMPSimpleClauseTypeName(OpenMPClauseKind Kind, +                                                 unsigned Type) { +  switch (Kind) { +  case OMPC_default: +    switch (Type) { +    case OMPC_DEFAULT_unknown: +      return "unknown"; +#define OPENMP_DEFAULT_KIND(Name) \ +    case OMPC_DEFAULT_##Name : return #Name; +#include "clang/Basic/OpenMPKinds.def" +    } +    llvm_unreachable("Invalid OpenMP 'default' clause type"); +  case OMPC_unknown: +  case OMPC_threadprivate: +  case OMPC_private: +  case OMPC_firstprivate: +  case OMPC_shared: +  case NUM_OPENMP_CLAUSES: +    break; +  } +  llvm_unreachable("Invalid OpenMP simple clause kind"); +} + +bool clang::isAllowedClauseForDirective(OpenMPDirectiveKind DKind, +                                        OpenMPClauseKind CKind) { +  assert(DKind < NUM_OPENMP_DIRECTIVES); +  assert(CKind < NUM_OPENMP_CLAUSES); +  switch (DKind) { +  case OMPD_parallel: +    switch (CKind) { +#define OPENMP_PARALLEL_CLAUSE(Name) \ +    case OMPC_##Name: return true; +#include "clang/Basic/OpenMPKinds.def" +    default: +      break; +    } +    break; +  case OMPD_unknown: +  case OMPD_threadprivate: +  case OMPD_task: +  case NUM_OPENMP_DIRECTIVES: +    break; +  } +  return false; +} | 
