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