123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288 |
- #pragma once
- #ifdef __GNUC__
- #pragma GCC diagnostic push
- #pragma GCC diagnostic ignored "-Wunused-parameter"
- #endif
- //===- OMPConstants.h - OpenMP related constants and helpers ------ C++ -*-===//
- //
- // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
- // See https://llvm.org/LICENSE.txt for license information.
- // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
- //
- //===----------------------------------------------------------------------===//
- /// \file
- ///
- /// This file defines constans and helpers used when dealing with OpenMP.
- ///
- //===----------------------------------------------------------------------===//
- #ifndef LLVM_FRONTEND_OPENMP_OMPCONSTANTS_H
- #define LLVM_FRONTEND_OPENMP_OMPCONSTANTS_H
- #include "llvm/ADT/BitmaskEnum.h"
- #include "llvm/ADT/StringRef.h"
- #include "llvm/Frontend/OpenMP/OMP.h.inc"
- namespace llvm {
- namespace omp {
- LLVM_ENABLE_BITMASK_ENUMS_IN_NAMESPACE();
- /// IDs for all Internal Control Variables (ICVs).
- enum class InternalControlVar {
- #define ICV_DATA_ENV(Enum, ...) Enum,
- #include "llvm/Frontend/OpenMP/OMPKinds.def"
- };
- #define ICV_DATA_ENV(Enum, ...) \
- constexpr auto Enum = omp::InternalControlVar::Enum;
- #include "llvm/Frontend/OpenMP/OMPKinds.def"
- enum class ICVInitValue {
- #define ICV_INIT_VALUE(Enum, Name) Enum,
- #include "llvm/Frontend/OpenMP/OMPKinds.def"
- };
- #define ICV_INIT_VALUE(Enum, Name) \
- constexpr auto Enum = omp::ICVInitValue::Enum;
- #include "llvm/Frontend/OpenMP/OMPKinds.def"
- /// IDs for all omp runtime library (RTL) functions.
- enum class RuntimeFunction {
- #define OMP_RTL(Enum, ...) Enum,
- #include "llvm/Frontend/OpenMP/OMPKinds.def"
- };
- #define OMP_RTL(Enum, ...) constexpr auto Enum = omp::RuntimeFunction::Enum;
- #include "llvm/Frontend/OpenMP/OMPKinds.def"
- /// IDs for the different default kinds.
- enum class DefaultKind {
- #define OMP_DEFAULT_KIND(Enum, Str) Enum,
- #include "llvm/Frontend/OpenMP/OMPKinds.def"
- };
- #define OMP_DEFAULT_KIND(Enum, ...) \
- constexpr auto Enum = omp::DefaultKind::Enum;
- #include "llvm/Frontend/OpenMP/OMPKinds.def"
- /// IDs for all omp runtime library ident_t flag encodings (see
- /// their defintion in openmp/runtime/src/kmp.h).
- enum class IdentFlag {
- #define OMP_IDENT_FLAG(Enum, Str, Value) Enum = Value,
- #include "llvm/Frontend/OpenMP/OMPKinds.def"
- LLVM_MARK_AS_BITMASK_ENUM(0x7FFFFFFF)
- };
- #define OMP_IDENT_FLAG(Enum, ...) constexpr auto Enum = omp::IdentFlag::Enum;
- #include "llvm/Frontend/OpenMP/OMPKinds.def"
- /// \note This needs to be kept in sync with kmp.h enum sched_type.
- /// Todo: Update kmp.h to include this file, and remove the enums in kmp.h
- enum class OMPScheduleType {
- // For typed comparisons, not a valid schedule
- None = 0,
- // Schedule algorithms
- BaseStaticChunked = 1,
- BaseStatic = 2,
- BaseDynamicChunked = 3,
- BaseGuidedChunked = 4,
- BaseRuntime = 5,
- BaseAuto = 6,
- BaseTrapezoidal = 7,
- BaseGreedy = 8,
- BaseBalanced = 9,
- BaseGuidedIterativeChunked = 10,
- BaseGuidedAnalyticalChunked = 11,
- BaseSteal = 12,
- // with chunk adjustment (e.g., simd)
- BaseStaticBalancedChunked = 13,
- BaseGuidedSimd = 14,
- BaseRuntimeSimd = 15,
- // static schedules algorithims for distribute
- BaseDistributeChunked = 27,
- BaseDistribute = 28,
- // Modifier flags to be combined with schedule algorithms
- ModifierUnordered = (1 << 5),
- ModifierOrdered = (1 << 6),
- ModifierNomerge = (1 << 7),
- ModifierMonotonic = (1 << 29),
- ModifierNonmonotonic = (1 << 30),
- // Masks combining multiple flags
- OrderingMask = ModifierUnordered | ModifierOrdered | ModifierNomerge,
- MonotonicityMask = ModifierMonotonic | ModifierNonmonotonic,
- ModifierMask = OrderingMask | MonotonicityMask,
- // valid schedule type values, without monotonicity flags
- UnorderedStaticChunked = BaseStaticChunked | ModifierUnordered, // 33
- UnorderedStatic = BaseStatic | ModifierUnordered, // 34
- UnorderedDynamicChunked = BaseDynamicChunked | ModifierUnordered, // 35
- UnorderedGuidedChunked = BaseGuidedChunked | ModifierUnordered, // 36
- UnorderedRuntime = BaseRuntime | ModifierUnordered, // 37
- UnorderedAuto = BaseAuto | ModifierUnordered, // 38
- UnorderedTrapezoidal = BaseTrapezoidal | ModifierUnordered, // 39
- UnorderedGreedy = BaseGreedy | ModifierUnordered, // 40
- UnorderedBalanced = BaseBalanced | ModifierUnordered, // 41
- UnorderedGuidedIterativeChunked =
- BaseGuidedIterativeChunked | ModifierUnordered, // 42
- UnorderedGuidedAnalyticalChunked =
- BaseGuidedAnalyticalChunked | ModifierUnordered, // 43
- UnorderedSteal = BaseSteal | ModifierUnordered, // 44
- UnorderedStaticBalancedChunked =
- BaseStaticBalancedChunked | ModifierUnordered, // 45
- UnorderedGuidedSimd = BaseGuidedSimd | ModifierUnordered, // 46
- UnorderedRuntimeSimd = BaseRuntimeSimd | ModifierUnordered, // 47
- OrderedStaticChunked = BaseStaticChunked | ModifierOrdered, // 65
- OrderedStatic = BaseStatic | ModifierOrdered, // 66
- OrderedDynamicChunked = BaseDynamicChunked | ModifierOrdered, // 67
- OrderedGuidedChunked = BaseGuidedChunked | ModifierOrdered, // 68
- OrderedRuntime = BaseRuntime | ModifierOrdered, // 69
- OrderedAuto = BaseAuto | ModifierOrdered, // 70
- OrderdTrapezoidal = BaseTrapezoidal | ModifierOrdered, // 71
- OrderedDistributeChunked = BaseDistributeChunked | ModifierOrdered, // 91
- OrderedDistribute = BaseDistribute | ModifierOrdered, // 92
- NomergeUnorderedStaticChunked =
- BaseStaticChunked | ModifierUnordered | ModifierNomerge, // 161
- NomergeUnorderedStatic =
- BaseStatic | ModifierUnordered | ModifierNomerge, // 162
- NomergeUnorderedDynamicChunked =
- BaseDynamicChunked | ModifierUnordered | ModifierNomerge, // 163
- NomergeUnorderedGuidedChunked =
- BaseGuidedChunked | ModifierUnordered | ModifierNomerge, // 164
- NomergeUnorderedRuntime =
- BaseRuntime | ModifierUnordered | ModifierNomerge, // 165
- NomergeUnorderedAuto = BaseAuto | ModifierUnordered | ModifierNomerge, // 166
- NomergeUnorderedTrapezoidal =
- BaseTrapezoidal | ModifierUnordered | ModifierNomerge, // 167
- NomergeUnorderedGreedy =
- BaseGreedy | ModifierUnordered | ModifierNomerge, // 168
- NomergeUnorderedBalanced =
- BaseBalanced | ModifierUnordered | ModifierNomerge, // 169
- NomergeUnorderedGuidedIterativeChunked =
- BaseGuidedIterativeChunked | ModifierUnordered | ModifierNomerge, // 170
- NomergeUnorderedGuidedAnalyticalChunked =
- BaseGuidedAnalyticalChunked | ModifierUnordered | ModifierNomerge, // 171
- NomergeUnorderedSteal =
- BaseSteal | ModifierUnordered | ModifierNomerge, // 172
- NomergeOrderedStaticChunked =
- BaseStaticChunked | ModifierOrdered | ModifierNomerge, // 193
- NomergeOrderedStatic = BaseStatic | ModifierOrdered | ModifierNomerge, // 194
- NomergeOrderedDynamicChunked =
- BaseDynamicChunked | ModifierOrdered | ModifierNomerge, // 195
- NomergeOrderedGuidedChunked =
- BaseGuidedChunked | ModifierOrdered | ModifierNomerge, // 196
- NomergeOrderedRuntime =
- BaseRuntime | ModifierOrdered | ModifierNomerge, // 197
- NomergeOrderedAuto = BaseAuto | ModifierOrdered | ModifierNomerge, // 198
- NomergeOrderedTrapezoidal =
- BaseTrapezoidal | ModifierOrdered | ModifierNomerge, // 199
- LLVM_MARK_AS_BITMASK_ENUM(/* LargestValue */ ModifierMask)
- };
- /// Values for bit flags used to specify the mapping type for
- /// offloading.
- enum class OpenMPOffloadMappingFlags : uint64_t {
- /// No flags
- OMP_MAP_NONE = 0x0,
- /// Allocate memory on the device and move data from host to device.
- OMP_MAP_TO = 0x01,
- /// Allocate memory on the device and move data from device to host.
- OMP_MAP_FROM = 0x02,
- /// Always perform the requested mapping action on the element, even
- /// if it was already mapped before.
- OMP_MAP_ALWAYS = 0x04,
- /// Delete the element from the device environment, ignoring the
- /// current reference count associated with the element.
- OMP_MAP_DELETE = 0x08,
- /// The element being mapped is a pointer-pointee pair; both the
- /// pointer and the pointee should be mapped.
- OMP_MAP_PTR_AND_OBJ = 0x10,
- /// This flags signals that the base address of an entry should be
- /// passed to the target kernel as an argument.
- OMP_MAP_TARGET_PARAM = 0x20,
- /// Signal that the runtime library has to return the device pointer
- /// in the current position for the data being mapped. Used when we have the
- /// use_device_ptr or use_device_addr clause.
- OMP_MAP_RETURN_PARAM = 0x40,
- /// This flag signals that the reference being passed is a pointer to
- /// private data.
- OMP_MAP_PRIVATE = 0x80,
- /// Pass the element to the device by value.
- OMP_MAP_LITERAL = 0x100,
- /// Implicit map
- OMP_MAP_IMPLICIT = 0x200,
- /// Close is a hint to the runtime to allocate memory close to
- /// the target device.
- OMP_MAP_CLOSE = 0x400,
- /// 0x800 is reserved for compatibility with XLC.
- /// Produce a runtime error if the data is not already allocated.
- OMP_MAP_PRESENT = 0x1000,
- // Increment and decrement a separate reference counter so that the data
- // cannot be unmapped within the associated region. Thus, this flag is
- // intended to be used on 'target' and 'target data' directives because they
- // are inherently structured. It is not intended to be used on 'target
- // enter data' and 'target exit data' directives because they are inherently
- // dynamic.
- // This is an OpenMP extension for the sake of OpenACC support.
- OMP_MAP_OMPX_HOLD = 0x2000,
- /// Signal that the runtime library should use args as an array of
- /// descriptor_dim pointers and use args_size as dims. Used when we have
- /// non-contiguous list items in target update directive
- OMP_MAP_NON_CONTIG = 0x100000000000,
- /// The 16 MSBs of the flags indicate whether the entry is member of some
- /// struct/class.
- OMP_MAP_MEMBER_OF = 0xffff000000000000,
- LLVM_MARK_AS_BITMASK_ENUM(/* LargestFlag = */ OMP_MAP_MEMBER_OF)
- };
- enum class AddressSpace : unsigned {
- Generic = 0,
- Global = 1,
- Shared = 3,
- Constant = 4,
- Local = 5,
- };
- /// \note This needs to be kept in sync with interop.h enum kmp_interop_type_t.:
- enum class OMPInteropType { Unknown, Target, TargetSync };
- /// Atomic compare operations. Currently OpenMP only supports ==, >, and <.
- enum class OMPAtomicCompareOp : unsigned { EQ, MIN, MAX };
- /// Fields ids in kmp_depend_info record.
- enum class RTLDependInfoFields { BaseAddr, Len, Flags };
- /// Dependence kind for RTL.
- enum class RTLDependenceKindTy {
- DepUnknown = 0x0,
- DepIn = 0x01,
- DepInOut = 0x3,
- DepMutexInOutSet = 0x4,
- DepInOutSet = 0x8,
- DepOmpAllMem = 0x80,
- };
- } // end namespace omp
- } // end namespace llvm
- #include "OMPDeviceConstants.h"
- #endif // LLVM_FRONTEND_OPENMP_OMPCONSTANTS_H
- #ifdef __GNUC__
- #pragma GCC diagnostic pop
- #endif
|