41#ifndef LLVM_FRONTEND_OPENMP_CLAUSET_H
42#define LLVM_FRONTEND_OPENMP_CLAUSET_H
61#define ENUM(Name, ...) enum class Name { __VA_ARGS__ }
62#define OPT(x) std::optional<x>
76#define CLAUSET_SCOPED_ENUM_MEMBER_CONVERT(Ov, Tv) \
77 if (v == OtherEnum::Ov) { \
78 return ThisEnum::Tv; \
82#define CLAUSET_UNSCOPED_ENUM_MEMBER_CONVERT(Ov, Tv) \
84 return ThisEnum::Tv; \
87#define CLAUSET_ENUM_CONVERT(func, OtherE, ThisE, Maps) \
88 auto func = [](OtherE v) -> ThisE { \
89 using ThisEnum = ThisE; \
90 using OtherEnum = OtherE; \
91 (void)sizeof(OtherEnum); \
93 llvm_unreachable("Unexpected value in " #OtherE); \
115 static constexpr bool value =
false;
127template <
typename... Types1,
typename... Types2>
129 using type = std::variant<Types1..., Types2...>;
145template <
typename T,
typename... Ts>
struct Union<
T, Ts...> {
146 static_assert(detail::is_variant_v<T>);
179template <
typename IdType,
typename ExprType>
struct ObjectT;
185template <
typename I,
typename E>
191 ENUM(IntrinsicOperator, Power, Multiply, Divide, Add, Subtract,
Concat, LT,
192 LE,
EQ, NE, GE, GT, NOT, AND, OR, EQV, NEQV, Min, Max);
194 std::variant<DefinedOpName, IntrinsicOperator>
u;
206template <
typename TypeType,
typename IdType,
typename ExprType>
222template <
typename I,
typename E>
231ENUM(MemoryOrder, AcqRel, Acquire, Relaxed, Release, SeqCst);
232ENUM(MotionExpectation, Present);
234ENUM(TaskDependenceType, In, Out, Inout, Mutexinoutset, Inoutset, Depobj);
236template <
typename I,
typename E>
240 std::tuple<DefinedOperatorT<I, E>,
E>
t;
246template <
typename I,
typename E>
259template <
typename I,
typename E>
265template <
typename T,
typename I,
typename E>
274template <
typename T,
typename I,
typename E>
278 typename ContainerTy,
typename FunctionTy,
280 typename ResultTy = std::invoke_result_t<FunctionTy, ElemTy>>
289template <
typename T,
typename I,
typename E>
297template <
typename T,
typename I,
typename E>
303template <
typename T,
typename I,
typename E>
309template <
typename T,
typename I,
typename E>
315template <
typename T,
typename I,
typename E>
325template <
typename T,
typename I,
typename E>
334template <
typename T,
typename I,
typename E>
343template <
typename T,
typename I,
typename E>
347template <
typename T,
typename I,
typename E>
361template <
typename T,
typename I,
typename E>
369template <
typename T,
typename I,
typename E>
375template <
typename T,
typename I,
typename E>
377 ENUM(ActionTime, Compilation, Execution);
383template <
typename T,
typename I,
typename E>
391template <
typename T,
typename I,
typename E>
399template <
typename T,
typename I,
typename E>
405template <
typename T,
typename I,
typename E>
413template <
typename T,
typename I,
typename E>
419template <
typename T,
typename I,
typename E>
427template <
typename T,
typename I,
typename E>
435template <
typename T,
typename I,
typename E>
443template <
typename T,
typename I,
typename E>
445 ENUM(DataSharingAttribute, Firstprivate,
None, Private, Shared);
447 DataSharingAttribute
v;
451template <
typename T,
typename I,
typename E>
455 ENUM(VariableCategory, Scalar, Aggregate, Pointer, Allocatable);
457 std::tuple<ImplicitBehavior,
OPT(VariableCategory)>
t;
460template <
typename T,
typename I,
typename E>
464template <
typename T,
typename I,
typename E>
478 std::variant<Doacross, WithLocators>
u;
482template <
typename T,
typename I,
typename E>
491template <
typename T,
typename I,
typename E>
499template <
typename T,
typename I,
typename E>
502 ENUM(DeviceModifier, Ancestor, DeviceNum);
508template <
typename T,
typename I,
typename E>
510 ENUM(DeviceTypeDescription, Any, Host, Nohost);
512 DeviceTypeDescription
v;
516template <
typename T,
typename I,
typename E>
525template <
typename T,
typename I,
typename E>
528 ENUM(DependenceType, Source, Sink);
531 std::tuple<DependenceType, Vector>
t;
535template <
typename T,
typename I,
typename E>
541template <
typename T,
typename I,
typename E>
549template <
typename T,
typename I,
typename E>
557template <
typename T,
typename I,
typename E>
565template <
typename T,
typename I,
typename E>
573template <
typename T,
typename I,
typename E>
581template <
typename T,
typename I,
typename E>
589template <
typename T,
typename I,
typename E>
602template <
typename T,
typename I,
typename E>
608template <
typename T,
typename I,
typename E>
610 ENUM(Prescriptiveness, Strict);
617template <
typename T,
typename I,
typename E>
625template <
typename T,
typename I,
typename E>
633template <
typename T,
typename I,
typename E>
640template <
typename T,
typename I,
typename E>
649template <
typename T,
typename I,
typename E>
655template <
typename T,
typename I,
typename E>
663template <
typename T,
typename I,
typename E>
671template <
typename T,
typename I,
typename E>
676 ENUM(InteropType, Target, Targetsync);
684template <
typename T,
typename I,
typename E>
692template <
typename T,
typename I,
typename E>
699 std::tuple<ReductionIdentifiers, List>
t;
703template <
typename T,
typename I,
typename E>
711template <
typename T,
typename I,
typename E>
714 ENUM(LastprivateModifier, Conditional);
720template <
typename T,
typename I,
typename E>
726 ENUM(LinearModifier, Ref, Val, Uval);
736template <
typename T,
typename I,
typename E>
744template <
typename T,
typename I,
typename E>
747 ENUM(MapType, To,
From, Tofrom, Alloc, Release, Delete);
748 ENUM(MapTypeModifier, Always, Close, Present, OmpxHold);
761template <
typename T,
typename I,
typename E>
767template <
typename T,
typename I,
typename E>
773template <
typename T,
typename I,
typename E>
781template <
typename T,
typename I,
typename E>
789template <
typename T,
typename I,
typename E>
795template <
typename T,
typename I,
typename E>
803template <
typename T,
typename I,
typename E>
809template <
typename T,
typename I,
typename E>
815template <
typename T,
typename I,
typename E>
821template <
typename T,
typename I,
typename E>
827template <
typename T,
typename I,
typename E>
835template <
typename T,
typename I,
typename E>
841template <
typename T,
typename I,
typename E>
844 ENUM(Prescriptiveness, Strict);
850template <
typename T,
typename I,
typename E>
859template <
typename T,
typename I,
typename E>
866template <
typename T,
typename I,
typename E>
871template <
typename T,
typename I,
typename E>
876template <
typename T,
typename I,
typename E>
883template <
typename T,
typename I,
typename E>
885 ENUM(OrderModifier, Reproducible, Unconstrained);
888 std::tuple<
OPT(OrderModifier), Ordering>
t;
892template <
typename T,
typename I,
typename E>
900template <
typename T,
typename I,
typename E>
906template <
typename T,
typename I,
typename E>
914template <
typename T,
typename I,
typename E>
922template <
typename T,
typename I,
typename E>
930template <
typename T,
typename I,
typename E>
932 ENUM(AffinityPolicy, Close, Master, Spread, Primary);
938template <
typename T,
typename I,
typename E>
944template <
typename T,
typename I,
typename E>
956template <
typename T,
typename I,
typename E>
962template <
typename T,
typename I,
typename E>
968template <
typename T,
typename I,
typename E>
974template <
typename T,
typename I,
typename E>
982template <
typename T,
typename I,
typename E>
984 ENUM(Kind, Static, Dynamic, Guided, Auto, Runtime);
986 ENUM(OrderingModifier, Monotonic, Nonmonotonic);
993template <
typename T,
typename I,
typename E>
999template <
typename T,
typename I,
typename E>
1007template <
typename T,
typename I,
typename E>
1015template <
typename T,
typename I,
typename E>
1021template <
typename T,
typename I,
typename E>
1029template <
typename T,
typename I,
typename E>
1037template <
typename T,
typename I,
typename E>
1044 std::tuple<ReductionIdentifiers, List>
t;
1048template <
typename T,
typename I,
typename E>
1056template <
typename T,
typename I,
typename E>
1062template <
typename T,
typename I,
typename E>
1075template <
typename T,
typename I,
typename E>
1081template <
typename T,
typename I,
typename E>
1087template <
typename T,
typename I,
typename E>
1094template <
typename T,
typename I,
typename E>
1100template <
typename T,
typename I,
typename E>
1108template <
typename T,
typename I,
typename E>
1116template <
typename T,
typename I,
typename E>
1124template <
typename T,
typename I,
typename E>
1132template <
typename T,
typename I,
typename E>
1140template <
typename T,
typename I,
typename E>
1153template <
typename T,
typename I,
typename E>
1159template <
typename T,
typename I,
typename E>
1165template <
typename T,
typename I,
typename E>
1172template <
typename T,
typename I,
typename E>
1177template <
typename T,
typename I,
typename E>
1179 AcqRelT<T, I, E>,
AcquireT<T, I, E>,
CaptureT<T, I, E>,
CompareT<T, I, E>,
1183 NowaitT<T, I, E>,
ReadT<T, I, E>,
RelaxedT<T, I, E>,
ReleaseT<T, I, E>,
1186 UnknownT<T, I, E>,
UntiedT<T, I, E>,
UseT<T, I, E>,
WeakT<T, I, E>,
1189template <
typename T,
typename I,
typename E>
1194template <
typename T,
typename I,
typename E>
1204template <
typename T,
typename I,
typename E>
1207template <
typename T,
typename I,
typename E>
1214 ExclusiveT<T, I, E>,
FailT<T, I, E>,
FilterT<T, I, E>,
FinalT<T, I, E>,
1220 OrderedT<T, I, E>,
PartialT<T, I, E>,
PriorityT<T, I, E>,
PrivateT<T, I, E>,
1221 ProcBindT<T, I, E>,
SafelenT<T, I, E>,
SeverityT<T, I, E>,
SharedT<T, I, E>,
1226template <
typename T,
typename I,
typename E>
1247template <
typename TypeType,
typename IdType,
typename ExprType,
1256 std::variant<Extras...>>::type;
BlockVerifier::State From
static GCRegistry::Add< CoreCLRGC > E("coreclr", "CoreCLR-compatible GC")
This file defines the DenseMap class.
This file defines the DenseSet and SmallDenseSet classes.
This file defines the SmallVector class.
static constexpr int Concat[]
constexpr bool is_variant_v
OutputIt transform(R &&Range, OutputIt d_first, UnaryFunction F)
Wrapper function around std::transform to apply a function to a range and store the result elsewhere.
typename llvm::remove_cvref< T >::type remove_cvref_t
Implement std::hash so that hash_code can be used in STL containers.
std::variant< DependT< T, I, E > > UnionClausesT
std::variant< AcqRelT< T, I, E >, AcquireT< T, I, E >, CaptureT< T, I, E >, CompareT< T, I, E >, DynamicAllocatorsT< T, I, E >, FullT< T, I, E >, InbranchT< T, I, E >, MergeableT< T, I, E >, NogroupT< T, I, E >, NoOpenmpRoutinesT< T, I, E >, NoOpenmpT< T, I, E >, NoParallelismT< T, I, E >, NotinbranchT< T, I, E >, NowaitT< T, I, E >, ReadT< T, I, E >, RelaxedT< T, I, E >, ReleaseT< T, I, E >, ReverseOffloadT< T, I, E >, SeqCstT< T, I, E >, SimdT< T, I, E >, ThreadsT< T, I, E >, UnifiedAddressT< T, I, E >, UnifiedSharedMemoryT< T, I, E >, UnknownT< T, I, E >, UntiedT< T, I, E >, UseT< T, I, E >, WeakT< T, I, E >, WriteT< T, I, E > > EmptyClausesT
typename type::Union< EmptyClausesT< T, I, E >, ExtensionClausesT< T, I, E >, IncompleteClausesT< T, I, E >, TupleClausesT< T, I, E >, UnionClausesT< T, I, E >, WrapperClausesT< T, I, E > >::type UnionOfAllClausesT
std::variant< AbsentT< T, I, E >, AlignT< T, I, E >, AllocatorT< T, I, E >, AtomicDefaultMemOrderT< T, I, E >, AtT< T, I, E >, BindT< T, I, E >, CollapseT< T, I, E >, ContainsT< T, I, E >, CopyinT< T, I, E >, CopyprivateT< T, I, E >, DefaultT< T, I, E >, DestroyT< T, I, E >, DetachT< T, I, E >, DeviceTypeT< T, I, E >, EnterT< T, I, E >, ExclusiveT< T, I, E >, FailT< T, I, E >, FilterT< T, I, E >, FinalT< T, I, E >, FirstprivateT< T, I, E >, HasDeviceAddrT< T, I, E >, HintT< T, I, E >, HoldsT< T, I, E >, InclusiveT< T, I, E >, IndirectT< T, I, E >, InitializerT< T, I, E >, IsDevicePtrT< T, I, E >, LinkT< T, I, E >, MessageT< T, I, E >, NocontextT< T, I, E >, NontemporalT< T, I, E >, NovariantsT< T, I, E >, NumTeamsT< T, I, E >, NumThreadsT< T, I, E >, OrderedT< T, I, E >, PartialT< T, I, E >, PriorityT< T, I, E >, PrivateT< T, I, E >, ProcBindT< T, I, E >, SafelenT< T, I, E >, SeverityT< T, I, E >, SharedT< T, I, E >, SimdlenT< T, I, E >, SizesT< T, I, E >, ThreadLimitT< T, I, E >, UniformT< T, I, E >, UpdateT< T, I, E >, UseDeviceAddrT< T, I, E >, UseDevicePtrT< T, I, E >, UsesAllocatorsT< T, I, E > > WrapperClausesT
std::variant< OmpxAttributeT< T, I, E >, OmpxBareT< T, I, E >, OmpxDynCgroupMemT< T, I, E > > ExtensionClausesT
std::variant< AdjustArgsT< T, I, E >, AppendArgsT< T, I, E >, MatchT< T, I, E >, OtherwiseT< T, I, E >, WhenT< T, I, E > > IncompleteClausesT
std::variant< AffinityT< T, I, E >, AlignedT< T, I, E >, AllocateT< T, I, E >, DefaultmapT< T, I, E >, DeviceT< T, I, E >, DistScheduleT< T, I, E >, DoacrossT< T, I, E >, FromT< T, I, E >, GrainsizeT< T, I, E >, IfT< T, I, E >, InitT< T, I, E >, InReductionT< T, I, E >, LastprivateT< T, I, E >, LinearT< T, I, E >, MapT< T, I, E >, NumTasksT< T, I, E >, OrderT< T, I, E >, ReductionT< T, I, E >, ScheduleT< T, I, E >, TaskReductionT< T, I, E >, ToT< T, I, E > > TupleClausesT
llvm::omp::Directive DirectiveName
ListT< ResultTy > makeList(ContainerTy &&container, FunctionTy &&func)
std::variant< Types1..., Types2... > type
static constexpr bool value
std::true_type UnionTrait
typename type::Union< clause::UnionOfAllClausesT< TypeType, IdType, ExprType >, std::variant< Extras... > >::type VariantTy
std::true_type WrapperTrait
std::true_type EmptyTrait
std::true_type EmptyTrait
std::true_type IncompleteTrait
std::tuple< OPT(Iterator), LocatorList > t
std::true_type TupleTrait
std::true_type WrapperTrait
std::tuple< OPT(Alignment), List > t
std::true_type TupleTrait
std::true_type TupleTrait
E AllocatorSimpleModifier
std::tuple< OPT(AllocatorSimpleModifier), OPT(AllocatorComplexModifier), OPT(AlignModifier), List > t
std::true_type WrapperTrait
std::true_type IncompleteTrait
ENUM(ActionTime, Compilation, Execution)
std::true_type WrapperTrait
std::true_type WrapperTrait
type::MemoryOrder MemoryOrder
ENUM(Binding, Teams, Parallel, Thread)
std::true_type WrapperTrait
std::true_type EmptyTrait
std::true_type WrapperTrait
std::true_type EmptyTrait
std::true_type WrapperTrait
std::true_type WrapperTrait
std::true_type WrapperTrait
std::true_type WrapperTrait
ENUM(DataSharingAttribute, Firstprivate, None, Private, Shared)
ENUM(VariableCategory, Scalar, Aggregate, Pointer, Allocatable)
ENUM(ImplicitBehavior, Alloc, To, From, Tofrom, Firstprivate, None, Default, Present)
std::tuple< ImplicitBehavior, OPT(VariableCategory)> t
std::true_type TupleTrait
std::true_type TupleTrait
std::tuple< TaskDependenceType, OPT(Iterator), LocatorList > t
std::true_type UnionTrait
tomp::type::TaskDependenceType TaskDependenceType
std::variant< Doacross, WithLocators > u
std::true_type WrapperTrait
std::true_type WrapperTrait
std::tuple< OPT(DeviceModifier), DeviceDescription > t
std::true_type TupleTrait
ENUM(DeviceModifier, Ancestor, DeviceNum)
std::true_type WrapperTrait
ENUM(DeviceTypeDescription, Any, Host, Nohost)
std::tuple< Kind, OPT(ChunkSize)> t
std::true_type TupleTrait
std::true_type TupleTrait
std::tuple< DependenceType, Vector > t
ENUM(DependenceType, Source, Sink)
std::true_type EmptyTrait
std::true_type WrapperTrait
std::true_type WrapperTrait
std::true_type WrapperTrait
type::MemoryOrder MemoryOrder
std::true_type WrapperTrait
std::true_type WrapperTrait
std::true_type WrapperTrait
std::true_type TupleTrait
std::tuple< OPT(Expectation), OPT(Mappers), OPT(Iterator), LocatorList > t
type::MotionExpectation Expectation
std::true_type EmptyTrait
std::true_type TupleTrait
ENUM(Prescriptiveness, Strict)
std::tuple< OPT(Prescriptiveness), GrainSize > t
std::true_type WrapperTrait
std::true_type WrapperTrait
std::true_type WrapperTrait
std::tuple< OPT(DirectiveNameModifier), IfExpression > t
std::true_type TupleTrait
type::DirectiveName DirectiveNameModifier
std::tuple< ReductionIdentifiers, List > t
std::true_type TupleTrait
std::true_type EmptyTrait
std::true_type WrapperTrait
std::true_type WrapperTrait
ListT< InteropType > InteropTypes
std::tuple< OPT(InteropPreference), InteropTypes, InteropVar > t
ENUM(InteropType, Target, Targetsync)
std::true_type TupleTrait
std::true_type WrapperTrait
std::true_type WrapperTrait
std::tuple< OPT(LastprivateModifier), List > t
ENUM(LastprivateModifier, Conditional)
std::true_type TupleTrait
std::true_type TupleTrait
ENUM(LinearModifier, Ref, Val, Uval)
std::tuple< OPT(StepSimpleModifier), OPT(StepComplexModifier), OPT(LinearModifier), List > t
std::true_type WrapperTrait
ENUM(MapTypeModifier, Always, Close, Present, OmpxHold)
ENUM(MapType, To, From, Tofrom, Alloc, Release, Delete)
std::tuple< OPT(MapType), OPT(MapTypeModifiers), OPT(Mappers), OPT(Iterator), LocatorList > t
std::true_type TupleTrait
std::true_type IncompleteTrait
std::true_type EmptyTrait
std::true_type WrapperTrait
std::true_type EmptyTrait
std::true_type EmptyTrait
std::true_type EmptyTrait
std::true_type WrapperTrait
std::true_type EmptyTrait
std::true_type WrapperTrait
std::true_type EmptyTrait
std::true_type WrapperTrait
std::true_type EmptyTrait
std::tuple< OPT(Prescriptiveness), NumTasks > t
ENUM(Prescriptiveness, Strict)
std::true_type TupleTrait
std::true_type TupleTrait
std::tuple< OPT(LowerBound), UpperBound > t
std::true_type WrapperTrait
std::true_type EmptyTrait
std::true_type EmptyTrait
std::true_type WrapperTrait
std::tuple< OPT(OrderModifier), Ordering > t
ENUM(OrderModifier, Reproducible, Unconstrained)
std::true_type TupleTrait
ENUM(Ordering, Concurrent)
std::true_type WrapperTrait
std::true_type IncompleteTrait
std::true_type WrapperTrait
std::true_type WrapperTrait
std::true_type WrapperTrait
std::true_type WrapperTrait
ENUM(AffinityPolicy, Close, Master, Spread, Primary)
std::true_type EmptyTrait
std::true_type TupleTrait
std::tuple< OPT(ReductionModifier), ReductionIdentifiers, List > t
ENUM(ReductionModifier, Default, Inscan, Task)
ListT< type::ReductionIdentifierT< I, E > > ReductionIdentifiers
std::true_type EmptyTrait
std::true_type EmptyTrait
std::true_type EmptyTrait
std::true_type WrapperTrait
std::true_type TupleTrait
std::tuple< Kind, OPT(OrderingModifier), OPT(ChunkModifier), OPT(ChunkSize)> t
ENUM(OrderingModifier, Monotonic, Nonmonotonic)
ENUM(ChunkModifier, Simd)
ENUM(Kind, Static, Dynamic, Guided, Auto, Runtime)
std::true_type EmptyTrait
ENUM(SevLevel, Fatal, Warning)
std::true_type WrapperTrait
std::true_type WrapperTrait
std::true_type EmptyTrait
std::true_type WrapperTrait
std::true_type WrapperTrait
std::true_type TupleTrait
std::tuple< ReductionIdentifiers, List > t
std::true_type WrapperTrait
std::true_type EmptyTrait
std::true_type TupleTrait
type::MotionExpectation Expectation
std::tuple< OPT(Expectation), OPT(Mappers), OPT(Iterator), LocatorList > t
std::true_type EmptyTrait
std::true_type EmptyTrait
std::true_type EmptyTrait
std::true_type EmptyTrait
std::true_type WrapperTrait
OPT(TaskDependenceType) v
tomp::type::TaskDependenceType TaskDependenceType
std::true_type WrapperTrait
std::true_type WrapperTrait
std::true_type WrapperTrait
std::true_type WrapperTrait
std::tuple< OPT(MemSpace), OPT(TraitsArray), Allocator > AllocatorSpec
std::true_type EmptyTrait
std::true_type IncompleteTrait
std::true_type EmptyTrait
std::true_type WrapperTrait
std::true_type UnionTrait
std::variant< DefinedOpName, IntrinsicOperator > u
ENUM(IntrinsicOperator, Power, Multiply, Divide, Add, Subtract, Concat, LT, LE, EQ, NE, GE, GT, NOT, AND, OR, EQV, NEQV, Min, Max)
std::true_type TupleTrait
std::tuple< OPT(TypeType), ObjectT< IdType, ExprType >, RangeT< ExprType > > t
std::tuple< DefinedOperatorT< I, E >, E > t
std::true_type TupleTrait
std::tuple< ObjectT< I, E >, OPT(Distance)> t
std::true_type TupleTrait
std::true_type WrapperTrait
std::true_type WrapperTrait
std::true_type TupleTrait
std::tuple< E, E, OPT(E)> t
std::true_type UnionTrait
std::variant< DefinedOperatorT< I, E >, ProcedureDesignatorT< I, E > > u
typename detail::UnionOfTwo< T, typename Union< Ts... >::type >::type type