1c640058aa7f224a71ce3b1d2601d84e1b57f82d3Alexey Bataev//===--- OpenMPKinds.cpp - Token Kinds Support ----------------------------===//
2c640058aa7f224a71ce3b1d2601d84e1b57f82d3Alexey Bataev//
3c640058aa7f224a71ce3b1d2601d84e1b57f82d3Alexey Bataev//                     The LLVM Compiler Infrastructure
4c640058aa7f224a71ce3b1d2601d84e1b57f82d3Alexey Bataev//
5c640058aa7f224a71ce3b1d2601d84e1b57f82d3Alexey Bataev// This file is distributed under the University of Illinois Open Source
6c640058aa7f224a71ce3b1d2601d84e1b57f82d3Alexey Bataev// License. See LICENSE.TXT for details.
7c640058aa7f224a71ce3b1d2601d84e1b57f82d3Alexey Bataev//
8c640058aa7f224a71ce3b1d2601d84e1b57f82d3Alexey Bataev//===----------------------------------------------------------------------===//
9c640058aa7f224a71ce3b1d2601d84e1b57f82d3Alexey Bataev/// \file
10c640058aa7f224a71ce3b1d2601d84e1b57f82d3Alexey Bataev/// \brief This file implements the OpenMP enum and support functions.
11c640058aa7f224a71ce3b1d2601d84e1b57f82d3Alexey Bataev///
12c640058aa7f224a71ce3b1d2601d84e1b57f82d3Alexey Bataev//===----------------------------------------------------------------------===//
13c640058aa7f224a71ce3b1d2601d84e1b57f82d3Alexey Bataev
14c640058aa7f224a71ce3b1d2601d84e1b57f82d3Alexey Bataev#include "clang/Basic/OpenMPKinds.h"
15c640058aa7f224a71ce3b1d2601d84e1b57f82d3Alexey Bataev#include "clang/Basic/IdentifierTable.h"
16b63d8d2609985c26835c3890a3a929af6a4a6d1eMatt Beaumont-Gay#include "llvm/ADT/StringRef.h"
17c640058aa7f224a71ce3b1d2601d84e1b57f82d3Alexey Bataev#include "llvm/ADT/StringSwitch.h"
18c640058aa7f224a71ce3b1d2601d84e1b57f82d3Alexey Bataev#include "llvm/Support/ErrorHandling.h"
19c640058aa7f224a71ce3b1d2601d84e1b57f82d3Alexey Bataev#include <cassert>
20c640058aa7f224a71ce3b1d2601d84e1b57f82d3Alexey Bataev
21c640058aa7f224a71ce3b1d2601d84e1b57f82d3Alexey Bataevusing namespace clang;
22c640058aa7f224a71ce3b1d2601d84e1b57f82d3Alexey Bataev
23c640058aa7f224a71ce3b1d2601d84e1b57f82d3Alexey BataevOpenMPDirectiveKind clang::getOpenMPDirectiveKind(StringRef Str) {
24c640058aa7f224a71ce3b1d2601d84e1b57f82d3Alexey Bataev  return llvm::StringSwitch<OpenMPDirectiveKind>(Str)
25ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#define OPENMP_DIRECTIVE(Name) .Case(#Name, OMPD_##Name)
26ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#define OPENMP_DIRECTIVE_EXT(Name, Str) .Case(Str, OMPD_##Name)
27c640058aa7f224a71ce3b1d2601d84e1b57f82d3Alexey Bataev#include "clang/Basic/OpenMPKinds.def"
28ef8225444452a1486bd721f3285301fe84643b00Stephen Hines      .Default(OMPD_unknown);
29c640058aa7f224a71ce3b1d2601d84e1b57f82d3Alexey Bataev}
30c640058aa7f224a71ce3b1d2601d84e1b57f82d3Alexey Bataev
31c640058aa7f224a71ce3b1d2601d84e1b57f82d3Alexey Bataevconst char *clang::getOpenMPDirectiveName(OpenMPDirectiveKind Kind) {
326bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  assert(Kind <= OMPD_unknown);
33c640058aa7f224a71ce3b1d2601d84e1b57f82d3Alexey Bataev  switch (Kind) {
34c640058aa7f224a71ce3b1d2601d84e1b57f82d3Alexey Bataev  case OMPD_unknown:
356af701f29be43e49a25ab098c79940ae4cbb69c7Alexey Bataev    return "unknown";
36ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#define OPENMP_DIRECTIVE(Name)                                                 \
37ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  case OMPD_##Name:                                                            \
38ef8225444452a1486bd721f3285301fe84643b00Stephen Hines    return #Name;
39ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#define OPENMP_DIRECTIVE_EXT(Name, Str)                                        \
40ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  case OMPD_##Name:                                                            \
41ef8225444452a1486bd721f3285301fe84643b00Stephen Hines    return Str;
42c640058aa7f224a71ce3b1d2601d84e1b57f82d3Alexey Bataev#include "clang/Basic/OpenMPKinds.def"
43c640058aa7f224a71ce3b1d2601d84e1b57f82d3Alexey Bataev    break;
44c640058aa7f224a71ce3b1d2601d84e1b57f82d3Alexey Bataev  }
45c640058aa7f224a71ce3b1d2601d84e1b57f82d3Alexey Bataev  llvm_unreachable("Invalid OpenMP directive kind");
46c640058aa7f224a71ce3b1d2601d84e1b57f82d3Alexey Bataev}
476af701f29be43e49a25ab098c79940ae4cbb69c7Alexey Bataev
484fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey BataevOpenMPClauseKind clang::getOpenMPClauseKind(StringRef Str) {
494fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev  return llvm::StringSwitch<OpenMPClauseKind>(Str)
50ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#define OPENMP_CLAUSE(Name, Class) .Case(#Name, OMPC_##Name)
514fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev#include "clang/Basic/OpenMPKinds.def"
52ef8225444452a1486bd721f3285301fe84643b00Stephen Hines      .Default(OMPC_unknown);
534fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev}
544fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev
554fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataevconst char *clang::getOpenMPClauseName(OpenMPClauseKind Kind) {
566bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  assert(Kind <= OMPC_unknown);
574fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev  switch (Kind) {
584fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev  case OMPC_unknown:
594fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev    return "unknown";
60ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#define OPENMP_CLAUSE(Name, Class)                                             \
61ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  case OMPC_##Name:                                                            \
62ef8225444452a1486bd721f3285301fe84643b00Stephen Hines    return #Name;
634fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev#include "clang/Basic/OpenMPKinds.def"
644fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev  case OMPC_threadprivate:
654fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev    return "threadprivate or thread local";
664fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev  }
674fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev  llvm_unreachable("Invalid OpenMP clause kind");
684fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev}
694fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev
704fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataevunsigned clang::getOpenMPSimpleClauseType(OpenMPClauseKind Kind,
714fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev                                          StringRef Str) {
724fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev  switch (Kind) {
734fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev  case OMPC_default:
744fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev    return llvm::StringSwitch<OpenMPDefaultClauseKind>(Str)
75ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#define OPENMP_DEFAULT_KIND(Name) .Case(#Name, OMPC_DEFAULT_##Name)
764fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev#include "clang/Basic/OpenMPKinds.def"
77ef8225444452a1486bd721f3285301fe84643b00Stephen Hines        .Default(OMPC_DEFAULT_unknown);
786bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  case OMPC_proc_bind:
796bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines    return llvm::StringSwitch<OpenMPProcBindClauseKind>(Str)
80ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#define OPENMP_PROC_BIND_KIND(Name) .Case(#Name, OMPC_PROC_BIND_##Name)
816bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#include "clang/Basic/OpenMPKinds.def"
82ef8225444452a1486bd721f3285301fe84643b00Stephen Hines        .Default(OMPC_PROC_BIND_unknown);
83ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  case OMPC_schedule:
84ef8225444452a1486bd721f3285301fe84643b00Stephen Hines    return llvm::StringSwitch<OpenMPScheduleClauseKind>(Str)
85ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#define OPENMP_SCHEDULE_KIND(Name) .Case(#Name, OMPC_SCHEDULE_##Name)
86ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#include "clang/Basic/OpenMPKinds.def"
87ef8225444452a1486bd721f3285301fe84643b00Stephen Hines        .Default(OMPC_SCHEDULE_unknown);
884fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev  case OMPC_unknown:
894fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev  case OMPC_threadprivate:
90651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  case OMPC_if:
91651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  case OMPC_num_threads:
92651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  case OMPC_safelen:
936bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  case OMPC_collapse:
944fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev  case OMPC_private:
95d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev  case OMPC_firstprivate:
96ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  case OMPC_lastprivate:
97325047fdb5770c97149a977b64ac6cce5c3be427David Blaikie  case OMPC_shared:
98ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  case OMPC_reduction:
996bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  case OMPC_linear:
100ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  case OMPC_aligned:
101651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  case OMPC_copyin:
102ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  case OMPC_copyprivate:
103ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  case OMPC_ordered:
104ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  case OMPC_nowait:
1054fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev    break;
1064fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev  }
1074fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev  llvm_unreachable("Invalid OpenMP simple clause kind");
1084fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev}
1094fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev
1104fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataevconst char *clang::getOpenMPSimpleClauseTypeName(OpenMPClauseKind Kind,
1114fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev                                                 unsigned Type) {
1124fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev  switch (Kind) {
1134fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev  case OMPC_default:
1144fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev    switch (Type) {
1154fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev    case OMPC_DEFAULT_unknown:
1164fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev      return "unknown";
117ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#define OPENMP_DEFAULT_KIND(Name)                                              \
118ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  case OMPC_DEFAULT_##Name:                                                    \
119ef8225444452a1486bd721f3285301fe84643b00Stephen Hines    return #Name;
1204fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev#include "clang/Basic/OpenMPKinds.def"
1214fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev    }
1224fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev    llvm_unreachable("Invalid OpenMP 'default' clause type");
1236bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  case OMPC_proc_bind:
1246bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines    switch (Type) {
1256bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines    case OMPC_PROC_BIND_unknown:
1266bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines      return "unknown";
127ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#define OPENMP_PROC_BIND_KIND(Name)                                            \
128ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  case OMPC_PROC_BIND_##Name:                                                  \
129ef8225444452a1486bd721f3285301fe84643b00Stephen Hines    return #Name;
1306bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#include "clang/Basic/OpenMPKinds.def"
1316bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines    }
1326bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines    llvm_unreachable("Invalid OpenMP 'proc_bind' clause type");
133ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  case OMPC_schedule:
134ef8225444452a1486bd721f3285301fe84643b00Stephen Hines    switch (Type) {
135ef8225444452a1486bd721f3285301fe84643b00Stephen Hines    case OMPC_SCHEDULE_unknown:
136ef8225444452a1486bd721f3285301fe84643b00Stephen Hines      return "unknown";
137ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#define OPENMP_SCHEDULE_KIND(Name)                                             \
138ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  case OMPC_SCHEDULE_##Name:                                                   \
139ef8225444452a1486bd721f3285301fe84643b00Stephen Hines    return #Name;
140ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#include "clang/Basic/OpenMPKinds.def"
141ef8225444452a1486bd721f3285301fe84643b00Stephen Hines    }
142ef8225444452a1486bd721f3285301fe84643b00Stephen Hines    llvm_unreachable("Invalid OpenMP 'schedule' clause type");
1434fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev  case OMPC_unknown:
1444fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev  case OMPC_threadprivate:
145651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  case OMPC_if:
146651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  case OMPC_num_threads:
147651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  case OMPC_safelen:
1486bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  case OMPC_collapse:
1494fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev  case OMPC_private:
150d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev  case OMPC_firstprivate:
151ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  case OMPC_lastprivate:
152325047fdb5770c97149a977b64ac6cce5c3be427David Blaikie  case OMPC_shared:
153ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  case OMPC_reduction:
1546bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  case OMPC_linear:
155ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  case OMPC_aligned:
156651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  case OMPC_copyin:
157ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  case OMPC_copyprivate:
158ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  case OMPC_ordered:
159ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  case OMPC_nowait:
1604fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev    break;
1614fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev  }
1624fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev  llvm_unreachable("Invalid OpenMP simple clause kind");
1634fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev}
1644fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev
1654fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataevbool clang::isAllowedClauseForDirective(OpenMPDirectiveKind DKind,
1664fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev                                        OpenMPClauseKind CKind) {
1676bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  assert(DKind <= OMPD_unknown);
1686bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  assert(CKind <= OMPC_unknown);
1694fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev  switch (DKind) {
1704fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev  case OMPD_parallel:
1714fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev    switch (CKind) {
172ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#define OPENMP_PARALLEL_CLAUSE(Name)                                           \
173ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  case OMPC_##Name:                                                            \
174ef8225444452a1486bd721f3285301fe84643b00Stephen Hines    return true;
1754fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev#include "clang/Basic/OpenMPKinds.def"
1764fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev    default:
1774fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev      break;
1784fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev    }
1794fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev    break;
180651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  case OMPD_simd:
181651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines    switch (CKind) {
182ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#define OPENMP_SIMD_CLAUSE(Name)                                               \
183ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  case OMPC_##Name:                                                            \
184ef8225444452a1486bd721f3285301fe84643b00Stephen Hines    return true;
185ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#include "clang/Basic/OpenMPKinds.def"
186ef8225444452a1486bd721f3285301fe84643b00Stephen Hines    default:
187ef8225444452a1486bd721f3285301fe84643b00Stephen Hines      break;
188ef8225444452a1486bd721f3285301fe84643b00Stephen Hines    }
189ef8225444452a1486bd721f3285301fe84643b00Stephen Hines    break;
190ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  case OMPD_for:
191ef8225444452a1486bd721f3285301fe84643b00Stephen Hines    switch (CKind) {
192ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#define OPENMP_FOR_CLAUSE(Name)                                                \
193ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  case OMPC_##Name:                                                            \
194ef8225444452a1486bd721f3285301fe84643b00Stephen Hines    return true;
195ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#include "clang/Basic/OpenMPKinds.def"
196ef8225444452a1486bd721f3285301fe84643b00Stephen Hines    default:
197ef8225444452a1486bd721f3285301fe84643b00Stephen Hines      break;
198ef8225444452a1486bd721f3285301fe84643b00Stephen Hines    }
199ef8225444452a1486bd721f3285301fe84643b00Stephen Hines    break;
200ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  case OMPD_sections:
201ef8225444452a1486bd721f3285301fe84643b00Stephen Hines    switch (CKind) {
202ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#define OPENMP_SECTIONS_CLAUSE(Name)                                           \
203ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  case OMPC_##Name:                                                            \
204ef8225444452a1486bd721f3285301fe84643b00Stephen Hines    return true;
205ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#include "clang/Basic/OpenMPKinds.def"
206ef8225444452a1486bd721f3285301fe84643b00Stephen Hines    default:
207ef8225444452a1486bd721f3285301fe84643b00Stephen Hines      break;
208ef8225444452a1486bd721f3285301fe84643b00Stephen Hines    }
209ef8225444452a1486bd721f3285301fe84643b00Stephen Hines    break;
210ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  case OMPD_single:
211ef8225444452a1486bd721f3285301fe84643b00Stephen Hines    switch (CKind) {
212ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#define OPENMP_SINGLE_CLAUSE(Name)                                             \
213ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  case OMPC_##Name:                                                            \
214ef8225444452a1486bd721f3285301fe84643b00Stephen Hines    return true;
215ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#include "clang/Basic/OpenMPKinds.def"
216ef8225444452a1486bd721f3285301fe84643b00Stephen Hines    default:
217ef8225444452a1486bd721f3285301fe84643b00Stephen Hines      break;
218ef8225444452a1486bd721f3285301fe84643b00Stephen Hines    }
219ef8225444452a1486bd721f3285301fe84643b00Stephen Hines    break;
220ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  case OMPD_parallel_for:
221ef8225444452a1486bd721f3285301fe84643b00Stephen Hines    switch (CKind) {
222ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#define OPENMP_PARALLEL_FOR_CLAUSE(Name)                                       \
223ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  case OMPC_##Name:                                                            \
224ef8225444452a1486bd721f3285301fe84643b00Stephen Hines    return true;
225ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#include "clang/Basic/OpenMPKinds.def"
226ef8225444452a1486bd721f3285301fe84643b00Stephen Hines    default:
227ef8225444452a1486bd721f3285301fe84643b00Stephen Hines      break;
228ef8225444452a1486bd721f3285301fe84643b00Stephen Hines    }
229ef8225444452a1486bd721f3285301fe84643b00Stephen Hines    break;
230ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  case OMPD_parallel_sections:
231ef8225444452a1486bd721f3285301fe84643b00Stephen Hines    switch (CKind) {
232ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#define OPENMP_PARALLEL_SECTIONS_CLAUSE(Name)                                  \
233ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  case OMPC_##Name:                                                            \
234ef8225444452a1486bd721f3285301fe84643b00Stephen Hines    return true;
235651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#include "clang/Basic/OpenMPKinds.def"
236651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines    default:
237651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines      break;
238651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines    }
239651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines    break;
2404fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev  case OMPD_unknown:
2414fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev  case OMPD_threadprivate:
2424fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev  case OMPD_task:
243ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  case OMPD_section:
2444fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev    break;
2454fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev  }
2464fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev  return false;
2474fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev}
248ef8225444452a1486bd721f3285301fe84643b00Stephen Hines
249ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesbool clang::isOpenMPLoopDirective(OpenMPDirectiveKind DKind) {
250ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  return DKind == OMPD_simd || DKind == OMPD_for ||
251ef8225444452a1486bd721f3285301fe84643b00Stephen Hines         DKind == OMPD_parallel_for; // TODO add next directives.
252ef8225444452a1486bd721f3285301fe84643b00Stephen Hines}
253ef8225444452a1486bd721f3285301fe84643b00Stephen Hines
254ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesbool clang::isOpenMPWorksharingDirective(OpenMPDirectiveKind DKind) {
255ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  return DKind == OMPD_for || DKind == OMPD_sections || DKind == OMPD_section ||
256ef8225444452a1486bd721f3285301fe84643b00Stephen Hines         DKind == OMPD_single || DKind == OMPD_parallel_for ||
257ef8225444452a1486bd721f3285301fe84643b00Stephen Hines         DKind == OMPD_parallel_sections; // TODO add next directives.
258ef8225444452a1486bd721f3285301fe84643b00Stephen Hines}
259ef8225444452a1486bd721f3285301fe84643b00Stephen Hines
260ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesbool clang::isOpenMPParallelDirective(OpenMPDirectiveKind DKind) {
261ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  return DKind == OMPD_parallel || DKind == OMPD_parallel_for ||
262ef8225444452a1486bd721f3285301fe84643b00Stephen Hines         DKind == OMPD_parallel_sections; // TODO add next directives.
263ef8225444452a1486bd721f3285301fe84643b00Stephen Hines}
264ef8225444452a1486bd721f3285301fe84643b00Stephen Hines
265ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesbool clang::isOpenMPSimdDirective(OpenMPDirectiveKind DKind) {
266ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  return DKind == OMPD_simd; // TODO || DKind == OMPD_for_simd || ...
267ef8225444452a1486bd721f3285301fe84643b00Stephen Hines}
268ef8225444452a1486bd721f3285301fe84643b00Stephen Hines
269ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesbool clang::isOpenMPPrivate(OpenMPClauseKind Kind) {
270ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  return Kind == OMPC_private || Kind == OMPC_firstprivate ||
271ef8225444452a1486bd721f3285301fe84643b00Stephen Hines         Kind == OMPC_lastprivate || Kind == OMPC_linear ||
272ef8225444452a1486bd721f3285301fe84643b00Stephen Hines         Kind == OMPC_reduction; // TODO add next clauses like 'reduction'.
273ef8225444452a1486bd721f3285301fe84643b00Stephen Hines}
274ef8225444452a1486bd721f3285301fe84643b00Stephen Hines
275ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesbool clang::isOpenMPThreadPrivate(OpenMPClauseKind Kind) {
276ef8225444452a1486bd721f3285301fe84643b00Stephen Hines  return Kind == OMPC_threadprivate ||
277ef8225444452a1486bd721f3285301fe84643b00Stephen Hines         Kind == OMPC_copyin; // TODO add next clauses like 'copyprivate'.
278ef8225444452a1486bd721f3285301fe84643b00Stephen Hines}
279ef8225444452a1486bd721f3285301fe84643b00Stephen Hines
280