blob: c075deb01a18bc9189fd7eb6ffa3feae578dbf74 [file] [log] [blame]
Alexey Bataeva769e072013-03-22 06:34:35 +00001//===--- OpenMPKinds.cpp - Token Kinds Support ----------------------------===//
2//
Chandler Carruth2946cd72019-01-19 08:50:56 +00003// 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
Alexey Bataeva769e072013-03-22 06:34:35 +00006//
7//===----------------------------------------------------------------------===//
8/// \file
Adrian Prantl9fc8faf2018-05-09 01:00:01 +00009/// This file implements the OpenMP enum and support functions.
Alexey Bataeva769e072013-03-22 06:34:35 +000010///
11//===----------------------------------------------------------------------===//
12
13#include "clang/Basic/OpenMPKinds.h"
14#include "clang/Basic/IdentifierTable.h"
Matt Beaumont-Gay07544fa2013-03-25 21:32:02 +000015#include "llvm/ADT/StringRef.h"
Alexey Bataeva769e072013-03-22 06:34:35 +000016#include "llvm/ADT/StringSwitch.h"
17#include "llvm/Support/ErrorHandling.h"
18#include <cassert>
19
20using namespace clang;
21
Alexey Bataevfde11e92019-11-07 11:03:10 -050022OpenMPContextSelectorSetKind
23clang::getOpenMPContextSelectorSet(llvm::StringRef Str) {
24 return llvm::StringSwitch<OpenMPContextSelectorSetKind>(Str)
25#define OPENMP_CONTEXT_SELECTOR_SET(Name) .Case(#Name, OMP_CTX_SET_##Name)
26#include "clang/Basic/OpenMPKinds.def"
27 .Default(OMP_CTX_SET_unknown);
28}
29
30llvm::StringRef
31clang::getOpenMPContextSelectorSetName(OpenMPContextSelectorSetKind Kind) {
32 switch (Kind) {
33 case OMP_CTX_SET_unknown:
34 return "unknown";
35#define OPENMP_CONTEXT_SELECTOR_SET(Name) \
36 case OMP_CTX_SET_##Name: \
37 return #Name;
38#include "clang/Basic/OpenMPKinds.def"
39 break;
40 }
41 llvm_unreachable("Invalid OpenMP context selector set kind");
42}
43
44OpenMPContextSelectorKind clang::getOpenMPContextSelector(llvm::StringRef Str) {
45 return llvm::StringSwitch<OpenMPContextSelectorKind>(Str)
46#define OPENMP_CONTEXT_SELECTOR(Name) .Case(#Name, OMP_CTX_##Name)
47#include "clang/Basic/OpenMPKinds.def"
48 .Default(OMP_CTX_unknown);
49}
50
51llvm::StringRef
52clang::getOpenMPContextSelectorName(OpenMPContextSelectorKind Kind) {
53 switch (Kind) {
54 case OMP_CTX_unknown:
55 return "unknown";
56#define OPENMP_CONTEXT_SELECTOR(Name) \
57 case OMP_CTX_##Name: \
58 return #Name;
59#include "clang/Basic/OpenMPKinds.def"
60 break;
61 }
62 llvm_unreachable("Invalid OpenMP context selector kind");
63}
64
Alexey Bataeva769e072013-03-22 06:34:35 +000065OpenMPDirectiveKind clang::getOpenMPDirectiveKind(StringRef Str) {
66 return llvm::StringSwitch<OpenMPDirectiveKind>(Str)
Alexey Bataev23b69422014-06-18 07:08:49 +000067#define OPENMP_DIRECTIVE(Name) .Case(#Name, OMPD_##Name)
Alexey Bataev4acb8592014-07-07 13:01:15 +000068#define OPENMP_DIRECTIVE_EXT(Name, Str) .Case(Str, OMPD_##Name)
Alexey Bataeva769e072013-03-22 06:34:35 +000069#include "clang/Basic/OpenMPKinds.def"
Alexey Bataev23b69422014-06-18 07:08:49 +000070 .Default(OMPD_unknown);
Alexey Bataeva769e072013-03-22 06:34:35 +000071}
72
73const char *clang::getOpenMPDirectiveName(OpenMPDirectiveKind Kind) {
Alexey Bataev4ca40ed2014-05-12 04:23:46 +000074 assert(Kind <= OMPD_unknown);
Alexey Bataeva769e072013-03-22 06:34:35 +000075 switch (Kind) {
76 case OMPD_unknown:
Alexey Bataev6f6f3b42013-05-13 04:18:18 +000077 return "unknown";
Alexey Bataev23b69422014-06-18 07:08:49 +000078#define OPENMP_DIRECTIVE(Name) \
79 case OMPD_##Name: \
80 return #Name;
Alexey Bataev4acb8592014-07-07 13:01:15 +000081#define OPENMP_DIRECTIVE_EXT(Name, Str) \
82 case OMPD_##Name: \
83 return Str;
Alexey Bataeva769e072013-03-22 06:34:35 +000084#include "clang/Basic/OpenMPKinds.def"
Alexey Bataeva769e072013-03-22 06:34:35 +000085 break;
86 }
87 llvm_unreachable("Invalid OpenMP directive kind");
88}
Alexey Bataev6f6f3b42013-05-13 04:18:18 +000089
Alexey Bataev5ec3eb12013-07-19 03:13:43 +000090OpenMPClauseKind clang::getOpenMPClauseKind(StringRef Str) {
Alexey Bataev2b5f3f02014-07-29 09:17:39 +000091 // 'flush' clause cannot be specified explicitly, because this is an implicit
92 // clause for 'flush' directive. If the 'flush' clause is explicitly specified
93 // the Parser should generate a warning about extra tokens at the end of the
94 // directive.
Alexey Bataev6125da92014-07-21 11:26:11 +000095 if (Str == "flush")
96 return OMPC_unknown;
Alexey Bataev5ec3eb12013-07-19 03:13:43 +000097 return llvm::StringSwitch<OpenMPClauseKind>(Str)
Alexey Bataev23b69422014-06-18 07:08:49 +000098#define OPENMP_CLAUSE(Name, Class) .Case(#Name, OMPC_##Name)
Alexey Bataev5ec3eb12013-07-19 03:13:43 +000099#include "clang/Basic/OpenMPKinds.def"
Alexey Bataeve48a5fc2016-04-12 05:28:34 +0000100 .Case("uniform", OMPC_uniform)
Alexey Bataev729e2422019-08-23 16:11:14 +0000101 .Case("device_type", OMPC_device_type)
Alexey Bataevdba792c2019-09-23 18:13:31 +0000102 .Case("match", OMPC_match)
Alexey Bataev23b69422014-06-18 07:08:49 +0000103 .Default(OMPC_unknown);
Alexey Bataev5ec3eb12013-07-19 03:13:43 +0000104}
105
106const char *clang::getOpenMPClauseName(OpenMPClauseKind Kind) {
Alexey Bataev4ca40ed2014-05-12 04:23:46 +0000107 assert(Kind <= OMPC_unknown);
Alexey Bataev5ec3eb12013-07-19 03:13:43 +0000108 switch (Kind) {
109 case OMPC_unknown:
110 return "unknown";
Alexey Bataev23b69422014-06-18 07:08:49 +0000111#define OPENMP_CLAUSE(Name, Class) \
112 case OMPC_##Name: \
113 return #Name;
Alexey Bataev5ec3eb12013-07-19 03:13:43 +0000114#include "clang/Basic/OpenMPKinds.def"
Alexey Bataeve48a5fc2016-04-12 05:28:34 +0000115 case OMPC_uniform:
116 return "uniform";
Alexey Bataev5ec3eb12013-07-19 03:13:43 +0000117 case OMPC_threadprivate:
118 return "threadprivate or thread local";
Alexey Bataev729e2422019-08-23 16:11:14 +0000119 case OMPC_device_type:
120 return "device_type";
Alexey Bataevdba792c2019-09-23 18:13:31 +0000121 case OMPC_match:
122 return "match";
Alexey Bataev5ec3eb12013-07-19 03:13:43 +0000123 }
124 llvm_unreachable("Invalid OpenMP clause kind");
125}
126
127unsigned clang::getOpenMPSimpleClauseType(OpenMPClauseKind Kind,
128 StringRef Str) {
129 switch (Kind) {
130 case OMPC_default:
131 return llvm::StringSwitch<OpenMPDefaultClauseKind>(Str)
Alexey Bataev23b69422014-06-18 07:08:49 +0000132#define OPENMP_DEFAULT_KIND(Name) .Case(#Name, OMPC_DEFAULT_##Name)
Alexey Bataev5ec3eb12013-07-19 03:13:43 +0000133#include "clang/Basic/OpenMPKinds.def"
Alexey Bataev23b69422014-06-18 07:08:49 +0000134 .Default(OMPC_DEFAULT_unknown);
Alexey Bataevbcbadb62014-05-06 06:04:14 +0000135 case OMPC_proc_bind:
136 return llvm::StringSwitch<OpenMPProcBindClauseKind>(Str)
Alexey Bataev23b69422014-06-18 07:08:49 +0000137#define OPENMP_PROC_BIND_KIND(Name) .Case(#Name, OMPC_PROC_BIND_##Name)
Alexey Bataevbcbadb62014-05-06 06:04:14 +0000138#include "clang/Basic/OpenMPKinds.def"
Alexey Bataev23b69422014-06-18 07:08:49 +0000139 .Default(OMPC_PROC_BIND_unknown);
Alexey Bataev56dafe82014-06-20 07:16:17 +0000140 case OMPC_schedule:
Alexey Bataev6402bca2015-12-28 07:25:51 +0000141 return llvm::StringSwitch<unsigned>(Str)
142#define OPENMP_SCHEDULE_KIND(Name) \
143 .Case(#Name, static_cast<unsigned>(OMPC_SCHEDULE_##Name))
144#define OPENMP_SCHEDULE_MODIFIER(Name) \
145 .Case(#Name, static_cast<unsigned>(OMPC_SCHEDULE_MODIFIER_##Name))
Alexey Bataev56dafe82014-06-20 07:16:17 +0000146#include "clang/Basic/OpenMPKinds.def"
147 .Default(OMPC_SCHEDULE_unknown);
Alexey Bataev1c2cfbc2015-06-23 14:25:19 +0000148 case OMPC_depend:
149 return llvm::StringSwitch<OpenMPDependClauseKind>(Str)
150#define OPENMP_DEPEND_KIND(Name) .Case(#Name, OMPC_DEPEND_##Name)
151#include "clang/Basic/OpenMPKinds.def"
152 .Default(OMPC_DEPEND_unknown);
Alexey Bataev182227b2015-08-20 10:54:39 +0000153 case OMPC_linear:
154 return llvm::StringSwitch<OpenMPLinearClauseKind>(Str)
155#define OPENMP_LINEAR_KIND(Name) .Case(#Name, OMPC_LINEAR_##Name)
156#include "clang/Basic/OpenMPKinds.def"
157 .Default(OMPC_LINEAR_unknown);
Kelvin Li0bff7af2015-11-23 05:32:03 +0000158 case OMPC_map:
Kelvin Lief579432018-12-18 22:18:41 +0000159 return llvm::StringSwitch<unsigned>(Str)
160#define OPENMP_MAP_KIND(Name) \
161 .Case(#Name, static_cast<unsigned>(OMPC_MAP_##Name))
162#define OPENMP_MAP_MODIFIER_KIND(Name) \
163 .Case(#Name, static_cast<unsigned>(OMPC_MAP_MODIFIER_##Name))
Kelvin Li0bff7af2015-11-23 05:32:03 +0000164#include "clang/Basic/OpenMPKinds.def"
165 .Default(OMPC_MAP_unknown);
Michael Kruse01f670d2019-02-22 22:29:42 +0000166 case OMPC_to:
167 return llvm::StringSwitch<unsigned>(Str)
168#define OPENMP_TO_MODIFIER_KIND(Name) \
169 .Case(#Name, static_cast<unsigned>(OMPC_TO_MODIFIER_##Name))
170#include "clang/Basic/OpenMPKinds.def"
171 .Default(OMPC_TO_MODIFIER_unknown);
Michael Kruse0336c752019-02-25 20:34:15 +0000172 case OMPC_from:
173 return llvm::StringSwitch<unsigned>(Str)
174#define OPENMP_FROM_MODIFIER_KIND(Name) \
175 .Case(#Name, static_cast<unsigned>(OMPC_FROM_MODIFIER_##Name))
176#include "clang/Basic/OpenMPKinds.def"
177 .Default(OMPC_FROM_MODIFIER_unknown);
Carlo Bertollib4adf552016-01-15 18:50:31 +0000178 case OMPC_dist_schedule:
179 return llvm::StringSwitch<OpenMPDistScheduleClauseKind>(Str)
180#define OPENMP_DIST_SCHEDULE_KIND(Name) .Case(#Name, OMPC_DIST_SCHEDULE_##Name)
181#include "clang/Basic/OpenMPKinds.def"
182 .Default(OMPC_DIST_SCHEDULE_unknown);
Arpith Chacko Jacob3cf89042016-01-26 16:37:23 +0000183 case OMPC_defaultmap:
184 return llvm::StringSwitch<unsigned>(Str)
185#define OPENMP_DEFAULTMAP_KIND(Name) \
186 .Case(#Name, static_cast<unsigned>(OMPC_DEFAULTMAP_##Name))
187#define OPENMP_DEFAULTMAP_MODIFIER(Name) \
188 .Case(#Name, static_cast<unsigned>(OMPC_DEFAULTMAP_MODIFIER_##Name))
189#include "clang/Basic/OpenMPKinds.def"
190 .Default(OMPC_DEFAULTMAP_unknown);
Patrick Lyster7a2a27c2018-11-02 12:18:11 +0000191 case OMPC_atomic_default_mem_order:
192 return llvm::StringSwitch<OpenMPAtomicDefaultMemOrderClauseKind>(Str)
193#define OPENMP_ATOMIC_DEFAULT_MEM_ORDER_KIND(Name) \
194 .Case(#Name, OMPC_ATOMIC_DEFAULT_MEM_ORDER_##Name)
195#include "clang/Basic/OpenMPKinds.def"
196 .Default(OMPC_ATOMIC_DEFAULT_MEM_ORDER_unknown);
Alexey Bataev729e2422019-08-23 16:11:14 +0000197 case OMPC_device_type:
198 return llvm::StringSwitch<OpenMPDeviceType>(Str)
199#define OPENMP_DEVICE_TYPE_KIND(Name) .Case(#Name, OMPC_DEVICE_TYPE_##Name)
200#include "clang/Basic/OpenMPKinds.def"
201 .Default(OMPC_DEVICE_TYPE_unknown);
Alexey Bataev5ec3eb12013-07-19 03:13:43 +0000202 case OMPC_unknown:
203 case OMPC_threadprivate:
Alexey Bataevaadd52e2014-02-13 05:29:23 +0000204 case OMPC_if:
Alexey Bataev3778b602014-07-17 07:32:53 +0000205 case OMPC_final:
Alexey Bataev568a8332014-03-06 06:15:19 +0000206 case OMPC_num_threads:
Alexey Bataev62c87d22014-03-21 04:51:18 +0000207 case OMPC_safelen:
Alexey Bataev66b15b52015-08-21 11:14:16 +0000208 case OMPC_simdlen:
Alexey Bataev9cc10fc2019-03-12 18:52:33 +0000209 case OMPC_allocator:
Alexey Bataeve04483e2019-03-27 14:14:31 +0000210 case OMPC_allocate:
Alexander Musman8bd31e62014-05-27 15:12:19 +0000211 case OMPC_collapse:
Alexey Bataev5ec3eb12013-07-19 03:13:43 +0000212 case OMPC_private:
Alexey Bataevd5af8e42013-10-01 05:32:34 +0000213 case OMPC_firstprivate:
Alexander Musman1bb328c2014-06-04 13:06:39 +0000214 case OMPC_lastprivate:
David Blaikie3e8aa9a2013-09-06 20:58:25 +0000215 case OMPC_shared:
Alexey Bataevc5e02582014-06-16 07:08:35 +0000216 case OMPC_reduction:
Alexey Bataev169d96a2017-07-18 20:17:46 +0000217 case OMPC_task_reduction:
Alexey Bataevfa312f32017-07-21 18:48:21 +0000218 case OMPC_in_reduction:
Alexander Musmanf0d76e72014-05-29 14:36:25 +0000219 case OMPC_aligned:
Alexey Bataevd48bcd82014-03-31 03:36:38 +0000220 case OMPC_copyin:
Alexey Bataevbae9a792014-06-27 10:37:06 +0000221 case OMPC_copyprivate:
Alexey Bataev142e1fc2014-06-20 09:44:06 +0000222 case OMPC_ordered:
Alexey Bataev236070f2014-06-20 11:19:47 +0000223 case OMPC_nowait:
Alexey Bataev7aea99a2014-07-17 12:19:31 +0000224 case OMPC_untied:
Alexey Bataev74ba3a52014-07-17 12:47:03 +0000225 case OMPC_mergeable:
Alexey Bataev6125da92014-07-21 11:26:11 +0000226 case OMPC_flush:
Alexey Bataevf98b00c2014-07-23 02:27:21 +0000227 case OMPC_read:
Alexey Bataevdea47612014-07-23 07:46:59 +0000228 case OMPC_write:
Alexey Bataev67a4f222014-07-23 10:25:33 +0000229 case OMPC_update:
Alexey Bataev459dec02014-07-24 06:46:57 +0000230 case OMPC_capture:
Alexey Bataev82bad8b2014-07-24 08:55:34 +0000231 case OMPC_seq_cst:
Michael Wonge710d542015-08-07 16:16:36 +0000232 case OMPC_device:
Alexey Bataev346265e2015-09-25 10:37:12 +0000233 case OMPC_threads:
Alexey Bataevd14d1e62015-09-28 06:39:35 +0000234 case OMPC_simd:
Kelvin Li099bb8c2015-11-24 20:50:12 +0000235 case OMPC_num_teams:
Kelvin Lia15fb1a2015-11-27 18:47:36 +0000236 case OMPC_thread_limit:
Alexey Bataeva0569352015-12-01 10:17:31 +0000237 case OMPC_priority:
Alexey Bataev1fd4aed2015-12-07 12:52:51 +0000238 case OMPC_grainsize:
Alexey Bataevb825de12015-12-07 10:51:44 +0000239 case OMPC_nogroup:
Alexey Bataev382967a2015-12-08 12:06:20 +0000240 case OMPC_num_tasks:
Alexey Bataev28c75412015-12-15 08:19:24 +0000241 case OMPC_hint:
Alexey Bataeve48a5fc2016-04-12 05:28:34 +0000242 case OMPC_uniform:
Carlo Bertolli2404b172016-07-13 15:37:16 +0000243 case OMPC_use_device_ptr:
Carlo Bertolli70594e92016-07-13 17:16:49 +0000244 case OMPC_is_device_ptr:
Kelvin Li1408f912018-09-26 04:28:39 +0000245 case OMPC_unified_address:
Patrick Lyster4a370b92018-10-01 13:47:43 +0000246 case OMPC_unified_shared_memory:
Patrick Lyster6bdf63b2018-10-03 20:07:58 +0000247 case OMPC_reverse_offload:
Patrick Lyster3fe9e392018-10-11 14:41:10 +0000248 case OMPC_dynamic_allocators:
Alexey Bataevdba792c2019-09-23 18:13:31 +0000249 case OMPC_match:
Alexey Bataev5ec3eb12013-07-19 03:13:43 +0000250 break;
251 }
252 llvm_unreachable("Invalid OpenMP simple clause kind");
253}
254
255const char *clang::getOpenMPSimpleClauseTypeName(OpenMPClauseKind Kind,
256 unsigned Type) {
257 switch (Kind) {
258 case OMPC_default:
259 switch (Type) {
260 case OMPC_DEFAULT_unknown:
261 return "unknown";
Alexey Bataev23b69422014-06-18 07:08:49 +0000262#define OPENMP_DEFAULT_KIND(Name) \
263 case OMPC_DEFAULT_##Name: \
264 return #Name;
Alexey Bataev5ec3eb12013-07-19 03:13:43 +0000265#include "clang/Basic/OpenMPKinds.def"
266 }
267 llvm_unreachable("Invalid OpenMP 'default' clause type");
Alexey Bataevbcbadb62014-05-06 06:04:14 +0000268 case OMPC_proc_bind:
269 switch (Type) {
270 case OMPC_PROC_BIND_unknown:
271 return "unknown";
Alexey Bataev23b69422014-06-18 07:08:49 +0000272#define OPENMP_PROC_BIND_KIND(Name) \
273 case OMPC_PROC_BIND_##Name: \
274 return #Name;
Alexey Bataevbcbadb62014-05-06 06:04:14 +0000275#include "clang/Basic/OpenMPKinds.def"
276 }
277 llvm_unreachable("Invalid OpenMP 'proc_bind' clause type");
Alexey Bataev56dafe82014-06-20 07:16:17 +0000278 case OMPC_schedule:
279 switch (Type) {
280 case OMPC_SCHEDULE_unknown:
Alexey Bataev6402bca2015-12-28 07:25:51 +0000281 case OMPC_SCHEDULE_MODIFIER_last:
Alexey Bataev56dafe82014-06-20 07:16:17 +0000282 return "unknown";
283#define OPENMP_SCHEDULE_KIND(Name) \
Alexey Bataev6402bca2015-12-28 07:25:51 +0000284 case OMPC_SCHEDULE_##Name: \
285 return #Name;
286#define OPENMP_SCHEDULE_MODIFIER(Name) \
287 case OMPC_SCHEDULE_MODIFIER_##Name: \
288 return #Name;
Alexey Bataev56dafe82014-06-20 07:16:17 +0000289#include "clang/Basic/OpenMPKinds.def"
290 }
Alexey Bataev6402bca2015-12-28 07:25:51 +0000291 llvm_unreachable("Invalid OpenMP 'schedule' clause type");
Alexey Bataev1c2cfbc2015-06-23 14:25:19 +0000292 case OMPC_depend:
293 switch (Type) {
294 case OMPC_DEPEND_unknown:
295 return "unknown";
296#define OPENMP_DEPEND_KIND(Name) \
297 case OMPC_DEPEND_##Name: \
298 return #Name;
299#include "clang/Basic/OpenMPKinds.def"
300 }
Alexey Bataev6402bca2015-12-28 07:25:51 +0000301 llvm_unreachable("Invalid OpenMP 'depend' clause type");
Alexey Bataev182227b2015-08-20 10:54:39 +0000302 case OMPC_linear:
303 switch (Type) {
304 case OMPC_LINEAR_unknown:
305 return "unknown";
306#define OPENMP_LINEAR_KIND(Name) \
307 case OMPC_LINEAR_##Name: \
308 return #Name;
309#include "clang/Basic/OpenMPKinds.def"
310 }
311 llvm_unreachable("Invalid OpenMP 'linear' clause type");
Kelvin Li0bff7af2015-11-23 05:32:03 +0000312 case OMPC_map:
313 switch (Type) {
314 case OMPC_MAP_unknown:
Kelvin Lief579432018-12-18 22:18:41 +0000315 case OMPC_MAP_MODIFIER_last:
Kelvin Li0bff7af2015-11-23 05:32:03 +0000316 return "unknown";
317#define OPENMP_MAP_KIND(Name) \
318 case OMPC_MAP_##Name: \
319 return #Name;
Kelvin Lief579432018-12-18 22:18:41 +0000320#define OPENMP_MAP_MODIFIER_KIND(Name) \
321 case OMPC_MAP_MODIFIER_##Name: \
322 return #Name;
Kelvin Li0bff7af2015-11-23 05:32:03 +0000323#include "clang/Basic/OpenMPKinds.def"
324 default:
325 break;
326 }
327 llvm_unreachable("Invalid OpenMP 'map' clause type");
Michael Kruse01f670d2019-02-22 22:29:42 +0000328 case OMPC_to:
329 switch (Type) {
330 case OMPC_TO_MODIFIER_unknown:
331 return "unknown";
332#define OPENMP_TO_MODIFIER_KIND(Name) \
333 case OMPC_TO_MODIFIER_##Name: \
334 return #Name;
335#include "clang/Basic/OpenMPKinds.def"
336 default:
337 break;
338 }
339 llvm_unreachable("Invalid OpenMP 'to' clause type");
Michael Kruse0336c752019-02-25 20:34:15 +0000340 case OMPC_from:
341 switch (Type) {
342 case OMPC_FROM_MODIFIER_unknown:
343 return "unknown";
344#define OPENMP_FROM_MODIFIER_KIND(Name) \
345 case OMPC_FROM_MODIFIER_##Name: \
346 return #Name;
347#include "clang/Basic/OpenMPKinds.def"
348 default:
349 break;
350 }
351 llvm_unreachable("Invalid OpenMP 'from' clause type");
Carlo Bertollib4adf552016-01-15 18:50:31 +0000352 case OMPC_dist_schedule:
353 switch (Type) {
354 case OMPC_DIST_SCHEDULE_unknown:
355 return "unknown";
356#define OPENMP_DIST_SCHEDULE_KIND(Name) \
357 case OMPC_DIST_SCHEDULE_##Name: \
358 return #Name;
359#include "clang/Basic/OpenMPKinds.def"
360 }
361 llvm_unreachable("Invalid OpenMP 'dist_schedule' clause type");
Arpith Chacko Jacob3cf89042016-01-26 16:37:23 +0000362 case OMPC_defaultmap:
363 switch (Type) {
364 case OMPC_DEFAULTMAP_unknown:
365 case OMPC_DEFAULTMAP_MODIFIER_last:
366 return "unknown";
367#define OPENMP_DEFAULTMAP_KIND(Name) \
368 case OMPC_DEFAULTMAP_##Name: \
369 return #Name;
370#define OPENMP_DEFAULTMAP_MODIFIER(Name) \
371 case OMPC_DEFAULTMAP_MODIFIER_##Name: \
372 return #Name;
373#include "clang/Basic/OpenMPKinds.def"
374 }
375 llvm_unreachable("Invalid OpenMP 'schedule' clause type");
Patrick Lyster7a2a27c2018-11-02 12:18:11 +0000376 case OMPC_atomic_default_mem_order:
377 switch (Type) {
378 case OMPC_ATOMIC_DEFAULT_MEM_ORDER_unknown:
379 return "unknown";
380#define OPENMP_ATOMIC_DEFAULT_MEM_ORDER_KIND(Name) \
381 case OMPC_ATOMIC_DEFAULT_MEM_ORDER_##Name: \
382 return #Name;
383#include "clang/Basic/OpenMPKinds.def"
384}
385 llvm_unreachable("Invalid OpenMP 'atomic_default_mem_order' clause type");
Alexey Bataev729e2422019-08-23 16:11:14 +0000386 case OMPC_device_type:
387 switch (Type) {
388 case OMPC_DEVICE_TYPE_unknown:
389 return "unknown";
390#define OPENMP_DEVICE_TYPE_KIND(Name) \
391 case OMPC_DEVICE_TYPE_##Name: \
392 return #Name;
393#include "clang/Basic/OpenMPKinds.def"
394 }
395 llvm_unreachable("Invalid OpenMP 'device_type' clause type");
Alexey Bataev5ec3eb12013-07-19 03:13:43 +0000396 case OMPC_unknown:
397 case OMPC_threadprivate:
Alexey Bataevaadd52e2014-02-13 05:29:23 +0000398 case OMPC_if:
Alexey Bataev3778b602014-07-17 07:32:53 +0000399 case OMPC_final:
Alexey Bataev568a8332014-03-06 06:15:19 +0000400 case OMPC_num_threads:
Alexey Bataev62c87d22014-03-21 04:51:18 +0000401 case OMPC_safelen:
Alexey Bataev66b15b52015-08-21 11:14:16 +0000402 case OMPC_simdlen:
Alexey Bataev9cc10fc2019-03-12 18:52:33 +0000403 case OMPC_allocator:
Alexey Bataeve04483e2019-03-27 14:14:31 +0000404 case OMPC_allocate:
Alexander Musman8bd31e62014-05-27 15:12:19 +0000405 case OMPC_collapse:
Alexey Bataev5ec3eb12013-07-19 03:13:43 +0000406 case OMPC_private:
Alexey Bataevd5af8e42013-10-01 05:32:34 +0000407 case OMPC_firstprivate:
Alexander Musman1bb328c2014-06-04 13:06:39 +0000408 case OMPC_lastprivate:
David Blaikie3e8aa9a2013-09-06 20:58:25 +0000409 case OMPC_shared:
Alexey Bataevc5e02582014-06-16 07:08:35 +0000410 case OMPC_reduction:
Alexey Bataev169d96a2017-07-18 20:17:46 +0000411 case OMPC_task_reduction:
Alexey Bataevfa312f32017-07-21 18:48:21 +0000412 case OMPC_in_reduction:
Alexander Musmanf0d76e72014-05-29 14:36:25 +0000413 case OMPC_aligned:
Alexey Bataevd48bcd82014-03-31 03:36:38 +0000414 case OMPC_copyin:
Alexey Bataevbae9a792014-06-27 10:37:06 +0000415 case OMPC_copyprivate:
Alexey Bataev142e1fc2014-06-20 09:44:06 +0000416 case OMPC_ordered:
Alexey Bataev236070f2014-06-20 11:19:47 +0000417 case OMPC_nowait:
Alexey Bataev7aea99a2014-07-17 12:19:31 +0000418 case OMPC_untied:
Alexey Bataev74ba3a52014-07-17 12:47:03 +0000419 case OMPC_mergeable:
Alexey Bataev6125da92014-07-21 11:26:11 +0000420 case OMPC_flush:
Alexey Bataevf98b00c2014-07-23 02:27:21 +0000421 case OMPC_read:
Alexey Bataevdea47612014-07-23 07:46:59 +0000422 case OMPC_write:
Alexey Bataev67a4f222014-07-23 10:25:33 +0000423 case OMPC_update:
Alexey Bataev459dec02014-07-24 06:46:57 +0000424 case OMPC_capture:
Alexey Bataev82bad8b2014-07-24 08:55:34 +0000425 case OMPC_seq_cst:
Michael Wonge710d542015-08-07 16:16:36 +0000426 case OMPC_device:
Alexey Bataev346265e2015-09-25 10:37:12 +0000427 case OMPC_threads:
Alexey Bataevd14d1e62015-09-28 06:39:35 +0000428 case OMPC_simd:
Kelvin Li099bb8c2015-11-24 20:50:12 +0000429 case OMPC_num_teams:
Kelvin Lia15fb1a2015-11-27 18:47:36 +0000430 case OMPC_thread_limit:
Alexey Bataeva0569352015-12-01 10:17:31 +0000431 case OMPC_priority:
Alexey Bataev1fd4aed2015-12-07 12:52:51 +0000432 case OMPC_grainsize:
Alexey Bataevb825de12015-12-07 10:51:44 +0000433 case OMPC_nogroup:
Alexey Bataev382967a2015-12-08 12:06:20 +0000434 case OMPC_num_tasks:
Alexey Bataev28c75412015-12-15 08:19:24 +0000435 case OMPC_hint:
Alexey Bataeve48a5fc2016-04-12 05:28:34 +0000436 case OMPC_uniform:
Carlo Bertolli2404b172016-07-13 15:37:16 +0000437 case OMPC_use_device_ptr:
Carlo Bertolli70594e92016-07-13 17:16:49 +0000438 case OMPC_is_device_ptr:
Kelvin Li1408f912018-09-26 04:28:39 +0000439 case OMPC_unified_address:
Patrick Lyster4a370b92018-10-01 13:47:43 +0000440 case OMPC_unified_shared_memory:
Patrick Lyster6bdf63b2018-10-03 20:07:58 +0000441 case OMPC_reverse_offload:
Patrick Lyster3fe9e392018-10-11 14:41:10 +0000442 case OMPC_dynamic_allocators:
Alexey Bataevdba792c2019-09-23 18:13:31 +0000443 case OMPC_match:
Alexey Bataev5ec3eb12013-07-19 03:13:43 +0000444 break;
445 }
446 llvm_unreachable("Invalid OpenMP simple clause kind");
447}
448
449bool clang::isAllowedClauseForDirective(OpenMPDirectiveKind DKind,
Alexey Bataevd08c0562019-11-19 12:07:54 -0500450 OpenMPClauseKind CKind,
451 unsigned OpenMPVersion) {
Alexey Bataev4ca40ed2014-05-12 04:23:46 +0000452 assert(DKind <= OMPD_unknown);
453 assert(CKind <= OMPC_unknown);
Alexey Bataev5ec3eb12013-07-19 03:13:43 +0000454 switch (DKind) {
455 case OMPD_parallel:
456 switch (CKind) {
Alexey Bataev23b69422014-06-18 07:08:49 +0000457#define OPENMP_PARALLEL_CLAUSE(Name) \
458 case OMPC_##Name: \
459 return true;
Alexey Bataev5ec3eb12013-07-19 03:13:43 +0000460#include "clang/Basic/OpenMPKinds.def"
461 default:
462 break;
463 }
464 break;
Alexey Bataev1b59ab52014-02-27 08:29:12 +0000465 case OMPD_simd:
Alexey Bataevd08c0562019-11-19 12:07:54 -0500466 if (OpenMPVersion < 50 && CKind == OMPC_if)
467 return false;
Alexey Bataev1b59ab52014-02-27 08:29:12 +0000468 switch (CKind) {
Alexey Bataev23b69422014-06-18 07:08:49 +0000469#define OPENMP_SIMD_CLAUSE(Name) \
470 case OMPC_##Name: \
471 return true;
Alexey Bataev1b59ab52014-02-27 08:29:12 +0000472#include "clang/Basic/OpenMPKinds.def"
473 default:
474 break;
475 }
476 break;
Alexey Bataevf29276e2014-06-18 04:14:57 +0000477 case OMPD_for:
478 switch (CKind) {
Alexey Bataev23b69422014-06-18 07:08:49 +0000479#define OPENMP_FOR_CLAUSE(Name) \
480 case OMPC_##Name: \
481 return true;
Alexey Bataevf29276e2014-06-18 04:14:57 +0000482#include "clang/Basic/OpenMPKinds.def"
483 default:
484 break;
485 }
486 break;
Alexander Musmanf82886e2014-09-18 05:12:34 +0000487 case OMPD_for_simd:
Alexey Bataev103f3c9e2019-11-20 15:59:03 -0500488 if (OpenMPVersion < 50 && CKind == OMPC_if)
489 return false;
Alexander Musmanf82886e2014-09-18 05:12:34 +0000490 switch (CKind) {
491#define OPENMP_FOR_SIMD_CLAUSE(Name) \
492 case OMPC_##Name: \
493 return true;
494#include "clang/Basic/OpenMPKinds.def"
495 default:
496 break;
497 }
498 break;
Alexey Bataevd3f8dd22014-06-25 11:44:49 +0000499 case OMPD_sections:
500 switch (CKind) {
Alexey Bataevbae9a792014-06-27 10:37:06 +0000501#define OPENMP_SECTIONS_CLAUSE(Name) \
Alexey Bataevd3f8dd22014-06-25 11:44:49 +0000502 case OMPC_##Name: \
503 return true;
504#include "clang/Basic/OpenMPKinds.def"
505 default:
506 break;
507 }
508 break;
Alexey Bataevd1e40fb2014-06-26 12:05:45 +0000509 case OMPD_single:
510 switch (CKind) {
Alexey Bataevbae9a792014-06-27 10:37:06 +0000511#define OPENMP_SINGLE_CLAUSE(Name) \
Alexey Bataevd1e40fb2014-06-26 12:05:45 +0000512 case OMPC_##Name: \
513 return true;
514#include "clang/Basic/OpenMPKinds.def"
515 default:
516 break;
517 }
518 break;
Alexey Bataev4acb8592014-07-07 13:01:15 +0000519 case OMPD_parallel_for:
520 switch (CKind) {
521#define OPENMP_PARALLEL_FOR_CLAUSE(Name) \
522 case OMPC_##Name: \
523 return true;
524#include "clang/Basic/OpenMPKinds.def"
525 default:
526 break;
527 }
528 break;
Alexander Musmane4e893b2014-09-23 09:33:00 +0000529 case OMPD_parallel_for_simd:
530 switch (CKind) {
531#define OPENMP_PARALLEL_FOR_SIMD_CLAUSE(Name) \
532 case OMPC_##Name: \
533 return true;
534#include "clang/Basic/OpenMPKinds.def"
535 default:
536 break;
537 }
538 break;
cchen47d60942019-12-05 13:43:48 -0500539 case OMPD_parallel_master:
540 switch (CKind) {
541#define OPENMP_PARALLEL_MASTER_CLAUSE(Name) \
542 case OMPC_##Name: \
543 return true;
544#include "clang/Basic/OpenMPKinds.def"
545 default:
546 break;
547 }
548 break;
Alexey Bataev84d0b3e2014-07-08 08:12:03 +0000549 case OMPD_parallel_sections:
550 switch (CKind) {
551#define OPENMP_PARALLEL_SECTIONS_CLAUSE(Name) \
552 case OMPC_##Name: \
553 return true;
554#include "clang/Basic/OpenMPKinds.def"
555 default:
556 break;
557 }
558 break;
Alexey Bataev9c2e8ee2014-07-11 11:25:16 +0000559 case OMPD_task:
560 switch (CKind) {
561#define OPENMP_TASK_CLAUSE(Name) \
562 case OMPC_##Name: \
563 return true;
564#include "clang/Basic/OpenMPKinds.def"
565 default:
566 break;
567 }
568 break;
Alexey Bataev6125da92014-07-21 11:26:11 +0000569 case OMPD_flush:
570 return CKind == OMPC_flush;
571 break;
Alexey Bataev0162e452014-07-22 10:10:35 +0000572 case OMPD_atomic:
573 switch (CKind) {
574#define OPENMP_ATOMIC_CLAUSE(Name) \
575 case OMPC_##Name: \
576 return true;
577#include "clang/Basic/OpenMPKinds.def"
578 default:
579 break;
580 }
581 break;
Alexey Bataev0bd520b2014-09-19 08:19:49 +0000582 case OMPD_target:
583 switch (CKind) {
584#define OPENMP_TARGET_CLAUSE(Name) \
585 case OMPC_##Name: \
586 return true;
587#include "clang/Basic/OpenMPKinds.def"
588 default:
589 break;
590 }
591 break;
Kelvin Li1408f912018-09-26 04:28:39 +0000592 case OMPD_requires:
593 switch (CKind) {
594#define OPENMP_REQUIRES_CLAUSE(Name) \
595 case OMPC_##Name: \
596 return true;
597#include "clang/Basic/OpenMPKinds.def"
598 default:
599 break;
600 }
601 break;
Michael Wong65f367f2015-07-21 13:44:28 +0000602 case OMPD_target_data:
603 switch (CKind) {
604#define OPENMP_TARGET_DATA_CLAUSE(Name) \
605 case OMPC_##Name: \
606 return true;
607#include "clang/Basic/OpenMPKinds.def"
608 default:
609 break;
610 }
611 break;
Samuel Antaodf67fc42016-01-19 19:15:56 +0000612 case OMPD_target_enter_data:
613 switch (CKind) {
614#define OPENMP_TARGET_ENTER_DATA_CLAUSE(Name) \
615 case OMPC_##Name: \
616 return true;
617#include "clang/Basic/OpenMPKinds.def"
618 default:
619 break;
620 }
621 break;
Samuel Antao72590762016-01-19 20:04:50 +0000622 case OMPD_target_exit_data:
623 switch (CKind) {
624#define OPENMP_TARGET_EXIT_DATA_CLAUSE(Name) \
625 case OMPC_##Name: \
626 return true;
627#include "clang/Basic/OpenMPKinds.def"
628 default:
629 break;
630 }
631 break;
Arpith Chacko Jacobe955b3d2016-01-26 18:48:41 +0000632 case OMPD_target_parallel:
633 switch (CKind) {
634#define OPENMP_TARGET_PARALLEL_CLAUSE(Name) \
635 case OMPC_##Name: \
636 return true;
637#include "clang/Basic/OpenMPKinds.def"
638 default:
639 break;
640 }
641 break;
Arpith Chacko Jacob05bebb52016-02-03 15:46:42 +0000642 case OMPD_target_parallel_for:
643 switch (CKind) {
644#define OPENMP_TARGET_PARALLEL_FOR_CLAUSE(Name) \
645 case OMPC_##Name: \
646 return true;
647#include "clang/Basic/OpenMPKinds.def"
648 default:
649 break;
650 }
651 break;
Samuel Antao686c70c2016-05-26 17:30:50 +0000652 case OMPD_target_update:
653 switch (CKind) {
654#define OPENMP_TARGET_UPDATE_CLAUSE(Name) \
655 case OMPC_##Name: \
656 return true;
657#include "clang/Basic/OpenMPKinds.def"
658 default:
659 break;
660 }
661 break;
Alexey Bataev13314bf2014-10-09 04:18:56 +0000662 case OMPD_teams:
663 switch (CKind) {
664#define OPENMP_TEAMS_CLAUSE(Name) \
665 case OMPC_##Name: \
666 return true;
667#include "clang/Basic/OpenMPKinds.def"
668 default:
669 break;
670 }
671 break;
Alexey Bataev87933c72015-09-18 08:07:34 +0000672 case OMPD_cancel:
673 switch (CKind) {
674#define OPENMP_CANCEL_CLAUSE(Name) \
675 case OMPC_##Name: \
676 return true;
677#include "clang/Basic/OpenMPKinds.def"
678 default:
679 break;
680 }
681 break;
Alexey Bataev346265e2015-09-25 10:37:12 +0000682 case OMPD_ordered:
683 switch (CKind) {
Alexey Bataev0a6ed842015-12-03 09:40:15 +0000684#define OPENMP_ORDERED_CLAUSE(Name) \
Alexey Bataev346265e2015-09-25 10:37:12 +0000685 case OMPC_##Name: \
686 return true;
687#include "clang/Basic/OpenMPKinds.def"
688 default:
689 break;
690 }
691 break;
Alexey Bataev49f6e782015-12-01 04:18:41 +0000692 case OMPD_taskloop:
693 switch (CKind) {
694#define OPENMP_TASKLOOP_CLAUSE(Name) \
695 case OMPC_##Name: \
696 return true;
697#include "clang/Basic/OpenMPKinds.def"
698 default:
699 break;
700 }
701 break;
Alexey Bataev0a6ed842015-12-03 09:40:15 +0000702 case OMPD_taskloop_simd:
703 switch (CKind) {
704#define OPENMP_TASKLOOP_SIMD_CLAUSE(Name) \
705 case OMPC_##Name: \
706 return true;
707#include "clang/Basic/OpenMPKinds.def"
708 default:
709 break;
710 }
711 break;
Alexey Bataev60e51c42019-10-10 20:13:02 +0000712 case OMPD_master_taskloop:
713 switch (CKind) {
714#define OPENMP_MASTER_TASKLOOP_CLAUSE(Name) \
715 case OMPC_##Name: \
716 return true;
717#include "clang/Basic/OpenMPKinds.def"
718 default:
719 break;
720 }
721 break;
Alexey Bataevb8552ab2019-10-18 16:47:35 +0000722 case OMPD_master_taskloop_simd:
723 switch (CKind) {
724#define OPENMP_MASTER_TASKLOOP_SIMD_CLAUSE(Name) \
725 case OMPC_##Name: \
726 return true;
727#include "clang/Basic/OpenMPKinds.def"
728 default:
729 break;
730 }
731 break;
Alexey Bataev5bbcead2019-10-14 17:17:41 +0000732 case OMPD_parallel_master_taskloop:
733 switch (CKind) {
734#define OPENMP_PARALLEL_MASTER_TASKLOOP_CLAUSE(Name) \
735 case OMPC_##Name: \
736 return true;
737#include "clang/Basic/OpenMPKinds.def"
738 default:
739 break;
740 }
741 break;
Alexey Bataev14a388f2019-10-25 10:27:13 -0400742 case OMPD_parallel_master_taskloop_simd:
743 switch (CKind) {
744#define OPENMP_PARALLEL_MASTER_TASKLOOP_SIMD_CLAUSE(Name) \
745 case OMPC_##Name: \
746 return true;
747#include "clang/Basic/OpenMPKinds.def"
748 default:
749 break;
750 }
751 break;
Alexey Bataev28c75412015-12-15 08:19:24 +0000752 case OMPD_critical:
753 switch (CKind) {
754#define OPENMP_CRITICAL_CLAUSE(Name) \
755 case OMPC_##Name: \
756 return true;
757#include "clang/Basic/OpenMPKinds.def"
758 default:
759 break;
760 }
761 break;
Carlo Bertolli6200a3d2015-12-14 14:51:25 +0000762 case OMPD_distribute:
763 switch (CKind) {
764#define OPENMP_DISTRIBUTE_CLAUSE(Name) \
765 case OMPC_##Name: \
766 return true;
767#include "clang/Basic/OpenMPKinds.def"
768 default:
769 break;
770 }
771 break;
Carlo Bertolli9925f152016-06-27 14:55:37 +0000772 case OMPD_distribute_parallel_for:
773 switch (CKind) {
774#define OPENMP_DISTRIBUTE_PARALLEL_FOR_CLAUSE(Name) \
775 case OMPC_##Name: \
776 return true;
777#include "clang/Basic/OpenMPKinds.def"
778 default:
779 break;
780 }
781 break;
Kelvin Li4a39add2016-07-05 05:00:15 +0000782 case OMPD_distribute_parallel_for_simd:
783 switch (CKind) {
784#define OPENMP_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(Name) \
785 case OMPC_##Name: \
786 return true;
787#include "clang/Basic/OpenMPKinds.def"
788 default:
789 break;
790 }
791 break;
Kelvin Li787f3fc2016-07-06 04:45:38 +0000792 case OMPD_distribute_simd:
Alexey Bataev779a1802019-12-06 12:21:31 -0500793 if (OpenMPVersion < 50 && CKind == OMPC_if)
794 return false;
Kelvin Li787f3fc2016-07-06 04:45:38 +0000795 switch (CKind) {
796#define OPENMP_DISTRIBUTE_SIMD_CLAUSE(Name) \
797 case OMPC_##Name: \
798 return true;
799#include "clang/Basic/OpenMPKinds.def"
800 default:
801 break;
802 }
803 break;
Kelvin Lia579b912016-07-14 02:54:56 +0000804 case OMPD_target_parallel_for_simd:
805 switch (CKind) {
806#define OPENMP_TARGET_PARALLEL_FOR_SIMD_CLAUSE(Name) \
807 case OMPC_##Name: \
808 return true;
809#include "clang/Basic/OpenMPKinds.def"
810 default:
811 break;
812 }
813 break;
Kelvin Li986330c2016-07-20 22:57:10 +0000814 case OMPD_target_simd:
815 switch (CKind) {
816#define OPENMP_TARGET_SIMD_CLAUSE(Name) \
817 case OMPC_##Name: \
818 return true;
819#include "clang/Basic/OpenMPKinds.def"
820 default:
821 break;
822 }
823 break;
Kelvin Li02532872016-08-05 14:37:37 +0000824 case OMPD_teams_distribute:
825 switch (CKind) {
826#define OPENMP_TEAMS_DISTRIBUTE_CLAUSE(Name) \
827 case OMPC_##Name: \
828 return true;
829#include "clang/Basic/OpenMPKinds.def"
830 default:
831 break;
832 }
833 break;
Kelvin Li4e325f72016-10-25 12:50:55 +0000834 case OMPD_teams_distribute_simd:
835 switch (CKind) {
836#define OPENMP_TEAMS_DISTRIBUTE_SIMD_CLAUSE(Name) \
837 case OMPC_##Name: \
838 return true;
839#include "clang/Basic/OpenMPKinds.def"
840 default:
841 break;
842 }
843 break;
Kelvin Li579e41c2016-11-30 23:51:03 +0000844 case OMPD_teams_distribute_parallel_for_simd:
845 switch (CKind) {
846#define OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(Name) \
847 case OMPC_##Name: \
848 return true;
849#include "clang/Basic/OpenMPKinds.def"
850 default:
851 break;
852 }
853 break;
Kelvin Li7ade93f2016-12-09 03:24:30 +0000854 case OMPD_teams_distribute_parallel_for:
855 switch (CKind) {
856#define OPENMP_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE(Name) \
857 case OMPC_##Name: \
858 return true;
859#include "clang/Basic/OpenMPKinds.def"
860 default:
861 break;
862 }
863 break;
Kelvin Libf594a52016-12-17 05:48:59 +0000864 case OMPD_target_teams:
865 switch (CKind) {
866#define OPENMP_TARGET_TEAMS_CLAUSE(Name) \
867 case OMPC_##Name: \
868 return true;
869#include "clang/Basic/OpenMPKinds.def"
870 default:
871 break;
872 }
873 break;
Kelvin Li83c451e2016-12-25 04:52:54 +0000874 case OMPD_target_teams_distribute:
875 switch (CKind) {
876#define OPENMP_TARGET_TEAMS_DISTRIBUTE_CLAUSE(Name) \
877 case OMPC_##Name: \
878 return true;
879#include "clang/Basic/OpenMPKinds.def"
880 default:
881 break;
882 }
883 break;
Kelvin Li80e8f562016-12-29 22:16:30 +0000884 case OMPD_target_teams_distribute_parallel_for:
885 switch (CKind) {
886#define OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_CLAUSE(Name) \
887 case OMPC_##Name: \
888 return true;
889#include "clang/Basic/OpenMPKinds.def"
890 default:
891 break;
892 }
893 break;
Kelvin Li1851df52017-01-03 05:23:48 +0000894 case OMPD_target_teams_distribute_parallel_for_simd:
895 switch (CKind) {
896#define OPENMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_FOR_SIMD_CLAUSE(Name) \
897 case OMPC_##Name: \
898 return true;
899#include "clang/Basic/OpenMPKinds.def"
900 default:
901 break;
902 }
903 break;
Kelvin Lida681182017-01-10 18:08:18 +0000904 case OMPD_target_teams_distribute_simd:
905 switch (CKind) {
906#define OPENMP_TARGET_TEAMS_DISTRIBUTE_SIMD_CLAUSE(Name) \
907 case OMPC_##Name: \
908 return true;
909#include "clang/Basic/OpenMPKinds.def"
910 default:
911 break;
912 }
913 break;
Alexey Bataev169d96a2017-07-18 20:17:46 +0000914 case OMPD_taskgroup:
915 switch (CKind) {
916#define OPENMP_TASKGROUP_CLAUSE(Name) \
917 case OMPC_##Name: \
918 return true;
919#include "clang/Basic/OpenMPKinds.def"
920 default:
921 break;
922 }
923 break;
Michael Kruse251e1482019-02-01 20:25:04 +0000924 case OMPD_declare_mapper:
925 switch (CKind) {
926#define OPENMP_DECLARE_MAPPER_CLAUSE(Name) \
927 case OMPC_##Name: \
928 return true;
929#include "clang/Basic/OpenMPKinds.def"
930 default:
931 break;
932 }
933 break;
Alexey Bataev9cc10fc2019-03-12 18:52:33 +0000934 case OMPD_allocate:
935 switch (CKind) {
936#define OPENMP_ALLOCATE_CLAUSE(Name) \
937 case OMPC_##Name: \
938 return true;
939#include "clang/Basic/OpenMPKinds.def"
940 default:
941 break;
942 }
943 break;
Alexey Bataevdba792c2019-09-23 18:13:31 +0000944 case OMPD_declare_variant:
945 switch (CKind) {
946#define OPENMP_DECLARE_VARIANT_CLAUSE(Name) \
947 case OMPC_##Name: \
948 return true;
949#include "clang/Basic/OpenMPKinds.def"
950 default:
951 break;
952 }
953 break;
Dmitry Polukhin0b0da292016-04-06 11:38:59 +0000954 case OMPD_declare_target:
955 case OMPD_end_declare_target:
Alexey Bataev5ec3eb12013-07-19 03:13:43 +0000956 case OMPD_unknown:
957 case OMPD_threadprivate:
Alexey Bataev1e0498a2014-06-26 08:21:58 +0000958 case OMPD_section:
Alexander Musman80c22892014-07-17 08:54:58 +0000959 case OMPD_master:
Alexey Bataev68446b72014-07-18 07:47:19 +0000960 case OMPD_taskyield:
Alexey Bataev4d1dfea2014-07-18 09:11:51 +0000961 case OMPD_barrier:
Alexey Bataev2df347a2014-07-18 10:17:07 +0000962 case OMPD_taskwait:
Alexey Bataev6d4ed052015-07-01 06:57:41 +0000963 case OMPD_cancellation_point:
Alexey Bataev94a4f0c2016-03-03 05:21:39 +0000964 case OMPD_declare_reduction:
Alexey Bataevd158cf62019-09-13 20:18:17 +0000965 case OMPD_declare_simd:
Alexey Bataev5ec3eb12013-07-19 03:13:43 +0000966 break;
967 }
968 return false;
969}
Alexey Bataevf29276e2014-06-18 04:14:57 +0000970
971bool clang::isOpenMPLoopDirective(OpenMPDirectiveKind DKind) {
Alexander Musmane4e893b2014-09-23 09:33:00 +0000972 return DKind == OMPD_simd || DKind == OMPD_for || DKind == OMPD_for_simd ||
Alexey Bataev49f6e782015-12-01 04:18:41 +0000973 DKind == OMPD_parallel_for || DKind == OMPD_parallel_for_simd ||
Arpith Chacko Jacob05bebb52016-02-03 15:46:42 +0000974 DKind == OMPD_taskloop || DKind == OMPD_taskloop_simd ||
Alexey Bataevb8552ab2019-10-18 16:47:35 +0000975 DKind == OMPD_master_taskloop || DKind == OMPD_master_taskloop_simd ||
Alexey Bataev14a388f2019-10-25 10:27:13 -0400976 DKind == OMPD_parallel_master_taskloop ||
977 DKind == OMPD_parallel_master_taskloop_simd ||
978 DKind == OMPD_distribute || DKind == OMPD_target_parallel_for ||
Kelvin Li4a39add2016-07-05 05:00:15 +0000979 DKind == OMPD_distribute_parallel_for ||
Kelvin Li787f3fc2016-07-06 04:45:38 +0000980 DKind == OMPD_distribute_parallel_for_simd ||
Kelvin Lia579b912016-07-14 02:54:56 +0000981 DKind == OMPD_distribute_simd ||
Kelvin Li02532872016-08-05 14:37:37 +0000982 DKind == OMPD_target_parallel_for_simd || DKind == OMPD_target_simd ||
Kelvin Li579e41c2016-11-30 23:51:03 +0000983 DKind == OMPD_teams_distribute ||
984 DKind == OMPD_teams_distribute_simd ||
Kelvin Li7ade93f2016-12-09 03:24:30 +0000985 DKind == OMPD_teams_distribute_parallel_for_simd ||
Kelvin Li83c451e2016-12-25 04:52:54 +0000986 DKind == OMPD_teams_distribute_parallel_for ||
Kelvin Li80e8f562016-12-29 22:16:30 +0000987 DKind == OMPD_target_teams_distribute ||
Kelvin Li1851df52017-01-03 05:23:48 +0000988 DKind == OMPD_target_teams_distribute_parallel_for ||
Kelvin Lida681182017-01-10 18:08:18 +0000989 DKind == OMPD_target_teams_distribute_parallel_for_simd ||
990 DKind == OMPD_target_teams_distribute_simd;
Alexey Bataevf29276e2014-06-18 04:14:57 +0000991}
992
993bool clang::isOpenMPWorksharingDirective(OpenMPDirectiveKind DKind) {
Alexander Musmane4e893b2014-09-23 09:33:00 +0000994 return DKind == OMPD_for || DKind == OMPD_for_simd ||
995 DKind == OMPD_sections || DKind == OMPD_section ||
Alexey Bataev84d0b3e2014-07-08 08:12:03 +0000996 DKind == OMPD_single || DKind == OMPD_parallel_for ||
Arpith Chacko Jacob05bebb52016-02-03 15:46:42 +0000997 DKind == OMPD_parallel_for_simd || DKind == OMPD_parallel_sections ||
Carlo Bertolli9925f152016-06-27 14:55:37 +0000998 DKind == OMPD_target_parallel_for ||
Kelvin Li4a39add2016-07-05 05:00:15 +0000999 DKind == OMPD_distribute_parallel_for ||
Kelvin Lia579b912016-07-14 02:54:56 +00001000 DKind == OMPD_distribute_parallel_for_simd ||
Kelvin Li579e41c2016-11-30 23:51:03 +00001001 DKind == OMPD_target_parallel_for_simd ||
Kelvin Li7ade93f2016-12-09 03:24:30 +00001002 DKind == OMPD_teams_distribute_parallel_for_simd ||
Kelvin Li80e8f562016-12-29 22:16:30 +00001003 DKind == OMPD_teams_distribute_parallel_for ||
Kelvin Li1851df52017-01-03 05:23:48 +00001004 DKind == OMPD_target_teams_distribute_parallel_for ||
1005 DKind == OMPD_target_teams_distribute_parallel_for_simd;
Alexey Bataevf29276e2014-06-18 04:14:57 +00001006}
1007
Alexey Bataev0a6ed842015-12-03 09:40:15 +00001008bool clang::isOpenMPTaskLoopDirective(OpenMPDirectiveKind DKind) {
Alexey Bataev60e51c42019-10-10 20:13:02 +00001009 return DKind == OMPD_taskloop || DKind == OMPD_taskloop_simd ||
Alexey Bataevb8552ab2019-10-18 16:47:35 +00001010 DKind == OMPD_master_taskloop || DKind == OMPD_master_taskloop_simd ||
Alexey Bataev14a388f2019-10-25 10:27:13 -04001011 DKind == OMPD_parallel_master_taskloop ||
1012 DKind == OMPD_parallel_master_taskloop_simd;
Alexey Bataev0a6ed842015-12-03 09:40:15 +00001013}
1014
Alexey Bataevf29276e2014-06-18 04:14:57 +00001015bool clang::isOpenMPParallelDirective(OpenMPDirectiveKind DKind) {
Alexey Bataev84d0b3e2014-07-08 08:12:03 +00001016 return DKind == OMPD_parallel || DKind == OMPD_parallel_for ||
Arpith Chacko Jacob05bebb52016-02-03 15:46:42 +00001017 DKind == OMPD_parallel_for_simd || DKind == OMPD_parallel_sections ||
Carlo Bertolli9925f152016-06-27 14:55:37 +00001018 DKind == OMPD_target_parallel || DKind == OMPD_target_parallel_for ||
Kelvin Li4a39add2016-07-05 05:00:15 +00001019 DKind == OMPD_distribute_parallel_for ||
Kelvin Lia579b912016-07-14 02:54:56 +00001020 DKind == OMPD_distribute_parallel_for_simd ||
Kelvin Li7ade93f2016-12-09 03:24:30 +00001021 DKind == OMPD_target_parallel_for_simd ||
1022 DKind == OMPD_teams_distribute_parallel_for ||
Kelvin Li80e8f562016-12-29 22:16:30 +00001023 DKind == OMPD_teams_distribute_parallel_for_simd ||
Kelvin Li1851df52017-01-03 05:23:48 +00001024 DKind == OMPD_target_teams_distribute_parallel_for ||
Alexey Bataev5bbcead2019-10-14 17:17:41 +00001025 DKind == OMPD_target_teams_distribute_parallel_for_simd ||
cchen47d60942019-12-05 13:43:48 -05001026 DKind == OMPD_parallel_master ||
Alexey Bataev14a388f2019-10-25 10:27:13 -04001027 DKind == OMPD_parallel_master_taskloop ||
1028 DKind == OMPD_parallel_master_taskloop_simd;
Alexey Bataevf29276e2014-06-18 04:14:57 +00001029}
1030
Arpith Chacko Jacob3d58f262016-02-02 04:00:47 +00001031bool clang::isOpenMPTargetExecutionDirective(OpenMPDirectiveKind DKind) {
Arpith Chacko Jacob05bebb52016-02-03 15:46:42 +00001032 return DKind == OMPD_target || DKind == OMPD_target_parallel ||
Alexey Bataev5d7edca2017-11-09 17:32:15 +00001033 DKind == OMPD_target_parallel_for ||
Kelvin Libf594a52016-12-17 05:48:59 +00001034 DKind == OMPD_target_parallel_for_simd || DKind == OMPD_target_simd ||
Kelvin Li80e8f562016-12-29 22:16:30 +00001035 DKind == OMPD_target_teams || DKind == OMPD_target_teams_distribute ||
Kelvin Li1851df52017-01-03 05:23:48 +00001036 DKind == OMPD_target_teams_distribute_parallel_for ||
Kelvin Lida681182017-01-10 18:08:18 +00001037 DKind == OMPD_target_teams_distribute_parallel_for_simd ||
1038 DKind == OMPD_target_teams_distribute_simd;
Arpith Chacko Jacob3d58f262016-02-02 04:00:47 +00001039}
1040
1041bool clang::isOpenMPTargetDataManagementDirective(OpenMPDirectiveKind DKind) {
Arpith Chacko Jacob3d58f262016-02-02 04:00:47 +00001042 return DKind == OMPD_target_data || DKind == OMPD_target_enter_data ||
Samuel Antao686c70c2016-05-26 17:30:50 +00001043 DKind == OMPD_target_exit_data || DKind == OMPD_target_update;
Samuel Antao4be30e92015-10-02 17:14:03 +00001044}
1045
Kelvin Libf594a52016-12-17 05:48:59 +00001046bool clang::isOpenMPNestingTeamsDirective(OpenMPDirectiveKind DKind) {
Kelvin Li4e325f72016-10-25 12:50:55 +00001047 return DKind == OMPD_teams || DKind == OMPD_teams_distribute ||
Kelvin Li579e41c2016-11-30 23:51:03 +00001048 DKind == OMPD_teams_distribute_simd ||
Kelvin Li7ade93f2016-12-09 03:24:30 +00001049 DKind == OMPD_teams_distribute_parallel_for_simd ||
1050 DKind == OMPD_teams_distribute_parallel_for;
Kelvin Libf594a52016-12-17 05:48:59 +00001051}
1052
1053bool clang::isOpenMPTeamsDirective(OpenMPDirectiveKind DKind) {
1054 return isOpenMPNestingTeamsDirective(DKind) ||
Kelvin Li80e8f562016-12-29 22:16:30 +00001055 DKind == OMPD_target_teams || DKind == OMPD_target_teams_distribute ||
Kelvin Li1851df52017-01-03 05:23:48 +00001056 DKind == OMPD_target_teams_distribute_parallel_for ||
Kelvin Lida681182017-01-10 18:08:18 +00001057 DKind == OMPD_target_teams_distribute_parallel_for_simd ||
1058 DKind == OMPD_target_teams_distribute_simd;
Alexey Bataev13314bf2014-10-09 04:18:56 +00001059}
1060
Alexey Bataevf29276e2014-06-18 04:14:57 +00001061bool clang::isOpenMPSimdDirective(OpenMPDirectiveKind DKind) {
Alexander Musmane4e893b2014-09-23 09:33:00 +00001062 return DKind == OMPD_simd || DKind == OMPD_for_simd ||
Kelvin Li4a39add2016-07-05 05:00:15 +00001063 DKind == OMPD_parallel_for_simd || DKind == OMPD_taskloop_simd ||
Alexey Bataevb8552ab2019-10-18 16:47:35 +00001064 DKind == OMPD_master_taskloop_simd ||
Alexey Bataev14a388f2019-10-25 10:27:13 -04001065 DKind == OMPD_parallel_master_taskloop_simd ||
Kelvin Li787f3fc2016-07-06 04:45:38 +00001066 DKind == OMPD_distribute_parallel_for_simd ||
Kelvin Li4e325f72016-10-25 12:50:55 +00001067 DKind == OMPD_distribute_simd || DKind == OMPD_target_simd ||
Kelvin Li579e41c2016-11-30 23:51:03 +00001068 DKind == OMPD_teams_distribute_simd ||
Kelvin Li1851df52017-01-03 05:23:48 +00001069 DKind == OMPD_teams_distribute_parallel_for_simd ||
Kelvin Lida681182017-01-10 18:08:18 +00001070 DKind == OMPD_target_teams_distribute_parallel_for_simd ||
Alexey Bataev9a5e64f2017-11-09 17:01:35 +00001071 DKind == OMPD_target_teams_distribute_simd ||
1072 DKind == OMPD_target_parallel_for_simd;
Alexey Bataevf29276e2014-06-18 04:14:57 +00001073}
1074
Kelvin Li02532872016-08-05 14:37:37 +00001075bool clang::isOpenMPNestingDistributeDirective(OpenMPDirectiveKind Kind) {
Kelvin Li4a39add2016-07-05 05:00:15 +00001076 return Kind == OMPD_distribute || Kind == OMPD_distribute_parallel_for ||
Kelvin Li787f3fc2016-07-06 04:45:38 +00001077 Kind == OMPD_distribute_parallel_for_simd ||
1078 Kind == OMPD_distribute_simd;
Kelvin Li4a39add2016-07-05 05:00:15 +00001079 // TODO add next directives.
Carlo Bertolli6200a3d2015-12-14 14:51:25 +00001080}
1081
Kelvin Li02532872016-08-05 14:37:37 +00001082bool clang::isOpenMPDistributeDirective(OpenMPDirectiveKind Kind) {
1083 return isOpenMPNestingDistributeDirective(Kind) ||
Kelvin Li579e41c2016-11-30 23:51:03 +00001084 Kind == OMPD_teams_distribute || Kind == OMPD_teams_distribute_simd ||
Kelvin Li7ade93f2016-12-09 03:24:30 +00001085 Kind == OMPD_teams_distribute_parallel_for_simd ||
Kelvin Li83c451e2016-12-25 04:52:54 +00001086 Kind == OMPD_teams_distribute_parallel_for ||
Kelvin Li80e8f562016-12-29 22:16:30 +00001087 Kind == OMPD_target_teams_distribute ||
Kelvin Li1851df52017-01-03 05:23:48 +00001088 Kind == OMPD_target_teams_distribute_parallel_for ||
Kelvin Lida681182017-01-10 18:08:18 +00001089 Kind == OMPD_target_teams_distribute_parallel_for_simd ||
1090 Kind == OMPD_target_teams_distribute_simd;
Kelvin Li02532872016-08-05 14:37:37 +00001091}
1092
Alexey Bataevf29276e2014-06-18 04:14:57 +00001093bool clang::isOpenMPPrivate(OpenMPClauseKind Kind) {
1094 return Kind == OMPC_private || Kind == OMPC_firstprivate ||
1095 Kind == OMPC_lastprivate || Kind == OMPC_linear ||
Alexey Bataevfa312f32017-07-21 18:48:21 +00001096 Kind == OMPC_reduction || Kind == OMPC_task_reduction ||
1097 Kind == OMPC_in_reduction; // TODO add next clauses like 'reduction'.
Alexey Bataevf29276e2014-06-18 04:14:57 +00001098}
1099
1100bool clang::isOpenMPThreadPrivate(OpenMPClauseKind Kind) {
Alexey Bataevf56f98c2015-04-16 05:39:01 +00001101 return Kind == OMPC_threadprivate || Kind == OMPC_copyin;
Alexey Bataevf29276e2014-06-18 04:14:57 +00001102}
1103
Alexey Bataev35aaee62016-04-13 13:36:48 +00001104bool clang::isOpenMPTaskingDirective(OpenMPDirectiveKind Kind) {
1105 return Kind == OMPD_task || isOpenMPTaskLoopDirective(Kind);
1106}
Carlo Bertolli9925f152016-06-27 14:55:37 +00001107
1108bool clang::isOpenMPLoopBoundSharingDirective(OpenMPDirectiveKind Kind) {
Kelvin Li4a39add2016-07-05 05:00:15 +00001109 return Kind == OMPD_distribute_parallel_for ||
Kelvin Li787f3fc2016-07-06 04:45:38 +00001110 Kind == OMPD_distribute_parallel_for_simd ||
Kelvin Li7ade93f2016-12-09 03:24:30 +00001111 Kind == OMPD_teams_distribute_parallel_for_simd ||
Kelvin Li83c451e2016-12-25 04:52:54 +00001112 Kind == OMPD_teams_distribute_parallel_for ||
Kelvin Li1851df52017-01-03 05:23:48 +00001113 Kind == OMPD_target_teams_distribute_parallel_for ||
Carlo Bertolliffafe102017-04-20 00:39:39 +00001114 Kind == OMPD_target_teams_distribute_parallel_for_simd;
Carlo Bertolli9925f152016-06-27 14:55:37 +00001115}
Arpith Chacko Jacob19b911c2017-01-18 18:18:53 +00001116
1117void clang::getOpenMPCaptureRegions(
1118 SmallVectorImpl<OpenMPDirectiveKind> &CaptureRegions,
1119 OpenMPDirectiveKind DKind) {
1120 assert(DKind <= OMPD_unknown);
1121 switch (DKind) {
1122 case OMPD_parallel:
1123 case OMPD_parallel_for:
1124 case OMPD_parallel_for_simd:
cchen47d60942019-12-05 13:43:48 -05001125 case OMPD_parallel_master:
Arpith Chacko Jacob19b911c2017-01-18 18:18:53 +00001126 case OMPD_parallel_sections:
Carlo Bertolli8429d812017-02-17 21:29:13 +00001127 case OMPD_distribute_parallel_for:
Alexey Bataev974acd62017-11-27 19:38:52 +00001128 case OMPD_distribute_parallel_for_simd:
Arpith Chacko Jacob19b911c2017-01-18 18:18:53 +00001129 CaptureRegions.push_back(OMPD_parallel);
1130 break;
Arpith Chacko Jacob86f9e462017-01-25 01:45:59 +00001131 case OMPD_target_teams:
Alexey Bataevdfa430f2017-12-08 15:03:50 +00001132 case OMPD_target_teams_distribute:
Alexey Bataevfbe17fb2017-12-13 19:45:06 +00001133 case OMPD_target_teams_distribute_simd:
Alexey Bataev8451efa2018-01-15 19:06:12 +00001134 CaptureRegions.push_back(OMPD_task);
Arpith Chacko Jacob99a1e0e2017-01-25 02:18:43 +00001135 CaptureRegions.push_back(OMPD_target);
1136 CaptureRegions.push_back(OMPD_teams);
1137 break;
Alexey Bataev2ba67042017-11-28 21:11:44 +00001138 case OMPD_teams:
Carlo Bertolliba1487b2017-10-04 14:12:09 +00001139 case OMPD_teams_distribute:
Alexey Bataev2ba67042017-11-28 21:11:44 +00001140 case OMPD_teams_distribute_simd:
Carlo Bertolliba1487b2017-10-04 14:12:09 +00001141 CaptureRegions.push_back(OMPD_teams);
1142 break;
Alexey Bataev2ba67042017-11-28 21:11:44 +00001143 case OMPD_target:
Alexey Bataevf8365372017-11-17 17:57:25 +00001144 case OMPD_target_simd:
Alexey Bataev8451efa2018-01-15 19:06:12 +00001145 CaptureRegions.push_back(OMPD_task);
Alexey Bataevf8365372017-11-17 17:57:25 +00001146 CaptureRegions.push_back(OMPD_target);
1147 break;
Carlo Bertolli62fae152017-11-20 20:46:39 +00001148 case OMPD_teams_distribute_parallel_for:
Carlo Bertolli56a2aa42017-12-04 20:57:19 +00001149 case OMPD_teams_distribute_parallel_for_simd:
Carlo Bertolli62fae152017-11-20 20:46:39 +00001150 CaptureRegions.push_back(OMPD_teams);
1151 CaptureRegions.push_back(OMPD_parallel);
1152 break;
Alexey Bataev7f96c372017-11-22 17:19:31 +00001153 case OMPD_target_parallel:
1154 case OMPD_target_parallel_for:
1155 case OMPD_target_parallel_for_simd:
Alexey Bataev8451efa2018-01-15 19:06:12 +00001156 CaptureRegions.push_back(OMPD_task);
Alexey Bataev7f96c372017-11-22 17:19:31 +00001157 CaptureRegions.push_back(OMPD_target);
1158 CaptureRegions.push_back(OMPD_parallel);
1159 break;
Alexey Bataev2ba67042017-11-28 21:11:44 +00001160 case OMPD_task:
Alexey Bataev7f96c372017-11-22 17:19:31 +00001161 case OMPD_target_enter_data:
1162 case OMPD_target_exit_data:
1163 case OMPD_target_update:
1164 CaptureRegions.push_back(OMPD_task);
1165 break;
Alexey Bataev2ba67042017-11-28 21:11:44 +00001166 case OMPD_taskloop:
1167 case OMPD_taskloop_simd:
Alexey Bataev60e51c42019-10-10 20:13:02 +00001168 case OMPD_master_taskloop:
Alexey Bataevb8552ab2019-10-18 16:47:35 +00001169 case OMPD_master_taskloop_simd:
Alexey Bataev2ba67042017-11-28 21:11:44 +00001170 CaptureRegions.push_back(OMPD_taskloop);
1171 break;
Alexey Bataev5bbcead2019-10-14 17:17:41 +00001172 case OMPD_parallel_master_taskloop:
Alexey Bataev14a388f2019-10-25 10:27:13 -04001173 case OMPD_parallel_master_taskloop_simd:
Alexey Bataev5bbcead2019-10-14 17:17:41 +00001174 CaptureRegions.push_back(OMPD_parallel);
1175 CaptureRegions.push_back(OMPD_taskloop);
1176 break;
Carlo Bertolli52978c32018-01-03 21:12:44 +00001177 case OMPD_target_teams_distribute_parallel_for:
Alexey Bataev647dd842018-01-15 20:59:40 +00001178 case OMPD_target_teams_distribute_parallel_for_simd:
Alexey Bataev8451efa2018-01-15 19:06:12 +00001179 CaptureRegions.push_back(OMPD_task);
Carlo Bertolli52978c32018-01-03 21:12:44 +00001180 CaptureRegions.push_back(OMPD_target);
1181 CaptureRegions.push_back(OMPD_teams);
1182 CaptureRegions.push_back(OMPD_parallel);
1183 break;
Arpith Chacko Jacob19b911c2017-01-18 18:18:53 +00001184 case OMPD_simd:
1185 case OMPD_for:
1186 case OMPD_for_simd:
1187 case OMPD_sections:
1188 case OMPD_section:
1189 case OMPD_single:
1190 case OMPD_master:
1191 case OMPD_critical:
1192 case OMPD_taskgroup:
1193 case OMPD_distribute:
1194 case OMPD_ordered:
1195 case OMPD_atomic:
1196 case OMPD_target_data:
Arpith Chacko Jacob19b911c2017-01-18 18:18:53 +00001197 case OMPD_distribute_simd:
Alexey Bataev2ba67042017-11-28 21:11:44 +00001198 CaptureRegions.push_back(OMPD_unknown);
Arpith Chacko Jacob19b911c2017-01-18 18:18:53 +00001199 break;
Arpith Chacko Jacob19b911c2017-01-18 18:18:53 +00001200 case OMPD_threadprivate:
Alexey Bataev25ed0c02019-03-07 17:54:44 +00001201 case OMPD_allocate:
Arpith Chacko Jacob19b911c2017-01-18 18:18:53 +00001202 case OMPD_taskyield:
1203 case OMPD_barrier:
1204 case OMPD_taskwait:
1205 case OMPD_cancellation_point:
1206 case OMPD_cancel:
1207 case OMPD_flush:
Arpith Chacko Jacob19b911c2017-01-18 18:18:53 +00001208 case OMPD_declare_reduction:
Michael Kruse251e1482019-02-01 20:25:04 +00001209 case OMPD_declare_mapper:
Arpith Chacko Jacob19b911c2017-01-18 18:18:53 +00001210 case OMPD_declare_simd:
1211 case OMPD_declare_target:
1212 case OMPD_end_declare_target:
Kelvin Li1408f912018-09-26 04:28:39 +00001213 case OMPD_requires:
Alexey Bataevd158cf62019-09-13 20:18:17 +00001214 case OMPD_declare_variant:
Arpith Chacko Jacob19b911c2017-01-18 18:18:53 +00001215 llvm_unreachable("OpenMP Directive is not allowed");
1216 case OMPD_unknown:
1217 llvm_unreachable("Unknown OpenMP directive");
1218 }
1219}