1a769e072SAlexey Bataev //===--- OpenMPKinds.cpp - Token Kinds Support ----------------------------===//
2a769e072SAlexey Bataev //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6a769e072SAlexey Bataev //
7a769e072SAlexey Bataev //===----------------------------------------------------------------------===//
8a769e072SAlexey Bataev /// \file
99fc8faf9SAdrian Prantl /// This file implements the OpenMP enum and support functions.
10a769e072SAlexey Bataev ///
11a769e072SAlexey Bataev //===----------------------------------------------------------------------===//
12a769e072SAlexey Bataev
13a769e072SAlexey Bataev #include "clang/Basic/OpenMPKinds.h"
14a769e072SAlexey Bataev #include "clang/Basic/IdentifierTable.h"
1507544fa5SMatt Beaumont-Gay #include "llvm/ADT/StringRef.h"
16a769e072SAlexey Bataev #include "llvm/ADT/StringSwitch.h"
17a769e072SAlexey Bataev #include "llvm/Support/ErrorHandling.h"
18a769e072SAlexey Bataev #include <cassert>
19a769e072SAlexey Bataev
20a769e072SAlexey Bataev using namespace clang;
21eb3e81f4SJohannes Doerfert using namespace llvm::omp;
22a769e072SAlexey Bataev
getOpenMPSimpleClauseType(OpenMPClauseKind Kind,StringRef Str,const LangOptions & LangOpts)23aa82c40fSJoel E. Denny unsigned clang::getOpenMPSimpleClauseType(OpenMPClauseKind Kind, StringRef Str,
2483ddfa0dSJoel E. Denny const LangOptions &LangOpts) {
255ec3eb11SAlexey Bataev switch (Kind) {
265ec3eb11SAlexey Bataev case OMPC_default:
27577c9b02SAtmn Patel return llvm::StringSwitch<unsigned>(Str)
28577c9b02SAtmn Patel #define OMP_DEFAULT_KIND(Enum, Name) .Case(Name, unsigned(Enum))
29577c9b02SAtmn Patel #include "llvm/Frontend/OpenMP/OMPKinds.def"
30577c9b02SAtmn Patel .Default(unsigned(llvm::omp::OMP_DEFAULT_unknown));
31bcbadb65SAlexey Bataev case OMPC_proc_bind:
326c5d1f40SJohannes Doerfert return llvm::StringSwitch<unsigned>(Str)
336c5d1f40SJohannes Doerfert #define OMP_PROC_BIND_KIND(Enum, Name, Value) .Case(Name, Value)
346c5d1f40SJohannes Doerfert #include "llvm/Frontend/OpenMP/OMPKinds.def"
356c5d1f40SJohannes Doerfert .Default(unsigned(llvm::omp::OMP_PROC_BIND_unknown));
3656dafe87SAlexey Bataev case OMPC_schedule:
376402bcadSAlexey Bataev return llvm::StringSwitch<unsigned>(Str)
386402bcadSAlexey Bataev #define OPENMP_SCHEDULE_KIND(Name) \
396402bcadSAlexey Bataev .Case(#Name, static_cast<unsigned>(OMPC_SCHEDULE_##Name))
406402bcadSAlexey Bataev #define OPENMP_SCHEDULE_MODIFIER(Name) \
416402bcadSAlexey Bataev .Case(#Name, static_cast<unsigned>(OMPC_SCHEDULE_MODIFIER_##Name))
4256dafe87SAlexey Bataev #include "clang/Basic/OpenMPKinds.def"
4356dafe87SAlexey Bataev .Default(OMPC_SCHEDULE_unknown);
440a7cc078SDavid Pagan case OMPC_depend: {
450a7cc078SDavid Pagan unsigned Type = llvm::StringSwitch<unsigned>(Str)
461c2cfbc3SAlexey Bataev #define OPENMP_DEPEND_KIND(Name) .Case(#Name, OMPC_DEPEND_##Name)
471c2cfbc3SAlexey Bataev #include "clang/Basic/OpenMPKinds.def"
481c2cfbc3SAlexey Bataev .Default(OMPC_DEPEND_unknown);
490a7cc078SDavid Pagan if (LangOpts.OpenMP < 51 && Type == OMPC_DEPEND_inoutset)
500a7cc078SDavid Pagan return OMPC_DEPEND_unknown;
510a7cc078SDavid Pagan return Type;
520a7cc078SDavid Pagan }
53182227bdSAlexey Bataev case OMPC_linear:
54182227bdSAlexey Bataev return llvm::StringSwitch<OpenMPLinearClauseKind>(Str)
55182227bdSAlexey Bataev #define OPENMP_LINEAR_KIND(Name) .Case(#Name, OMPC_LINEAR_##Name)
56182227bdSAlexey Bataev #include "clang/Basic/OpenMPKinds.def"
57182227bdSAlexey Bataev .Default(OMPC_LINEAR_unknown);
58aa82c40fSJoel E. Denny case OMPC_map: {
59aa82c40fSJoel E. Denny unsigned Type = llvm::StringSwitch<unsigned>(Str)
60ef57943eSKelvin Li #define OPENMP_MAP_KIND(Name) \
61ef57943eSKelvin Li .Case(#Name, static_cast<unsigned>(OMPC_MAP_##Name))
62ef57943eSKelvin Li #define OPENMP_MAP_MODIFIER_KIND(Name) \
63ef57943eSKelvin Li .Case(#Name, static_cast<unsigned>(OMPC_MAP_MODIFIER_##Name))
640bff7afaSKelvin Li #include "clang/Basic/OpenMPKinds.def"
650bff7afaSKelvin Li .Default(OMPC_MAP_unknown);
6683ddfa0dSJoel E. Denny if (LangOpts.OpenMP < 51 && Type == OMPC_MAP_MODIFIER_present)
6783ddfa0dSJoel E. Denny return OMPC_MAP_MODIFIER_unknown;
6883ddfa0dSJoel E. Denny if (!LangOpts.OpenMPExtensions && Type == OMPC_MAP_MODIFIER_ompx_hold)
69aa82c40fSJoel E. Denny return OMPC_MAP_MODIFIER_unknown;
70aa82c40fSJoel E. Denny return Type;
71aa82c40fSJoel E. Denny }
7201f670dfSMichael Kruse case OMPC_to:
739f2f3b9dSJoel E. Denny case OMPC_from: {
749f2f3b9dSJoel E. Denny unsigned Type = llvm::StringSwitch<unsigned>(Str)
75a3d1f88fSJoel E. Denny #define OPENMP_MOTION_MODIFIER_KIND(Name) \
76a3d1f88fSJoel E. Denny .Case(#Name, static_cast<unsigned>(OMPC_MOTION_MODIFIER_##Name))
770336c75cSMichael Kruse #include "clang/Basic/OpenMPKinds.def"
78a3d1f88fSJoel E. Denny .Default(OMPC_MOTION_MODIFIER_unknown);
7983ddfa0dSJoel E. Denny if (LangOpts.OpenMP < 51 && Type == OMPC_MOTION_MODIFIER_present)
809f2f3b9dSJoel E. Denny return OMPC_MOTION_MODIFIER_unknown;
819f2f3b9dSJoel E. Denny return Type;
829f2f3b9dSJoel E. Denny }
83b4adf55eSCarlo Bertolli case OMPC_dist_schedule:
84b4adf55eSCarlo Bertolli return llvm::StringSwitch<OpenMPDistScheduleClauseKind>(Str)
85b4adf55eSCarlo Bertolli #define OPENMP_DIST_SCHEDULE_KIND(Name) .Case(#Name, OMPC_DIST_SCHEDULE_##Name)
86b4adf55eSCarlo Bertolli #include "clang/Basic/OpenMPKinds.def"
87b4adf55eSCarlo Bertolli .Default(OMPC_DIST_SCHEDULE_unknown);
883cf89040SArpith Chacko Jacob case OMPC_defaultmap:
893cf89040SArpith Chacko Jacob return llvm::StringSwitch<unsigned>(Str)
903cf89040SArpith Chacko Jacob #define OPENMP_DEFAULTMAP_KIND(Name) \
913cf89040SArpith Chacko Jacob .Case(#Name, static_cast<unsigned>(OMPC_DEFAULTMAP_##Name))
923cf89040SArpith Chacko Jacob #define OPENMP_DEFAULTMAP_MODIFIER(Name) \
933cf89040SArpith Chacko Jacob .Case(#Name, static_cast<unsigned>(OMPC_DEFAULTMAP_MODIFIER_##Name))
943cf89040SArpith Chacko Jacob #include "clang/Basic/OpenMPKinds.def"
953cf89040SArpith Chacko Jacob .Default(OMPC_DEFAULTMAP_unknown);
967a2a27c4SPatrick Lyster case OMPC_atomic_default_mem_order:
977a2a27c4SPatrick Lyster return llvm::StringSwitch<OpenMPAtomicDefaultMemOrderClauseKind>(Str)
987a2a27c4SPatrick Lyster #define OPENMP_ATOMIC_DEFAULT_MEM_ORDER_KIND(Name) \
997a2a27c4SPatrick Lyster .Case(#Name, OMPC_ATOMIC_DEFAULT_MEM_ORDER_##Name)
1007a2a27c4SPatrick Lyster #include "clang/Basic/OpenMPKinds.def"
1017a2a27c4SPatrick Lyster .Default(OMPC_ATOMIC_DEFAULT_MEM_ORDER_unknown);
102729e242aSAlexey Bataev case OMPC_device_type:
103729e242aSAlexey Bataev return llvm::StringSwitch<OpenMPDeviceType>(Str)
104729e242aSAlexey Bataev #define OPENMP_DEVICE_TYPE_KIND(Name) .Case(#Name, OMPC_DEVICE_TYPE_##Name)
105729e242aSAlexey Bataev #include "clang/Basic/OpenMPKinds.def"
106729e242aSAlexey Bataev .Default(OMPC_DEVICE_TYPE_unknown);
10793dc40ddSAlexey Bataev case OMPC_lastprivate:
10893dc40ddSAlexey Bataev return llvm::StringSwitch<OpenMPLastprivateModifier>(Str)
10993dc40ddSAlexey Bataev #define OPENMP_LASTPRIVATE_KIND(Name) .Case(#Name, OMPC_LASTPRIVATE_##Name)
11093dc40ddSAlexey Bataev #include "clang/Basic/OpenMPKinds.def"
11193dc40ddSAlexey Bataev .Default(OMPC_LASTPRIVATE_unknown);
112cb8e6914SAlexey Bataev case OMPC_order:
113cb8e6914SAlexey Bataev return llvm::StringSwitch<OpenMPOrderClauseKind>(Str)
114cb8e6914SAlexey Bataev #define OPENMP_ORDER_KIND(Name) .Case(#Name, OMPC_ORDER_##Name)
115cb8e6914SAlexey Bataev #include "clang/Basic/OpenMPKinds.def"
116cb8e6914SAlexey Bataev .Default(OMPC_ORDER_unknown);
11782f7c207SAlexey Bataev case OMPC_update:
11882f7c207SAlexey Bataev return llvm::StringSwitch<OpenMPDependClauseKind>(Str)
11982f7c207SAlexey Bataev #define OPENMP_DEPEND_KIND(Name) .Case(#Name, OMPC_DEPEND_##Name)
12082f7c207SAlexey Bataev #include "clang/Basic/OpenMPKinds.def"
12182f7c207SAlexey Bataev .Default(OMPC_DEPEND_unknown);
1222f8894a5SAlexey Bataev case OMPC_device:
1232f8894a5SAlexey Bataev return llvm::StringSwitch<OpenMPDeviceClauseModifier>(Str)
1242f8894a5SAlexey Bataev #define OPENMP_DEVICE_MODIFIER(Name) .Case(#Name, OMPC_DEVICE_##Name)
1252f8894a5SAlexey Bataev #include "clang/Basic/OpenMPKinds.def"
1262f8894a5SAlexey Bataev .Default(OMPC_DEVICE_unknown);
1271236eb6cSAlexey Bataev case OMPC_reduction:
1281236eb6cSAlexey Bataev return llvm::StringSwitch<OpenMPReductionClauseModifier>(Str)
1291236eb6cSAlexey Bataev #define OPENMP_REDUCTION_MODIFIER(Name) .Case(#Name, OMPC_REDUCTION_##Name)
1301236eb6cSAlexey Bataev #include "clang/Basic/OpenMPKinds.def"
1311236eb6cSAlexey Bataev .Default(OMPC_REDUCTION_unknown);
132fb4c4510SMike Rice case OMPC_adjust_args:
133fb4c4510SMike Rice return llvm::StringSwitch<OpenMPAdjustArgsOpKind>(Str)
134fb4c4510SMike Rice #define OPENMP_ADJUST_ARGS_KIND(Name) .Case(#Name, OMPC_ADJUST_ARGS_##Name)
135fb4c4510SMike Rice #include "clang/Basic/OpenMPKinds.def"
136fb4c4510SMike Rice .Default(OMPC_ADJUST_ARGS_unknown);
1374eac7bcfSMike Rice case OMPC_bind:
1384eac7bcfSMike Rice return llvm::StringSwitch<unsigned>(Str)
1394eac7bcfSMike Rice #define OPENMP_BIND_KIND(Name) .Case(#Name, OMPC_BIND_##Name)
1404eac7bcfSMike Rice #include "clang/Basic/OpenMPKinds.def"
1414eac7bcfSMike Rice .Default(OMPC_BIND_unknown);
1425ec3eb11SAlexey Bataev case OMPC_unknown:
1435ec3eb11SAlexey Bataev case OMPC_threadprivate:
144aadd52e5SAlexey Bataev case OMPC_if:
1453778b601SAlexey Bataev case OMPC_final:
146568a833fSAlexey Bataev case OMPC_num_threads:
14762c87d25SAlexey Bataev case OMPC_safelen:
14866b15b50SAlexey Bataev case OMPC_simdlen:
1496c050052SMichael Kruse case OMPC_sizes:
1509cc10fc9SAlexey Bataev case OMPC_allocator:
151e04483eeSAlexey Bataev case OMPC_allocate:
1528bd31e69SAlexander Musman case OMPC_collapse:
1535ec3eb11SAlexey Bataev case OMPC_private:
154d5af8e47SAlexey Bataev case OMPC_firstprivate:
1553e8aa9a6SDavid Blaikie case OMPC_shared:
156169d96a2SAlexey Bataev case OMPC_task_reduction:
157fa312f33SAlexey Bataev case OMPC_in_reduction:
158f0d76e7dSAlexander Musman case OMPC_aligned:
159d48bcd8aSAlexey Bataev case OMPC_copyin:
160bae9a793SAlexey Bataev case OMPC_copyprivate:
161142e1fc9SAlexey Bataev case OMPC_ordered:
162236070f2SAlexey Bataev case OMPC_nowait:
1637aea99a3SAlexey Bataev case OMPC_untied:
16474ba3a58SAlexey Bataev case OMPC_mergeable:
1656125da92SAlexey Bataev case OMPC_flush:
166c112e941SAlexey Bataev case OMPC_depobj:
167f98b00c3SAlexey Bataev case OMPC_read:
168dea4761cSAlexey Bataev case OMPC_write:
169459dec0cSAlexey Bataev case OMPC_capture:
170c7a589a2SShilei Tian case OMPC_compare:
17182bad8b0SAlexey Bataev case OMPC_seq_cst:
172ea9166b5SAlexey Bataev case OMPC_acq_rel:
17304a830f8SAlexey Bataev case OMPC_acquire:
1749559834aSAlexey Bataev case OMPC_release:
1759a8defccSAlexey Bataev case OMPC_relaxed:
176346265e3SAlexey Bataev case OMPC_threads:
177d14d1e6fSAlexey Bataev case OMPC_simd:
178099bb8c6SKelvin Li case OMPC_num_teams:
179a15fb1a1SKelvin Li case OMPC_thread_limit:
180a056935aSAlexey Bataev case OMPC_priority:
1811fd4aed2SAlexey Bataev case OMPC_grainsize:
182b825de17SAlexey Bataev case OMPC_nogroup:
183382967a2SAlexey Bataev case OMPC_num_tasks:
18428c75417SAlexey Bataev case OMPC_hint:
185e48a5fc5SAlexey Bataev case OMPC_uniform:
1862404b171SCarlo Bertolli case OMPC_use_device_ptr:
187a888fc6bSAlexey Bataev case OMPC_use_device_addr:
18870594e92SCarlo Bertolli case OMPC_is_device_ptr:
189187ccc66SJennifer Yu case OMPC_has_device_addr:
1901408f91aSKelvin Li case OMPC_unified_address:
1914a370b9fSPatrick Lyster case OMPC_unified_shared_memory:
1926bdf63bdSPatrick Lyster case OMPC_reverse_offload:
1933fe9e396SPatrick Lyster case OMPC_dynamic_allocators:
194dba792c5SAlexey Bataev case OMPC_match:
195b6e7084eSAlexey Bataev case OMPC_nontemporal:
196375437abSAlexey Bataev case OMPC_destroy:
197cb424feeSJennifer Yu case OMPC_novariants:
1987078ef47SJennifer Yu case OMPC_nocontext:
1990f0564bbSAlexey Bataev case OMPC_detach:
20006dea733SAlexey Bataev case OMPC_inclusive:
20163828a35SAlexey Bataev case OMPC_exclusive:
202b5be1c54SAlexey Bataev case OMPC_uses_allocators:
2032e499eeeSAlexey Bataev case OMPC_affinity:
204000875c1Salokmishra.besu case OMPC_when:
205d8699391SMike Rice case OMPC_append_args:
2065ec3eb11SAlexey Bataev break;
2072ddba308SValentin Clement default:
2082ddba308SValentin Clement break;
2095ec3eb11SAlexey Bataev }
2105ec3eb11SAlexey Bataev llvm_unreachable("Invalid OpenMP simple clause kind");
2115ec3eb11SAlexey Bataev }
2125ec3eb11SAlexey Bataev
getOpenMPSimpleClauseTypeName(OpenMPClauseKind Kind,unsigned Type)2135ec3eb11SAlexey Bataev const char *clang::getOpenMPSimpleClauseTypeName(OpenMPClauseKind Kind,
2145ec3eb11SAlexey Bataev unsigned Type) {
2155ec3eb11SAlexey Bataev switch (Kind) {
2165ec3eb11SAlexey Bataev case OMPC_default:
217577c9b02SAtmn Patel switch (llvm::omp::DefaultKind(Type)) {
218577c9b02SAtmn Patel #define OMP_DEFAULT_KIND(Enum, Name) \
219577c9b02SAtmn Patel case Enum: \
220577c9b02SAtmn Patel return Name;
221577c9b02SAtmn Patel #include "llvm/Frontend/OpenMP/OMPKinds.def"
2225ec3eb11SAlexey Bataev }
2235ec3eb11SAlexey Bataev llvm_unreachable("Invalid OpenMP 'default' clause type");
224bcbadb65SAlexey Bataev case OMPC_proc_bind:
225bcbadb65SAlexey Bataev switch (Type) {
2266c5d1f40SJohannes Doerfert #define OMP_PROC_BIND_KIND(Enum, Name, Value) \
2276c5d1f40SJohannes Doerfert case Value: \
2286c5d1f40SJohannes Doerfert return Name;
2296c5d1f40SJohannes Doerfert #include "llvm/Frontend/OpenMP/OMPKinds.def"
230bcbadb65SAlexey Bataev }
231bcbadb65SAlexey Bataev llvm_unreachable("Invalid OpenMP 'proc_bind' clause type");
23256dafe87SAlexey Bataev case OMPC_schedule:
23356dafe87SAlexey Bataev switch (Type) {
23456dafe87SAlexey Bataev case OMPC_SCHEDULE_unknown:
2356402bcadSAlexey Bataev case OMPC_SCHEDULE_MODIFIER_last:
23656dafe87SAlexey Bataev return "unknown";
23756dafe87SAlexey Bataev #define OPENMP_SCHEDULE_KIND(Name) \
23856dafe87SAlexey Bataev case OMPC_SCHEDULE_##Name: \
23956dafe87SAlexey Bataev return #Name;
2406402bcadSAlexey Bataev #define OPENMP_SCHEDULE_MODIFIER(Name) \
2416402bcadSAlexey Bataev case OMPC_SCHEDULE_MODIFIER_##Name: \
2426402bcadSAlexey Bataev return #Name;
24356dafe87SAlexey Bataev #include "clang/Basic/OpenMPKinds.def"
24456dafe87SAlexey Bataev }
2456402bcadSAlexey Bataev llvm_unreachable("Invalid OpenMP 'schedule' clause type");
2461c2cfbc3SAlexey Bataev case OMPC_depend:
2471c2cfbc3SAlexey Bataev switch (Type) {
2481c2cfbc3SAlexey Bataev case OMPC_DEPEND_unknown:
2491c2cfbc3SAlexey Bataev return "unknown";
2501c2cfbc3SAlexey Bataev #define OPENMP_DEPEND_KIND(Name) \
2511c2cfbc3SAlexey Bataev case OMPC_DEPEND_##Name: \
2521c2cfbc3SAlexey Bataev return #Name;
2531c2cfbc3SAlexey Bataev #include "clang/Basic/OpenMPKinds.def"
2541c2cfbc3SAlexey Bataev }
2556402bcadSAlexey Bataev llvm_unreachable("Invalid OpenMP 'depend' clause type");
256182227bdSAlexey Bataev case OMPC_linear:
257182227bdSAlexey Bataev switch (Type) {
258182227bdSAlexey Bataev case OMPC_LINEAR_unknown:
259182227bdSAlexey Bataev return "unknown";
260182227bdSAlexey Bataev #define OPENMP_LINEAR_KIND(Name) \
261182227bdSAlexey Bataev case OMPC_LINEAR_##Name: \
262182227bdSAlexey Bataev return #Name;
263182227bdSAlexey Bataev #include "clang/Basic/OpenMPKinds.def"
264182227bdSAlexey Bataev }
265182227bdSAlexey Bataev llvm_unreachable("Invalid OpenMP 'linear' clause type");
2660bff7afaSKelvin Li case OMPC_map:
2670bff7afaSKelvin Li switch (Type) {
2680bff7afaSKelvin Li case OMPC_MAP_unknown:
269ef57943eSKelvin Li case OMPC_MAP_MODIFIER_last:
2700bff7afaSKelvin Li return "unknown";
2710bff7afaSKelvin Li #define OPENMP_MAP_KIND(Name) \
2720bff7afaSKelvin Li case OMPC_MAP_##Name: \
2730bff7afaSKelvin Li return #Name;
274ef57943eSKelvin Li #define OPENMP_MAP_MODIFIER_KIND(Name) \
275ef57943eSKelvin Li case OMPC_MAP_MODIFIER_##Name: \
276ef57943eSKelvin Li return #Name;
2770bff7afaSKelvin Li #include "clang/Basic/OpenMPKinds.def"
2780bff7afaSKelvin Li default:
2790bff7afaSKelvin Li break;
2800bff7afaSKelvin Li }
2810bff7afaSKelvin Li llvm_unreachable("Invalid OpenMP 'map' clause type");
28201f670dfSMichael Kruse case OMPC_to:
2830336c75cSMichael Kruse case OMPC_from:
2840336c75cSMichael Kruse switch (Type) {
285a3d1f88fSJoel E. Denny case OMPC_MOTION_MODIFIER_unknown:
2860336c75cSMichael Kruse return "unknown";
287a3d1f88fSJoel E. Denny #define OPENMP_MOTION_MODIFIER_KIND(Name) \
288a3d1f88fSJoel E. Denny case OMPC_MOTION_MODIFIER_##Name: \
2890336c75cSMichael Kruse return #Name;
2900336c75cSMichael Kruse #include "clang/Basic/OpenMPKinds.def"
2910336c75cSMichael Kruse default:
2920336c75cSMichael Kruse break;
2930336c75cSMichael Kruse }
294a3d1f88fSJoel E. Denny llvm_unreachable("Invalid OpenMP 'to' or 'from' clause type");
295b4adf55eSCarlo Bertolli case OMPC_dist_schedule:
296b4adf55eSCarlo Bertolli switch (Type) {
297b4adf55eSCarlo Bertolli case OMPC_DIST_SCHEDULE_unknown:
298b4adf55eSCarlo Bertolli return "unknown";
299b4adf55eSCarlo Bertolli #define OPENMP_DIST_SCHEDULE_KIND(Name) \
300b4adf55eSCarlo Bertolli case OMPC_DIST_SCHEDULE_##Name: \
301b4adf55eSCarlo Bertolli return #Name;
302b4adf55eSCarlo Bertolli #include "clang/Basic/OpenMPKinds.def"
303b4adf55eSCarlo Bertolli }
304b4adf55eSCarlo Bertolli llvm_unreachable("Invalid OpenMP 'dist_schedule' clause type");
3053cf89040SArpith Chacko Jacob case OMPC_defaultmap:
3063cf89040SArpith Chacko Jacob switch (Type) {
3073cf89040SArpith Chacko Jacob case OMPC_DEFAULTMAP_unknown:
3083cf89040SArpith Chacko Jacob case OMPC_DEFAULTMAP_MODIFIER_last:
3093cf89040SArpith Chacko Jacob return "unknown";
3103cf89040SArpith Chacko Jacob #define OPENMP_DEFAULTMAP_KIND(Name) \
3113cf89040SArpith Chacko Jacob case OMPC_DEFAULTMAP_##Name: \
3123cf89040SArpith Chacko Jacob return #Name;
3133cf89040SArpith Chacko Jacob #define OPENMP_DEFAULTMAP_MODIFIER(Name) \
3143cf89040SArpith Chacko Jacob case OMPC_DEFAULTMAP_MODIFIER_##Name: \
3153cf89040SArpith Chacko Jacob return #Name;
3163cf89040SArpith Chacko Jacob #include "clang/Basic/OpenMPKinds.def"
3173cf89040SArpith Chacko Jacob }
3183cf89040SArpith Chacko Jacob llvm_unreachable("Invalid OpenMP 'schedule' clause type");
3197a2a27c4SPatrick Lyster case OMPC_atomic_default_mem_order:
3207a2a27c4SPatrick Lyster switch (Type) {
3217a2a27c4SPatrick Lyster case OMPC_ATOMIC_DEFAULT_MEM_ORDER_unknown:
3227a2a27c4SPatrick Lyster return "unknown";
3237a2a27c4SPatrick Lyster #define OPENMP_ATOMIC_DEFAULT_MEM_ORDER_KIND(Name) \
3247a2a27c4SPatrick Lyster case OMPC_ATOMIC_DEFAULT_MEM_ORDER_##Name: \
3257a2a27c4SPatrick Lyster return #Name;
3267a2a27c4SPatrick Lyster #include "clang/Basic/OpenMPKinds.def"
3277a2a27c4SPatrick Lyster }
3287a2a27c4SPatrick Lyster llvm_unreachable("Invalid OpenMP 'atomic_default_mem_order' clause type");
329729e242aSAlexey Bataev case OMPC_device_type:
330729e242aSAlexey Bataev switch (Type) {
331729e242aSAlexey Bataev case OMPC_DEVICE_TYPE_unknown:
332729e242aSAlexey Bataev return "unknown";
333729e242aSAlexey Bataev #define OPENMP_DEVICE_TYPE_KIND(Name) \
334729e242aSAlexey Bataev case OMPC_DEVICE_TYPE_##Name: \
335729e242aSAlexey Bataev return #Name;
336729e242aSAlexey Bataev #include "clang/Basic/OpenMPKinds.def"
337729e242aSAlexey Bataev }
338729e242aSAlexey Bataev llvm_unreachable("Invalid OpenMP 'device_type' clause type");
33993dc40ddSAlexey Bataev case OMPC_lastprivate:
34093dc40ddSAlexey Bataev switch (Type) {
34193dc40ddSAlexey Bataev case OMPC_LASTPRIVATE_unknown:
34293dc40ddSAlexey Bataev return "unknown";
34393dc40ddSAlexey Bataev #define OPENMP_LASTPRIVATE_KIND(Name) \
34493dc40ddSAlexey Bataev case OMPC_LASTPRIVATE_##Name: \
34593dc40ddSAlexey Bataev return #Name;
34693dc40ddSAlexey Bataev #include "clang/Basic/OpenMPKinds.def"
34793dc40ddSAlexey Bataev }
34893dc40ddSAlexey Bataev llvm_unreachable("Invalid OpenMP 'lastprivate' clause type");
349cb8e6914SAlexey Bataev case OMPC_order:
350cb8e6914SAlexey Bataev switch (Type) {
351cb8e6914SAlexey Bataev case OMPC_ORDER_unknown:
352cb8e6914SAlexey Bataev return "unknown";
353cb8e6914SAlexey Bataev #define OPENMP_ORDER_KIND(Name) \
354cb8e6914SAlexey Bataev case OMPC_ORDER_##Name: \
355cb8e6914SAlexey Bataev return #Name;
356cb8e6914SAlexey Bataev #include "clang/Basic/OpenMPKinds.def"
357cb8e6914SAlexey Bataev }
358cb8e6914SAlexey Bataev llvm_unreachable("Invalid OpenMP 'order' clause type");
35982f7c207SAlexey Bataev case OMPC_update:
36082f7c207SAlexey Bataev switch (Type) {
36182f7c207SAlexey Bataev case OMPC_DEPEND_unknown:
36282f7c207SAlexey Bataev return "unknown";
36382f7c207SAlexey Bataev #define OPENMP_DEPEND_KIND(Name) \
36482f7c207SAlexey Bataev case OMPC_DEPEND_##Name: \
36582f7c207SAlexey Bataev return #Name;
36682f7c207SAlexey Bataev #include "clang/Basic/OpenMPKinds.def"
36782f7c207SAlexey Bataev }
36882f7c207SAlexey Bataev llvm_unreachable("Invalid OpenMP 'depend' clause type");
3692f8894a5SAlexey Bataev case OMPC_device:
3702f8894a5SAlexey Bataev switch (Type) {
3712f8894a5SAlexey Bataev case OMPC_DEVICE_unknown:
3722f8894a5SAlexey Bataev return "unknown";
3732f8894a5SAlexey Bataev #define OPENMP_DEVICE_MODIFIER(Name) \
3742f8894a5SAlexey Bataev case OMPC_DEVICE_##Name: \
3752f8894a5SAlexey Bataev return #Name;
3762f8894a5SAlexey Bataev #include "clang/Basic/OpenMPKinds.def"
3772f8894a5SAlexey Bataev }
3782f8894a5SAlexey Bataev llvm_unreachable("Invalid OpenMP 'device' clause modifier");
3791236eb6cSAlexey Bataev case OMPC_reduction:
3801236eb6cSAlexey Bataev switch (Type) {
3811236eb6cSAlexey Bataev case OMPC_REDUCTION_unknown:
3821236eb6cSAlexey Bataev return "unknown";
3831236eb6cSAlexey Bataev #define OPENMP_REDUCTION_MODIFIER(Name) \
3841236eb6cSAlexey Bataev case OMPC_REDUCTION_##Name: \
3851236eb6cSAlexey Bataev return #Name;
3861236eb6cSAlexey Bataev #include "clang/Basic/OpenMPKinds.def"
3871236eb6cSAlexey Bataev }
3881236eb6cSAlexey Bataev llvm_unreachable("Invalid OpenMP 'reduction' clause modifier");
389fb4c4510SMike Rice case OMPC_adjust_args:
390fb4c4510SMike Rice switch (Type) {
391fb4c4510SMike Rice case OMPC_ADJUST_ARGS_unknown:
392fb4c4510SMike Rice return "unknown";
393fb4c4510SMike Rice #define OPENMP_ADJUST_ARGS_KIND(Name) \
394fb4c4510SMike Rice case OMPC_ADJUST_ARGS_##Name: \
395fb4c4510SMike Rice return #Name;
396fb4c4510SMike Rice #include "clang/Basic/OpenMPKinds.def"
397fb4c4510SMike Rice }
398fb4c4510SMike Rice llvm_unreachable("Invalid OpenMP 'adjust_args' clause kind");
3994eac7bcfSMike Rice case OMPC_bind:
4004eac7bcfSMike Rice switch (Type) {
4014eac7bcfSMike Rice case OMPC_BIND_unknown:
4024eac7bcfSMike Rice return "unknown";
4034eac7bcfSMike Rice #define OPENMP_BIND_KIND(Name) \
4044eac7bcfSMike Rice case OMPC_BIND_##Name: \
4054eac7bcfSMike Rice return #Name;
4064eac7bcfSMike Rice #include "clang/Basic/OpenMPKinds.def"
4074eac7bcfSMike Rice }
4084eac7bcfSMike Rice llvm_unreachable("Invalid OpenMP 'bind' clause type");
4095ec3eb11SAlexey Bataev case OMPC_unknown:
4105ec3eb11SAlexey Bataev case OMPC_threadprivate:
411aadd52e5SAlexey Bataev case OMPC_if:
4123778b601SAlexey Bataev case OMPC_final:
413568a833fSAlexey Bataev case OMPC_num_threads:
41462c87d25SAlexey Bataev case OMPC_safelen:
41566b15b50SAlexey Bataev case OMPC_simdlen:
4166c050052SMichael Kruse case OMPC_sizes:
4179cc10fc9SAlexey Bataev case OMPC_allocator:
418e04483eeSAlexey Bataev case OMPC_allocate:
4198bd31e69SAlexander Musman case OMPC_collapse:
4205ec3eb11SAlexey Bataev case OMPC_private:
421d5af8e47SAlexey Bataev case OMPC_firstprivate:
4223e8aa9a6SDavid Blaikie case OMPC_shared:
423169d96a2SAlexey Bataev case OMPC_task_reduction:
424fa312f33SAlexey Bataev case OMPC_in_reduction:
425f0d76e7dSAlexander Musman case OMPC_aligned:
426d48bcd8aSAlexey Bataev case OMPC_copyin:
427bae9a793SAlexey Bataev case OMPC_copyprivate:
428142e1fc9SAlexey Bataev case OMPC_ordered:
429236070f2SAlexey Bataev case OMPC_nowait:
4307aea99a3SAlexey Bataev case OMPC_untied:
43174ba3a58SAlexey Bataev case OMPC_mergeable:
4326125da92SAlexey Bataev case OMPC_flush:
433c112e941SAlexey Bataev case OMPC_depobj:
434f98b00c3SAlexey Bataev case OMPC_read:
435dea4761cSAlexey Bataev case OMPC_write:
436459dec0cSAlexey Bataev case OMPC_capture:
437c7a589a2SShilei Tian case OMPC_compare:
43882bad8b0SAlexey Bataev case OMPC_seq_cst:
439ea9166b5SAlexey Bataev case OMPC_acq_rel:
44004a830f8SAlexey Bataev case OMPC_acquire:
4419559834aSAlexey Bataev case OMPC_release:
4429a8defccSAlexey Bataev case OMPC_relaxed:
443346265e3SAlexey Bataev case OMPC_threads:
444d14d1e6fSAlexey Bataev case OMPC_simd:
445099bb8c6SKelvin Li case OMPC_num_teams:
446a15fb1a1SKelvin Li case OMPC_thread_limit:
447a056935aSAlexey Bataev case OMPC_priority:
4481fd4aed2SAlexey Bataev case OMPC_grainsize:
449b825de17SAlexey Bataev case OMPC_nogroup:
450382967a2SAlexey Bataev case OMPC_num_tasks:
45128c75417SAlexey Bataev case OMPC_hint:
452e48a5fc5SAlexey Bataev case OMPC_uniform:
4532404b171SCarlo Bertolli case OMPC_use_device_ptr:
454a888fc6bSAlexey Bataev case OMPC_use_device_addr:
45570594e92SCarlo Bertolli case OMPC_is_device_ptr:
456187ccc66SJennifer Yu case OMPC_has_device_addr:
4571408f91aSKelvin Li case OMPC_unified_address:
4584a370b9fSPatrick Lyster case OMPC_unified_shared_memory:
4596bdf63bdSPatrick Lyster case OMPC_reverse_offload:
4603fe9e396SPatrick Lyster case OMPC_dynamic_allocators:
461dba792c5SAlexey Bataev case OMPC_match:
462b6e7084eSAlexey Bataev case OMPC_nontemporal:
463375437abSAlexey Bataev case OMPC_destroy:
4640f0564bbSAlexey Bataev case OMPC_detach:
465cb424feeSJennifer Yu case OMPC_novariants:
4667078ef47SJennifer Yu case OMPC_nocontext:
46706dea733SAlexey Bataev case OMPC_inclusive:
46863828a35SAlexey Bataev case OMPC_exclusive:
469b5be1c54SAlexey Bataev case OMPC_uses_allocators:
4702e499eeeSAlexey Bataev case OMPC_affinity:
471000875c1Salokmishra.besu case OMPC_when:
472d8699391SMike Rice case OMPC_append_args:
4735ec3eb11SAlexey Bataev break;
4742ddba308SValentin Clement default:
4752ddba308SValentin Clement break;
4765ec3eb11SAlexey Bataev }
4775ec3eb11SAlexey Bataev llvm_unreachable("Invalid OpenMP simple clause kind");
4785ec3eb11SAlexey Bataev }
4795ec3eb11SAlexey Bataev
isOpenMPLoopDirective(OpenMPDirectiveKind DKind)480f29276edSAlexey Bataev bool clang::isOpenMPLoopDirective(OpenMPDirectiveKind DKind) {
481e4e893bbSAlexander Musman return DKind == OMPD_simd || DKind == OMPD_for || DKind == OMPD_for_simd ||
48249f6e78dSAlexey Bataev DKind == OMPD_parallel_for || DKind == OMPD_parallel_for_simd ||
48305bebb57SArpith Chacko Jacob DKind == OMPD_taskloop || DKind == OMPD_taskloop_simd ||
484b8552abfSAlexey Bataev DKind == OMPD_master_taskloop || DKind == OMPD_master_taskloop_simd ||
48514a388f4SAlexey Bataev DKind == OMPD_parallel_master_taskloop ||
48614a388f4SAlexey Bataev DKind == OMPD_parallel_master_taskloop_simd ||
48773e5d7bdSFazlay Rabbi DKind == OMPD_masked_taskloop || DKind == OMPD_masked_taskloop_simd ||
488d64ba896SFazlay Rabbi DKind == OMPD_parallel_masked_taskloop || DKind == OMPD_distribute ||
489*38bcd483SFazlay Rabbi DKind == OMPD_parallel_masked_taskloop_simd ||
490d64ba896SFazlay Rabbi DKind == OMPD_target_parallel_for ||
4914a39add0SKelvin Li DKind == OMPD_distribute_parallel_for ||
492787f3fccSKelvin Li DKind == OMPD_distribute_parallel_for_simd ||
493a579b919SKelvin Li DKind == OMPD_distribute_simd ||
49402532876SKelvin Li DKind == OMPD_target_parallel_for_simd || DKind == OMPD_target_simd ||
495579e41ceSKelvin Li DKind == OMPD_teams_distribute ||
496579e41ceSKelvin Li DKind == OMPD_teams_distribute_simd ||
4977ade93f5SKelvin Li DKind == OMPD_teams_distribute_parallel_for_simd ||
49883c451e9SKelvin Li DKind == OMPD_teams_distribute_parallel_for ||
49980e8f562SKelvin Li DKind == OMPD_target_teams_distribute ||
5001851df56SKelvin Li DKind == OMPD_target_teams_distribute_parallel_for ||
501da681187SKelvin Li DKind == OMPD_target_teams_distribute_parallel_for_simd ||
502a2223612SMichael Kruse DKind == OMPD_target_teams_distribute_simd || DKind == OMPD_tile ||
5036bd8dc91SMike Rice DKind == OMPD_unroll || DKind == OMPD_loop ||
5042cedaee6SMike Rice DKind == OMPD_teams_loop || DKind == OMPD_target_teams_loop ||
505f82ec553SMike Rice DKind == OMPD_parallel_loop || DKind == OMPD_target_parallel_loop;
506f29276edSAlexey Bataev }
507f29276edSAlexey Bataev
isOpenMPWorksharingDirective(OpenMPDirectiveKind DKind)508f29276edSAlexey Bataev bool clang::isOpenMPWorksharingDirective(OpenMPDirectiveKind DKind) {
509e4e893bbSAlexander Musman return DKind == OMPD_for || DKind == OMPD_for_simd ||
510e4e893bbSAlexander Musman DKind == OMPD_sections || DKind == OMPD_section ||
51184d0b3efSAlexey Bataev DKind == OMPD_single || DKind == OMPD_parallel_for ||
51205bebb57SArpith Chacko Jacob DKind == OMPD_parallel_for_simd || DKind == OMPD_parallel_sections ||
5139925f156SCarlo Bertolli DKind == OMPD_target_parallel_for ||
5144a39add0SKelvin Li DKind == OMPD_distribute_parallel_for ||
515a579b919SKelvin Li DKind == OMPD_distribute_parallel_for_simd ||
516579e41ceSKelvin Li DKind == OMPD_target_parallel_for_simd ||
5177ade93f5SKelvin Li DKind == OMPD_teams_distribute_parallel_for_simd ||
51880e8f562SKelvin Li DKind == OMPD_teams_distribute_parallel_for ||
5191851df56SKelvin Li DKind == OMPD_target_teams_distribute_parallel_for ||
5201851df56SKelvin Li DKind == OMPD_target_teams_distribute_parallel_for_simd;
521f29276edSAlexey Bataev }
522f29276edSAlexey Bataev
isOpenMPTaskLoopDirective(OpenMPDirectiveKind DKind)5230a6ed84aSAlexey Bataev bool clang::isOpenMPTaskLoopDirective(OpenMPDirectiveKind DKind) {
52460e51c48SAlexey Bataev return DKind == OMPD_taskloop || DKind == OMPD_taskloop_simd ||
525b8552abfSAlexey Bataev DKind == OMPD_master_taskloop || DKind == OMPD_master_taskloop_simd ||
52614a388f4SAlexey Bataev DKind == OMPD_parallel_master_taskloop ||
52773e5d7bdSFazlay Rabbi DKind == OMPD_masked_taskloop || DKind == OMPD_masked_taskloop_simd ||
528d64ba896SFazlay Rabbi DKind == OMPD_parallel_masked_taskloop ||
529*38bcd483SFazlay Rabbi DKind == OMPD_parallel_masked_taskloop_simd ||
53014a388f4SAlexey Bataev DKind == OMPD_parallel_master_taskloop_simd;
5310a6ed84aSAlexey Bataev }
5320a6ed84aSAlexey Bataev
isOpenMPParallelDirective(OpenMPDirectiveKind DKind)533f29276edSAlexey Bataev bool clang::isOpenMPParallelDirective(OpenMPDirectiveKind DKind) {
53484d0b3efSAlexey Bataev return DKind == OMPD_parallel || DKind == OMPD_parallel_for ||
53505bebb57SArpith Chacko Jacob DKind == OMPD_parallel_for_simd || DKind == OMPD_parallel_sections ||
5369925f156SCarlo Bertolli DKind == OMPD_target_parallel || DKind == OMPD_target_parallel_for ||
5374a39add0SKelvin Li DKind == OMPD_distribute_parallel_for ||
538a579b919SKelvin Li DKind == OMPD_distribute_parallel_for_simd ||
5397ade93f5SKelvin Li DKind == OMPD_target_parallel_for_simd ||
5407ade93f5SKelvin Li DKind == OMPD_teams_distribute_parallel_for ||
54180e8f562SKelvin Li DKind == OMPD_teams_distribute_parallel_for_simd ||
5421851df56SKelvin Li DKind == OMPD_target_teams_distribute_parallel_for ||
5435bbceadfSAlexey Bataev DKind == OMPD_target_teams_distribute_parallel_for_simd ||
544bb83f8e7SJennifer Yu DKind == OMPD_parallel_master || DKind == OMPD_parallel_masked ||
54514a388f4SAlexey Bataev DKind == OMPD_parallel_master_taskloop ||
5462cedaee6SMike Rice DKind == OMPD_parallel_master_taskloop_simd ||
547d64ba896SFazlay Rabbi DKind == OMPD_parallel_masked_taskloop ||
548*38bcd483SFazlay Rabbi DKind == OMPD_parallel_masked_taskloop_simd ||
549f82ec553SMike Rice DKind == OMPD_parallel_loop || DKind == OMPD_target_parallel_loop;
550f29276edSAlexey Bataev }
551f29276edSAlexey Bataev
isOpenMPTargetExecutionDirective(OpenMPDirectiveKind DKind)5523d58f269SArpith Chacko Jacob bool clang::isOpenMPTargetExecutionDirective(OpenMPDirectiveKind DKind) {
55305bebb57SArpith Chacko Jacob return DKind == OMPD_target || DKind == OMPD_target_parallel ||
554a579b919SKelvin Li DKind == OMPD_target_parallel_for ||
555bf594a56SKelvin Li DKind == OMPD_target_parallel_for_simd || DKind == OMPD_target_simd ||
55680e8f562SKelvin Li DKind == OMPD_target_teams || DKind == OMPD_target_teams_distribute ||
5571851df56SKelvin Li DKind == OMPD_target_teams_distribute_parallel_for ||
558da681187SKelvin Li DKind == OMPD_target_teams_distribute_parallel_for_simd ||
5596bd8dc91SMike Rice DKind == OMPD_target_teams_distribute_simd ||
560f82ec553SMike Rice DKind == OMPD_target_teams_loop || DKind == OMPD_target_parallel_loop;
5613d58f269SArpith Chacko Jacob }
5623d58f269SArpith Chacko Jacob
isOpenMPTargetDataManagementDirective(OpenMPDirectiveKind DKind)5633d58f269SArpith Chacko Jacob bool clang::isOpenMPTargetDataManagementDirective(OpenMPDirectiveKind DKind) {
5643d58f269SArpith Chacko Jacob return DKind == OMPD_target_data || DKind == OMPD_target_enter_data ||
565686c70c3SSamuel Antao DKind == OMPD_target_exit_data || DKind == OMPD_target_update;
5664be30e92SSamuel Antao }
5674be30e92SSamuel Antao
isOpenMPNestingTeamsDirective(OpenMPDirectiveKind DKind)568bf594a56SKelvin Li bool clang::isOpenMPNestingTeamsDirective(OpenMPDirectiveKind DKind) {
5694e325f77SKelvin Li return DKind == OMPD_teams || DKind == OMPD_teams_distribute ||
570579e41ceSKelvin Li DKind == OMPD_teams_distribute_simd ||
5717ade93f5SKelvin Li DKind == OMPD_teams_distribute_parallel_for_simd ||
57279f661edSMike Rice DKind == OMPD_teams_distribute_parallel_for ||
57379f661edSMike Rice DKind == OMPD_teams_loop;
574bf594a56SKelvin Li }
575bf594a56SKelvin Li
isOpenMPTeamsDirective(OpenMPDirectiveKind DKind)576bf594a56SKelvin Li bool clang::isOpenMPTeamsDirective(OpenMPDirectiveKind DKind) {
5776bd8dc91SMike Rice return isOpenMPNestingTeamsDirective(DKind) || DKind == OMPD_target_teams ||
5786bd8dc91SMike Rice DKind == OMPD_target_teams_distribute ||
5791851df56SKelvin Li DKind == OMPD_target_teams_distribute_parallel_for ||
580da681187SKelvin Li DKind == OMPD_target_teams_distribute_parallel_for_simd ||
5816bd8dc91SMike Rice DKind == OMPD_target_teams_distribute_simd ||
5826bd8dc91SMike Rice DKind == OMPD_target_teams_loop;
58313314bf5SAlexey Bataev }
58413314bf5SAlexey Bataev
isOpenMPSimdDirective(OpenMPDirectiveKind DKind)585f29276edSAlexey Bataev bool clang::isOpenMPSimdDirective(OpenMPDirectiveKind DKind) {
586e4e893bbSAlexander Musman return DKind == OMPD_simd || DKind == OMPD_for_simd ||
5874a39add0SKelvin Li DKind == OMPD_parallel_for_simd || DKind == OMPD_taskloop_simd ||
588b8552abfSAlexey Bataev DKind == OMPD_master_taskloop_simd ||
58973e5d7bdSFazlay Rabbi DKind == OMPD_masked_taskloop_simd ||
59014a388f4SAlexey Bataev DKind == OMPD_parallel_master_taskloop_simd ||
591*38bcd483SFazlay Rabbi DKind == OMPD_parallel_masked_taskloop_simd ||
592787f3fccSKelvin Li DKind == OMPD_distribute_parallel_for_simd ||
5934e325f77SKelvin Li DKind == OMPD_distribute_simd || DKind == OMPD_target_simd ||
594579e41ceSKelvin Li DKind == OMPD_teams_distribute_simd ||
5951851df56SKelvin Li DKind == OMPD_teams_distribute_parallel_for_simd ||
596da681187SKelvin Li DKind == OMPD_target_teams_distribute_parallel_for_simd ||
5979a5e64f5SAlexey Bataev DKind == OMPD_target_teams_distribute_simd ||
5989a5e64f5SAlexey Bataev DKind == OMPD_target_parallel_for_simd;
599f29276edSAlexey Bataev }
600f29276edSAlexey Bataev
isOpenMPNestingDistributeDirective(OpenMPDirectiveKind Kind)60102532876SKelvin Li bool clang::isOpenMPNestingDistributeDirective(OpenMPDirectiveKind Kind) {
6024a39add0SKelvin Li return Kind == OMPD_distribute || Kind == OMPD_distribute_parallel_for ||
603787f3fccSKelvin Li Kind == OMPD_distribute_parallel_for_simd ||
604787f3fccSKelvin Li Kind == OMPD_distribute_simd;
6054a39add0SKelvin Li // TODO add next directives.
6066200a3d0SCarlo Bertolli }
6076200a3d0SCarlo Bertolli
isOpenMPDistributeDirective(OpenMPDirectiveKind Kind)60802532876SKelvin Li bool clang::isOpenMPDistributeDirective(OpenMPDirectiveKind Kind) {
60902532876SKelvin Li return isOpenMPNestingDistributeDirective(Kind) ||
610579e41ceSKelvin Li Kind == OMPD_teams_distribute || Kind == OMPD_teams_distribute_simd ||
6117ade93f5SKelvin Li Kind == OMPD_teams_distribute_parallel_for_simd ||
61283c451e9SKelvin Li Kind == OMPD_teams_distribute_parallel_for ||
61380e8f562SKelvin Li Kind == OMPD_target_teams_distribute ||
6141851df56SKelvin Li Kind == OMPD_target_teams_distribute_parallel_for ||
615da681187SKelvin Li Kind == OMPD_target_teams_distribute_parallel_for_simd ||
616da681187SKelvin Li Kind == OMPD_target_teams_distribute_simd;
61702532876SKelvin Li }
61802532876SKelvin Li
isOpenMPGenericLoopDirective(OpenMPDirectiveKind Kind)6196f9c2516SMike Rice bool clang::isOpenMPGenericLoopDirective(OpenMPDirectiveKind Kind) {
6206bd8dc91SMike Rice return Kind == OMPD_loop || Kind == OMPD_teams_loop ||
621f82ec553SMike Rice Kind == OMPD_target_teams_loop || Kind == OMPD_parallel_loop ||
622f82ec553SMike Rice Kind == OMPD_target_parallel_loop;
6236f9c2516SMike Rice }
6246f9c2516SMike Rice
isOpenMPPrivate(OpenMPClauseKind Kind)625f29276edSAlexey Bataev bool clang::isOpenMPPrivate(OpenMPClauseKind Kind) {
626f29276edSAlexey Bataev return Kind == OMPC_private || Kind == OMPC_firstprivate ||
627f29276edSAlexey Bataev Kind == OMPC_lastprivate || Kind == OMPC_linear ||
628fa312f33SAlexey Bataev Kind == OMPC_reduction || Kind == OMPC_task_reduction ||
629fa312f33SAlexey Bataev Kind == OMPC_in_reduction; // TODO add next clauses like 'reduction'.
630f29276edSAlexey Bataev }
631f29276edSAlexey Bataev
isOpenMPThreadPrivate(OpenMPClauseKind Kind)632f29276edSAlexey Bataev bool clang::isOpenMPThreadPrivate(OpenMPClauseKind Kind) {
633f56f98c9SAlexey Bataev return Kind == OMPC_threadprivate || Kind == OMPC_copyin;
634f29276edSAlexey Bataev }
635f29276edSAlexey Bataev
isOpenMPTaskingDirective(OpenMPDirectiveKind Kind)63635aaee63SAlexey Bataev bool clang::isOpenMPTaskingDirective(OpenMPDirectiveKind Kind) {
63735aaee63SAlexey Bataev return Kind == OMPD_task || isOpenMPTaskLoopDirective(Kind);
63835aaee63SAlexey Bataev }
6399925f156SCarlo Bertolli
isOpenMPLoopBoundSharingDirective(OpenMPDirectiveKind Kind)6409925f156SCarlo Bertolli bool clang::isOpenMPLoopBoundSharingDirective(OpenMPDirectiveKind Kind) {
6414a39add0SKelvin Li return Kind == OMPD_distribute_parallel_for ||
642787f3fccSKelvin Li Kind == OMPD_distribute_parallel_for_simd ||
6437ade93f5SKelvin Li Kind == OMPD_teams_distribute_parallel_for_simd ||
64483c451e9SKelvin Li Kind == OMPD_teams_distribute_parallel_for ||
6451851df56SKelvin Li Kind == OMPD_target_teams_distribute_parallel_for ||
646ffafe10fSCarlo Bertolli Kind == OMPD_target_teams_distribute_parallel_for_simd;
6479925f156SCarlo Bertolli }
64819b911cbSArpith Chacko Jacob
isOpenMPLoopTransformationDirective(OpenMPDirectiveKind DKind)6496c050052SMichael Kruse bool clang::isOpenMPLoopTransformationDirective(OpenMPDirectiveKind DKind) {
650a2223612SMichael Kruse return DKind == OMPD_tile || DKind == OMPD_unroll;
6516c050052SMichael Kruse }
6526c050052SMichael Kruse
getOpenMPCaptureRegions(SmallVectorImpl<OpenMPDirectiveKind> & CaptureRegions,OpenMPDirectiveKind DKind)65319b911cbSArpith Chacko Jacob void clang::getOpenMPCaptureRegions(
65419b911cbSArpith Chacko Jacob SmallVectorImpl<OpenMPDirectiveKind> &CaptureRegions,
65519b911cbSArpith Chacko Jacob OpenMPDirectiveKind DKind) {
6565b9ce07aSValentin Clement assert(unsigned(DKind) < llvm::omp::Directive_enumSize);
65719b911cbSArpith Chacko Jacob switch (DKind) {
658000875c1Salokmishra.besu case OMPD_metadirective:
659000875c1Salokmishra.besu CaptureRegions.push_back(OMPD_metadirective);
660000875c1Salokmishra.besu break;
66119b911cbSArpith Chacko Jacob case OMPD_parallel:
66219b911cbSArpith Chacko Jacob case OMPD_parallel_for:
66319b911cbSArpith Chacko Jacob case OMPD_parallel_for_simd:
66447d6094dScchen case OMPD_parallel_master:
665bb83f8e7SJennifer Yu case OMPD_parallel_masked:
66619b911cbSArpith Chacko Jacob case OMPD_parallel_sections:
6678429d812SCarlo Bertolli case OMPD_distribute_parallel_for:
668974acd6bSAlexey Bataev case OMPD_distribute_parallel_for_simd:
6692cedaee6SMike Rice case OMPD_parallel_loop:
67019b911cbSArpith Chacko Jacob CaptureRegions.push_back(OMPD_parallel);
67119b911cbSArpith Chacko Jacob break;
67286f9e463SArpith Chacko Jacob case OMPD_target_teams:
673dfa430f6SAlexey Bataev case OMPD_target_teams_distribute:
674fbe17fb8SAlexey Bataev case OMPD_target_teams_distribute_simd:
6756bd8dc91SMike Rice case OMPD_target_teams_loop:
6768451efadSAlexey Bataev CaptureRegions.push_back(OMPD_task);
67799a1e0ebSArpith Chacko Jacob CaptureRegions.push_back(OMPD_target);
67899a1e0ebSArpith Chacko Jacob CaptureRegions.push_back(OMPD_teams);
67999a1e0ebSArpith Chacko Jacob break;
6802ba67045SAlexey Bataev case OMPD_teams:
681ba1487baSCarlo Bertolli case OMPD_teams_distribute:
6822ba67045SAlexey Bataev case OMPD_teams_distribute_simd:
683ba1487baSCarlo Bertolli CaptureRegions.push_back(OMPD_teams);
684ba1487baSCarlo Bertolli break;
6852ba67045SAlexey Bataev case OMPD_target:
686f8365375SAlexey Bataev case OMPD_target_simd:
6878451efadSAlexey Bataev CaptureRegions.push_back(OMPD_task);
688f8365375SAlexey Bataev CaptureRegions.push_back(OMPD_target);
689f8365375SAlexey Bataev break;
69062fae156SCarlo Bertolli case OMPD_teams_distribute_parallel_for:
69156a2aa4dSCarlo Bertolli case OMPD_teams_distribute_parallel_for_simd:
69262fae156SCarlo Bertolli CaptureRegions.push_back(OMPD_teams);
69362fae156SCarlo Bertolli CaptureRegions.push_back(OMPD_parallel);
69462fae156SCarlo Bertolli break;
6957f96c375SAlexey Bataev case OMPD_target_parallel:
6967f96c375SAlexey Bataev case OMPD_target_parallel_for:
6977f96c375SAlexey Bataev case OMPD_target_parallel_for_simd:
698f82ec553SMike Rice case OMPD_target_parallel_loop:
6998451efadSAlexey Bataev CaptureRegions.push_back(OMPD_task);
7007f96c375SAlexey Bataev CaptureRegions.push_back(OMPD_target);
7017f96c375SAlexey Bataev CaptureRegions.push_back(OMPD_parallel);
7027f96c375SAlexey Bataev break;
7032ba67045SAlexey Bataev case OMPD_task:
7047f96c375SAlexey Bataev case OMPD_target_enter_data:
7057f96c375SAlexey Bataev case OMPD_target_exit_data:
7067f96c375SAlexey Bataev case OMPD_target_update:
7077f96c375SAlexey Bataev CaptureRegions.push_back(OMPD_task);
7087f96c375SAlexey Bataev break;
7092ba67045SAlexey Bataev case OMPD_taskloop:
7102ba67045SAlexey Bataev case OMPD_taskloop_simd:
71160e51c48SAlexey Bataev case OMPD_master_taskloop:
712b8552abfSAlexey Bataev case OMPD_master_taskloop_simd:
71342bb88e2SFazlay Rabbi case OMPD_masked_taskloop:
71473e5d7bdSFazlay Rabbi case OMPD_masked_taskloop_simd:
7152ba67045SAlexey Bataev CaptureRegions.push_back(OMPD_taskloop);
7162ba67045SAlexey Bataev break;
717d64ba896SFazlay Rabbi case OMPD_parallel_masked_taskloop:
718*38bcd483SFazlay Rabbi case OMPD_parallel_masked_taskloop_simd:
7195bbceadfSAlexey Bataev case OMPD_parallel_master_taskloop:
72014a388f4SAlexey Bataev case OMPD_parallel_master_taskloop_simd:
7215bbceadfSAlexey Bataev CaptureRegions.push_back(OMPD_parallel);
7225bbceadfSAlexey Bataev CaptureRegions.push_back(OMPD_taskloop);
7235bbceadfSAlexey Bataev break;
72452978c35SCarlo Bertolli case OMPD_target_teams_distribute_parallel_for:
725647dd844SAlexey Bataev case OMPD_target_teams_distribute_parallel_for_simd:
7268451efadSAlexey Bataev CaptureRegions.push_back(OMPD_task);
72752978c35SCarlo Bertolli CaptureRegions.push_back(OMPD_target);
72852978c35SCarlo Bertolli CaptureRegions.push_back(OMPD_teams);
72952978c35SCarlo Bertolli CaptureRegions.push_back(OMPD_parallel);
73052978c35SCarlo Bertolli break;
73179f661edSMike Rice case OMPD_teams_loop:
73279f661edSMike Rice CaptureRegions.push_back(OMPD_teams);
73379f661edSMike Rice break;
734ca27f3e3SSunil Kuravinakop case OMPD_nothing:
735ca27f3e3SSunil Kuravinakop CaptureRegions.push_back(OMPD_nothing);
736ca27f3e3SSunil Kuravinakop break;
7376f9c2516SMike Rice case OMPD_loop:
7386f9c2516SMike Rice // TODO: 'loop' may require different capture regions depending on the bind
7396f9c2516SMike Rice // clause or the parent directive when there is no bind clause. Use
7406f9c2516SMike Rice // OMPD_unknown for now.
74119b911cbSArpith Chacko Jacob case OMPD_simd:
74219b911cbSArpith Chacko Jacob case OMPD_for:
74319b911cbSArpith Chacko Jacob case OMPD_for_simd:
74419b911cbSArpith Chacko Jacob case OMPD_sections:
74519b911cbSArpith Chacko Jacob case OMPD_section:
74619b911cbSArpith Chacko Jacob case OMPD_single:
74719b911cbSArpith Chacko Jacob case OMPD_master:
74819b911cbSArpith Chacko Jacob case OMPD_critical:
74919b911cbSArpith Chacko Jacob case OMPD_taskgroup:
75019b911cbSArpith Chacko Jacob case OMPD_distribute:
75119b911cbSArpith Chacko Jacob case OMPD_ordered:
75219b911cbSArpith Chacko Jacob case OMPD_atomic:
75319b911cbSArpith Chacko Jacob case OMPD_target_data:
75419b911cbSArpith Chacko Jacob case OMPD_distribute_simd:
755b7899ba0SMike Rice case OMPD_dispatch:
7562ba67045SAlexey Bataev CaptureRegions.push_back(OMPD_unknown);
75719b911cbSArpith Chacko Jacob break;
7586c050052SMichael Kruse case OMPD_tile:
759a2223612SMichael Kruse case OMPD_unroll:
7606c050052SMichael Kruse // loop transformations do not introduce captures.
7616c050052SMichael Kruse break;
76219b911cbSArpith Chacko Jacob case OMPD_threadprivate:
76325ed0c07SAlexey Bataev case OMPD_allocate:
76419b911cbSArpith Chacko Jacob case OMPD_taskyield:
76519b911cbSArpith Chacko Jacob case OMPD_barrier:
76619b911cbSArpith Chacko Jacob case OMPD_taskwait:
76719b911cbSArpith Chacko Jacob case OMPD_cancellation_point:
76819b911cbSArpith Chacko Jacob case OMPD_cancel:
76919b911cbSArpith Chacko Jacob case OMPD_flush:
770c112e941SAlexey Bataev case OMPD_depobj:
771fcba7c35SAlexey Bataev case OMPD_scan:
77219b911cbSArpith Chacko Jacob case OMPD_declare_reduction:
773251e1488SMichael Kruse case OMPD_declare_mapper:
77419b911cbSArpith Chacko Jacob case OMPD_declare_simd:
77519b911cbSArpith Chacko Jacob case OMPD_declare_target:
77619b911cbSArpith Chacko Jacob case OMPD_end_declare_target:
7771408f91aSKelvin Li case OMPD_requires:
778d158cf64SAlexey Bataev case OMPD_declare_variant:
779095cecbeSJohannes Doerfert case OMPD_begin_declare_variant:
780095cecbeSJohannes Doerfert case OMPD_end_declare_variant:
78119b911cbSArpith Chacko Jacob llvm_unreachable("OpenMP Directive is not allowed");
78219b911cbSArpith Chacko Jacob case OMPD_unknown:
7832ddba308SValentin Clement default:
78419b911cbSArpith Chacko Jacob llvm_unreachable("Unknown OpenMP directive");
78519b911cbSArpith Chacko Jacob }
78619b911cbSArpith Chacko Jacob }
787