#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 /// To complete this, more enum values will need to be moved here. enum class OMPScheduleType { StaticChunked = 33, Static = 34, // static unspecialized DistributeChunked = 91, Distribute = 92, DynamicChunked = 35, GuidedChunked = 36, // guided unspecialized Runtime = 37, Auto = 38, // auto StaticBalancedChunked = 45, // static with chunk adjustment (e.g., simd) GuidedSimd = 46, // guided with chunk adjustment RuntimeSimd = 47, // runtime with chunk adjustment ModifierMonotonic = (1 << 29), // Set if the monotonic schedule modifier was present ModifierNonmonotonic = (1 << 30), // Set if the nonmonotonic schedule modifier was present ModifierMask = ModifierMonotonic | ModifierNonmonotonic, LLVM_MARK_AS_BITMASK_ENUM(/* LargestValue */ ModifierMask) }; enum OMPTgtExecModeFlags : int8_t { OMP_TGT_EXEC_MODE_GENERIC = 1 << 0, OMP_TGT_EXEC_MODE_SPMD = 1 << 1, OMP_TGT_EXEC_MODE_GENERIC_SPMD = OMP_TGT_EXEC_MODE_GENERIC | OMP_TGT_EXEC_MODE_SPMD, LLVM_MARK_AS_BITMASK_ENUM(/* LargestValue */ OMP_TGT_EXEC_MODE_GENERIC_SPMD) }; 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 }; } // end namespace omp } // end namespace llvm #endif // LLVM_FRONTEND_OPENMP_OMPCONSTANTS_H #ifdef __GNUC__ #pragma GCC diagnostic pop #endif