LLVM 17.0.0git
OMPConstants.h
Go to the documentation of this file.
1//===- OMPConstants.h - OpenMP related constants and helpers ------ C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8/// \file
9///
10/// This file defines constans and helpers used when dealing with OpenMP.
11///
12//===----------------------------------------------------------------------===//
13
14#ifndef LLVM_FRONTEND_OPENMP_OMPCONSTANTS_H
15#define LLVM_FRONTEND_OPENMP_OMPCONSTANTS_H
16
18
19#include "llvm/ADT/StringRef.h"
20#include "llvm/Frontend/OpenMP/OMP.h.inc"
21
22namespace llvm {
23namespace omp {
25
26/// IDs for all Internal Control Variables (ICVs).
28#define ICV_DATA_ENV(Enum, ...) Enum,
29#include "llvm/Frontend/OpenMP/OMPKinds.def"
30};
31
32#define ICV_DATA_ENV(Enum, ...) \
33 constexpr auto Enum = omp::InternalControlVar::Enum;
34#include "llvm/Frontend/OpenMP/OMPKinds.def"
35
36enum class ICVInitValue {
37#define ICV_INIT_VALUE(Enum, Name) Enum,
38#include "llvm/Frontend/OpenMP/OMPKinds.def"
39};
40
41#define ICV_INIT_VALUE(Enum, Name) \
42 constexpr auto Enum = omp::ICVInitValue::Enum;
43#include "llvm/Frontend/OpenMP/OMPKinds.def"
44
45/// IDs for all omp runtime library (RTL) functions.
46enum class RuntimeFunction {
47#define OMP_RTL(Enum, ...) Enum,
48#include "llvm/Frontend/OpenMP/OMPKinds.def"
49};
50
51#define OMP_RTL(Enum, ...) constexpr auto Enum = omp::RuntimeFunction::Enum;
52#include "llvm/Frontend/OpenMP/OMPKinds.def"
53
54/// IDs for the different default kinds.
55enum class DefaultKind {
56#define OMP_DEFAULT_KIND(Enum, Str) Enum,
57#include "llvm/Frontend/OpenMP/OMPKinds.def"
58};
59
60#define OMP_DEFAULT_KIND(Enum, ...) \
61 constexpr auto Enum = omp::DefaultKind::Enum;
62#include "llvm/Frontend/OpenMP/OMPKinds.def"
63
64/// IDs for all omp runtime library ident_t flag encodings (see
65/// their defintion in openmp/runtime/src/kmp.h).
66enum class IdentFlag {
67#define OMP_IDENT_FLAG(Enum, Str, Value) Enum = Value,
68#include "llvm/Frontend/OpenMP/OMPKinds.def"
70};
71
72#define OMP_IDENT_FLAG(Enum, ...) constexpr auto Enum = omp::IdentFlag::Enum;
73#include "llvm/Frontend/OpenMP/OMPKinds.def"
74
75/// \note This needs to be kept in sync with kmp.h enum sched_type.
76/// Todo: Update kmp.h to include this file, and remove the enums in kmp.h
77enum class OMPScheduleType {
78 // For typed comparisons, not a valid schedule
79 None = 0,
80
81 // Schedule algorithms
83 BaseStatic = 2,
86 BaseRuntime = 5,
87 BaseAuto = 6,
89 BaseGreedy = 8,
90 BaseBalanced = 9,
93 BaseSteal = 12,
94
95 // with chunk adjustment (e.g., simd)
97 BaseGuidedSimd = 14,
98 BaseRuntimeSimd = 15,
99
100 // static schedules algorithims for distribute
102 BaseDistribute = 28,
103
104 // Modifier flags to be combined with schedule algorithms
105 ModifierUnordered = (1 << 5),
106 ModifierOrdered = (1 << 6),
107 ModifierNomerge = (1 << 7),
108 ModifierMonotonic = (1 << 29),
109 ModifierNonmonotonic = (1 << 30),
110
111 // Masks combining multiple flags
115
116 // valid schedule type values, without monotonicity flags
131
136
144
147
171
184
185 LLVM_MARK_AS_BITMASK_ENUM(/* LargestValue */ ModifierMask)
186};
187
188/// Values for bit flags used to specify the mapping type for
189/// offloading.
191 /// No flags
192 OMP_MAP_NONE = 0x0,
193 /// Allocate memory on the device and move data from host to device.
194 OMP_MAP_TO = 0x01,
195 /// Allocate memory on the device and move data from device to host.
196 OMP_MAP_FROM = 0x02,
197 /// Always perform the requested mapping action on the element, even
198 /// if it was already mapped before.
199 OMP_MAP_ALWAYS = 0x04,
200 /// Delete the element from the device environment, ignoring the
201 /// current reference count associated with the element.
202 OMP_MAP_DELETE = 0x08,
203 /// The element being mapped is a pointer-pointee pair; both the
204 /// pointer and the pointee should be mapped.
205 OMP_MAP_PTR_AND_OBJ = 0x10,
206 /// This flags signals that the base address of an entry should be
207 /// passed to the target kernel as an argument.
209 /// Signal that the runtime library has to return the device pointer
210 /// in the current position for the data being mapped. Used when we have the
211 /// use_device_ptr or use_device_addr clause.
213 /// This flag signals that the reference being passed is a pointer to
214 /// private data.
215 OMP_MAP_PRIVATE = 0x80,
216 /// Pass the element to the device by value.
217 OMP_MAP_LITERAL = 0x100,
218 /// Implicit map
219 OMP_MAP_IMPLICIT = 0x200,
220 /// Close is a hint to the runtime to allocate memory close to
221 /// the target device.
222 OMP_MAP_CLOSE = 0x400,
223 /// 0x800 is reserved for compatibility with XLC.
224 /// Produce a runtime error if the data is not already allocated.
225 OMP_MAP_PRESENT = 0x1000,
226 // Increment and decrement a separate reference counter so that the data
227 // cannot be unmapped within the associated region. Thus, this flag is
228 // intended to be used on 'target' and 'target data' directives because they
229 // are inherently structured. It is not intended to be used on 'target
230 // enter data' and 'target exit data' directives because they are inherently
231 // dynamic.
232 // This is an OpenMP extension for the sake of OpenACC support.
233 OMP_MAP_OMPX_HOLD = 0x2000,
234 /// Signal that the runtime library should use args as an array of
235 /// descriptor_dim pointers and use args_size as dims. Used when we have
236 /// non-contiguous list items in target update directive
237 OMP_MAP_NON_CONTIG = 0x100000000000,
238 /// The 16 MSBs of the flags indicate whether the entry is member of some
239 /// struct/class.
240 OMP_MAP_MEMBER_OF = 0xffff000000000000,
242};
243
244enum class AddressSpace : unsigned {
245 Generic = 0,
246 Global = 1,
247 Shared = 3,
248 Constant = 4,
249 Local = 5,
250};
251
252/// \note This needs to be kept in sync with interop.h enum kmp_interop_type_t.:
254
255/// Atomic compare operations. Currently OpenMP only supports ==, >, and <.
256enum class OMPAtomicCompareOp : unsigned { EQ, MIN, MAX };
257
258/// Fields ids in kmp_depend_info record.
260
261/// Dependence kind for RTL.
263 DepUnknown = 0x0,
264 DepIn = 0x01,
265 DepInOut = 0x3,
266 DepMutexInOutSet = 0x4,
267 DepInOutSet = 0x8,
268 DepOmpAllMem = 0x80,
269};
270
271} // end namespace omp
272
273} // end namespace llvm
274
275#include "OMPDeviceConstants.h"
276
277#endif // LLVM_FRONTEND_OPENMP_OMPCONSTANTS_H
This file defines constans that will be used by both host and device compilation.
This is an important base class in LLVM.
Definition: Constant.h:41
OpenMPOffloadMappingFlags
Values for bit flags used to specify the mapping type for offloading.
Definition: OMPConstants.h:190
@ OMP_MAP_TO
Allocate memory on the device and move data from host to device.
@ OMP_MAP_NON_CONTIG
Signal that the runtime library should use args as an array of descriptor_dim pointers and use args_s...
@ OMP_MAP_LITERAL
Pass the element to the device by value.
@ OMP_MAP_RETURN_PARAM
Signal that the runtime library has to return the device pointer in the current position for the data...
@ OMP_MAP_PTR_AND_OBJ
The element being mapped is a pointer-pointee pair; both the pointer and the pointee should be mapped...
@ OMP_MAP_TARGET_PARAM
This flags signals that the base address of an entry should be passed to the target kernel as an argu...
@ OMP_MAP_PRESENT
0x800 is reserved for compatibility with XLC.
@ OMP_MAP_CLOSE
Close is a hint to the runtime to allocate memory close to the target device.
@ OMP_MAP_PRIVATE
This flag signals that the reference being passed is a pointer to private data.
@ OMP_MAP_MEMBER_OF
The 16 MSBs of the flags indicate whether the entry is member of some struct/class.
@ OMP_MAP_DELETE
Delete the element from the device environment, ignoring the current reference count associated with ...
@ OMP_MAP_ALWAYS
Always perform the requested mapping action on the element, even if it was already mapped before.
@ OMP_MAP_FROM
Allocate memory on the device and move data from device to host.
IdentFlag
IDs for all omp runtime library ident_t flag encodings (see their defintion in openmp/runtime/src/kmp...
Definition: OMPConstants.h:66
RTLDependInfoFields
Fields ids in kmp_depend_info record.
Definition: OMPConstants.h:259
RTLDependenceKindTy
Dependence kind for RTL.
Definition: OMPConstants.h:262
InternalControlVar
IDs for all Internal Control Variables (ICVs).
Definition: OMPConstants.h:27
RuntimeFunction
IDs for all omp runtime library (RTL) functions.
Definition: OMPConstants.h:46
LLVM_ENABLE_BITMASK_ENUMS_IN_NAMESPACE()
OMPAtomicCompareOp
Atomic compare operations. Currently OpenMP only supports ==, >, and <.
Definition: OMPConstants.h:256
DefaultKind
IDs for the different default kinds.
Definition: OMPConstants.h:55
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18