[flang][OpenMP] Parsing support for DYN_GROUPPRIVATE (#153615)
This does not perform semantic checks or lowering.
This commit is contained in:
parent
0fb1057e40
commit
8429f7faaa
@ -219,6 +219,7 @@ using DistSchedule = tomp::clause::DistScheduleT<TypeTy, IdTy, ExprTy>;
|
||||
using Doacross = tomp::clause::DoacrossT<TypeTy, IdTy, ExprTy>;
|
||||
using DynamicAllocators =
|
||||
tomp::clause::DynamicAllocatorsT<TypeTy, IdTy, ExprTy>;
|
||||
using DynGroupprivate = tomp::clause::DynGroupprivateT<TypeTy, IdTy, ExprTy>;
|
||||
using Enter = tomp::clause::EnterT<TypeTy, IdTy, ExprTy>;
|
||||
using Exclusive = tomp::clause::ExclusiveT<TypeTy, IdTy, ExprTy>;
|
||||
using Fail = tomp::clause::FailT<TypeTy, IdTy, ExprTy>;
|
||||
|
@ -525,6 +525,8 @@ public:
|
||||
NODE(parser, OmpAbsentClause)
|
||||
NODE(parser, OmpAffinityClause)
|
||||
NODE(OmpAffinityClause, Modifier)
|
||||
NODE(parser, OmpAccessGroup)
|
||||
NODE_ENUM(OmpAccessGroup, Value)
|
||||
NODE(parser, OmpAlignment)
|
||||
NODE(parser, OmpAlignClause)
|
||||
NODE(parser, OmpAlignedClause)
|
||||
@ -569,6 +571,8 @@ public:
|
||||
NODE_ENUM(OmpDependenceType, Value)
|
||||
NODE(parser, OmpTaskDependenceType)
|
||||
NODE_ENUM(OmpTaskDependenceType, Value)
|
||||
NODE(parser, OmpDynGroupprivateClause)
|
||||
NODE(OmpDynGroupprivateClause, Modifier)
|
||||
NODE(parser, OmpIndirectClause)
|
||||
NODE(parser, OmpIterationOffset)
|
||||
NODE(parser, OmpIteration)
|
||||
|
@ -3736,6 +3736,11 @@ inline namespace modifier {
|
||||
// ENUM_CLASS(Value, Keyword1, Keyword2);
|
||||
// };
|
||||
|
||||
struct OmpAccessGroup {
|
||||
ENUM_CLASS(Value, Cgroup);
|
||||
WRAPPER_CLASS_BOILERPLATE(OmpAccessGroup, Value);
|
||||
};
|
||||
|
||||
// Ref: [4.5:72-81], [5.0:110-119], [5.1:134-143], [5.2:169-170]
|
||||
//
|
||||
// alignment ->
|
||||
@ -4019,8 +4024,9 @@ struct OmpOrderModifier {
|
||||
//
|
||||
// prescriptiveness ->
|
||||
// STRICT // since 5.1
|
||||
// FALLBACK // since 6.1
|
||||
struct OmpPrescriptiveness {
|
||||
ENUM_CLASS(Value, Strict)
|
||||
ENUM_CLASS(Value, Strict, Fallback)
|
||||
WRAPPER_CLASS_BOILERPLATE(OmpPrescriptiveness, Value);
|
||||
};
|
||||
|
||||
@ -4375,6 +4381,12 @@ struct OmpDeviceTypeClause {
|
||||
WRAPPER_CLASS_BOILERPLATE(OmpDeviceTypeClause, DeviceTypeDescription);
|
||||
};
|
||||
|
||||
struct OmpDynGroupprivateClause {
|
||||
TUPLE_CLASS_BOILERPLATE(OmpDynGroupprivateClause);
|
||||
MODIFIER_BOILERPLATE(OmpAccessGroup, OmpPrescriptiveness);
|
||||
std::tuple<MODIFIERS(), ScalarIntExpr> t;
|
||||
};
|
||||
|
||||
// Ref: [5.2:158-159], [6.0:289-290]
|
||||
//
|
||||
// enter-clause ->
|
||||
|
@ -396,6 +396,8 @@ makePrescriptiveness(parser::OmpPrescriptiveness::Value v) {
|
||||
switch (v) {
|
||||
case parser::OmpPrescriptiveness::Value::Strict:
|
||||
return clause::Prescriptiveness::Strict;
|
||||
case parser::OmpPrescriptiveness::Value::Fallback:
|
||||
return clause::Prescriptiveness::Fallback;
|
||||
}
|
||||
llvm_unreachable("Unexpected prescriptiveness");
|
||||
}
|
||||
@ -770,6 +772,27 @@ Doacross make(const parser::OmpClause::Doacross &inp,
|
||||
|
||||
// DynamicAllocators: empty
|
||||
|
||||
DynGroupprivate make(const parser::OmpClause::DynGroupprivate &inp,
|
||||
semantics::SemanticsContext &semaCtx) {
|
||||
// imp.v -> OmpDyngroupprivateClause
|
||||
CLAUSET_ENUM_CONVERT( //
|
||||
convert, parser::OmpAccessGroup::Value, DynGroupprivate::AccessGroup,
|
||||
// clang-format off
|
||||
MS(Cgroup, Cgroup)
|
||||
// clang-format on
|
||||
);
|
||||
|
||||
auto &mods = semantics::OmpGetModifiers(inp.v);
|
||||
auto *m0 = semantics::OmpGetUniqueModifier<parser::OmpAccessGroup>(mods);
|
||||
auto *m1 = semantics::OmpGetUniqueModifier<parser::OmpPrescriptiveness>(mods);
|
||||
auto &size = std::get<parser::ScalarIntExpr>(inp.v.t);
|
||||
|
||||
return DynGroupprivate{
|
||||
{/*AccessGroup=*/maybeApplyToV(convert, m0),
|
||||
/*Prescriptiveness=*/maybeApplyToV(makePrescriptiveness, m1),
|
||||
/*Size=*/makeExpr(size, semaCtx)}};
|
||||
}
|
||||
|
||||
Enter make(const parser::OmpClause::Enter &inp,
|
||||
semantics::SemanticsContext &semaCtx) {
|
||||
// inp.v -> parser::OmpEnterClause
|
||||
|
@ -469,6 +469,9 @@ TYPE_PARSER(sourced(construct<OmpContextSelectorSpecification>(
|
||||
|
||||
// --- Parsers for clause modifiers -----------------------------------
|
||||
|
||||
TYPE_PARSER(construct<OmpAccessGroup>( //
|
||||
"CGROUP" >> pure(OmpAccessGroup::Value::Cgroup)))
|
||||
|
||||
TYPE_PARSER(construct<OmpAlignment>(scalarIntExpr))
|
||||
|
||||
TYPE_PARSER(construct<OmpAlignModifier>( //
|
||||
@ -573,7 +576,8 @@ TYPE_PARSER(construct<OmpOrderingModifier>(
|
||||
"SIMD" >> pure(OmpOrderingModifier::Value::Simd)))
|
||||
|
||||
TYPE_PARSER(construct<OmpPrescriptiveness>(
|
||||
"STRICT" >> pure(OmpPrescriptiveness::Value::Strict)))
|
||||
"STRICT" >> pure(OmpPrescriptiveness::Value::Strict) ||
|
||||
"FALLBACK" >> pure(OmpPrescriptiveness::Value::Fallback)))
|
||||
|
||||
TYPE_PARSER(construct<OmpPresentModifier>( //
|
||||
"PRESENT" >> pure(OmpPresentModifier::Value::Present)))
|
||||
@ -636,6 +640,12 @@ TYPE_PARSER(sourced(construct<OmpDependClause::TaskDep::Modifier>(sourced(
|
||||
construct<OmpDependClause::TaskDep::Modifier>(
|
||||
Parser<OmpTaskDependenceType>{})))))
|
||||
|
||||
TYPE_PARSER( //
|
||||
sourced(construct<OmpDynGroupprivateClause::Modifier>(
|
||||
Parser<OmpAccessGroup>{})) ||
|
||||
sourced(construct<OmpDynGroupprivateClause::Modifier>(
|
||||
Parser<OmpPrescriptiveness>{})))
|
||||
|
||||
TYPE_PARSER(
|
||||
sourced(construct<OmpDeviceClause::Modifier>(Parser<OmpDeviceModifier>{})))
|
||||
|
||||
@ -777,6 +787,10 @@ TYPE_PARSER(construct<OmpDefaultClause>(
|
||||
Parser<OmpDefaultClause::DataSharingAttribute>{}) ||
|
||||
construct<OmpDefaultClause>(indirect(Parser<OmpDirectiveSpecification>{}))))
|
||||
|
||||
TYPE_PARSER(construct<OmpDynGroupprivateClause>(
|
||||
maybe(nonemptyList(Parser<OmpDynGroupprivateClause::Modifier>{}) / ":"),
|
||||
scalarIntExpr))
|
||||
|
||||
TYPE_PARSER(construct<OmpEnterClause>(
|
||||
maybe(nonemptyList(Parser<OmpEnterClause::Modifier>{}) / ":"),
|
||||
Parser<OmpObjectList>{}))
|
||||
@ -1068,6 +1082,9 @@ TYPE_PARSER( //
|
||||
construct<OmpClause>(parenthesized(Parser<OmpDoacrossClause>{})) ||
|
||||
"DYNAMIC_ALLOCATORS" >>
|
||||
construct<OmpClause>(construct<OmpClause::DynamicAllocators>()) ||
|
||||
"DYN_GROUPPRIVATE" >>
|
||||
construct<OmpClause>(construct<OmpClause::DynGroupprivate>(
|
||||
parenthesized(Parser<OmpDynGroupprivateClause>{}))) ||
|
||||
"ENTER" >> construct<OmpClause>(construct<OmpClause::Enter>(
|
||||
parenthesized(Parser<OmpEnterClause>{}))) ||
|
||||
"EXCLUSIVE" >> construct<OmpClause>(construct<OmpClause::Exclusive>(
|
||||
|
@ -2250,6 +2250,11 @@ public:
|
||||
Walk(std::get<OmpObjectList>(x.t));
|
||||
Walk(": ", std::get<std::optional<std::list<Modifier>>>(x.t));
|
||||
}
|
||||
void Unparse(const OmpDynGroupprivateClause &x) {
|
||||
using Modifier = OmpDynGroupprivateClause::Modifier;
|
||||
Walk(std::get<std::optional<std::list<Modifier>>>(x.t), ": ");
|
||||
Walk(std::get<ScalarIntExpr>(x.t));
|
||||
}
|
||||
void Unparse(const OmpEnterClause &x) {
|
||||
using Modifier = OmpEnterClause::Modifier;
|
||||
Walk(std::get<std::optional<std::list<Modifier>>>(x.t), ": ");
|
||||
@ -2941,6 +2946,7 @@ public:
|
||||
WALK_NESTED_ENUM(OmpTaskDependenceType, Value) // OMP task-dependence-type
|
||||
WALK_NESTED_ENUM(OmpScheduleClause, Kind) // OMP schedule-kind
|
||||
WALK_NESTED_ENUM(OmpSeverityClause, Severity) // OMP severity
|
||||
WALK_NESTED_ENUM(OmpAccessGroup, Value)
|
||||
WALK_NESTED_ENUM(OmpDeviceModifier, Value) // OMP device modifier
|
||||
WALK_NESTED_ENUM(
|
||||
OmpDeviceTypeClause, DeviceTypeDescription) // OMP device_type
|
||||
|
@ -2581,6 +2581,7 @@ CHECK_SIMPLE_CLAUSE(Default, OMPC_default)
|
||||
CHECK_SIMPLE_CLAUSE(Depobj, OMPC_depobj)
|
||||
CHECK_SIMPLE_CLAUSE(DeviceType, OMPC_device_type)
|
||||
CHECK_SIMPLE_CLAUSE(DistSchedule, OMPC_dist_schedule)
|
||||
CHECK_SIMPLE_CLAUSE(DynGroupprivate, OMPC_dyn_groupprivate)
|
||||
CHECK_SIMPLE_CLAUSE(Exclusive, OMPC_exclusive)
|
||||
CHECK_SIMPLE_CLAUSE(Final, OMPC_final)
|
||||
CHECK_SIMPLE_CLAUSE(Flush, OMPC_flush)
|
||||
|
10
flang/test/Lower/OpenMP/Todo/dyn-groupprivate-clause.f90
Normal file
10
flang/test/Lower/OpenMP/Todo/dyn-groupprivate-clause.f90
Normal file
@ -0,0 +1,10 @@
|
||||
!RUN: %not_todo_cmd %flang_fc1 -emit-hlfir -fopenmp -fopenmp-version=61 -o - %s 2>&1 | FileCheck %s
|
||||
|
||||
!CHECK: not yet implemented: DYN_GROUPPRIVATE clause is not implemented yet
|
||||
subroutine f00(n)
|
||||
implicit none
|
||||
integer :: n
|
||||
!$omp target dyn_groupprivate(n)
|
||||
!$omp end target
|
||||
end
|
||||
|
70
flang/test/Parser/OpenMP/dyn-groupprivate-clause.f90
Normal file
70
flang/test/Parser/OpenMP/dyn-groupprivate-clause.f90
Normal file
@ -0,0 +1,70 @@
|
||||
!RUN: %flang_fc1 -fdebug-unparse -fopenmp -fopenmp-version=61 %s | FileCheck --ignore-case --check-prefix="UNPARSE" %s
|
||||
!RUN: %flang_fc1 -fdebug-dump-parse-tree -fopenmp -fopenmp-version=61 %s | FileCheck --check-prefix="PARSE-TREE" %s
|
||||
|
||||
subroutine f00(n)
|
||||
implicit none
|
||||
integer :: n
|
||||
!$omp target dyn_groupprivate(n)
|
||||
!$omp end target
|
||||
end
|
||||
|
||||
!UNPARSE: SUBROUTINE f00 (n)
|
||||
!UNPARSE: IMPLICIT NONE
|
||||
!UNPARSE: INTEGER n
|
||||
!UNPARSE: !$OMP TARGET DYN_GROUPPRIVATE(n)
|
||||
!UNPARSE: !$OMP END TARGET
|
||||
!UNPARSE: END SUBROUTINE
|
||||
|
||||
!PARSE-TREE: OmpBeginDirective
|
||||
!PARSE-TREE: | OmpDirectiveName -> llvm::omp::Directive = target
|
||||
!PARSE-TREE: | OmpClauseList -> OmpClause -> DynGroupprivate -> OmpDynGroupprivateClause
|
||||
!PARSE-TREE: | | Scalar -> Integer -> Expr = 'n'
|
||||
!PARSE-TREE: | | | Designator -> DataRef -> Name = 'n'
|
||||
!PARSE-TREE: | Flags = None
|
||||
|
||||
|
||||
subroutine f01(n)
|
||||
implicit none
|
||||
integer :: n
|
||||
!$omp target dyn_groupprivate(strict: n)
|
||||
!$omp end target
|
||||
end
|
||||
|
||||
!UNPARSE: SUBROUTINE f01 (n)
|
||||
!UNPARSE: IMPLICIT NONE
|
||||
!UNPARSE: INTEGER n
|
||||
!UNPARSE: !$OMP TARGET DYN_GROUPPRIVATE(STRICT: n)
|
||||
!UNPARSE: !$OMP END TARGET
|
||||
!UNPARSE: END SUBROUTINE
|
||||
|
||||
!PARSE-TREE: OmpBeginDirective
|
||||
!PARSE-TREE: | OmpDirectiveName -> llvm::omp::Directive = target
|
||||
!PARSE-TREE: | OmpClauseList -> OmpClause -> DynGroupprivate -> OmpDynGroupprivateClause
|
||||
!PARSE-TREE: | | Modifier -> OmpPrescriptiveness -> Value = Strict
|
||||
!PARSE-TREE: | | Scalar -> Integer -> Expr = 'n'
|
||||
!PARSE-TREE: | | | Designator -> DataRef -> Name = 'n'
|
||||
!PARSE-TREE: | Flags = None
|
||||
|
||||
|
||||
subroutine f02(n)
|
||||
implicit none
|
||||
integer :: n
|
||||
!$omp target dyn_groupprivate(fallback, cgroup: n)
|
||||
!$omp end target
|
||||
end
|
||||
|
||||
!UNPARSE: SUBROUTINE f02 (n)
|
||||
!UNPARSE: IMPLICIT NONE
|
||||
!UNPARSE: INTEGER n
|
||||
!UNPARSE: !$OMP TARGET DYN_GROUPPRIVATE(FALLBACK, CGROUP: n)
|
||||
!UNPARSE: !$OMP END TARGET
|
||||
!UNPARSE: END SUBROUTINE
|
||||
|
||||
!PARSE-TREE: OmpBeginDirective
|
||||
!PARSE-TREE: | OmpDirectiveName -> llvm::omp::Directive = target
|
||||
!PARSE-TREE: | OmpClauseList -> OmpClause -> DynGroupprivate -> OmpDynGroupprivateClause
|
||||
!PARSE-TREE: | | Modifier -> OmpPrescriptiveness -> Value = Fallback
|
||||
!PARSE-TREE: | | Modifier -> OmpAccessGroup -> Value = Cgroup
|
||||
!PARSE-TREE: | | Scalar -> Integer -> Expr = 'n'
|
||||
!PARSE-TREE: | | | Designator -> DataRef -> Name = 'n'
|
||||
!PARSE-TREE: | Flags = None
|
@ -242,7 +242,7 @@ ENUM(MotionExpectation, Present);
|
||||
// V5.2: [15.9.1] `task-dependence-type` modifier
|
||||
ENUM(DependenceType, Depobj, In, Inout, Inoutset, Mutexinoutset, Out, Sink,
|
||||
Source);
|
||||
ENUM(Prescriptiveness, Strict);
|
||||
ENUM(Prescriptiveness, Strict, Fallback);
|
||||
|
||||
template <typename I, typename E> //
|
||||
struct LoopIterationT {
|
||||
@ -574,6 +574,15 @@ struct DynamicAllocatorsT {
|
||||
using EmptyTrait = std::true_type;
|
||||
};
|
||||
|
||||
template <typename T, typename I, typename E> //
|
||||
struct DynGroupprivateT {
|
||||
ENUM(AccessGroup, Cgroup);
|
||||
using Prescriptiveness = type::Prescriptiveness;
|
||||
using Size = E;
|
||||
using TupleTrait = std::true_type;
|
||||
std::tuple<OPT(AccessGroup), OPT(Prescriptiveness), Size> t;
|
||||
};
|
||||
|
||||
// V5.2: [5.8.4] `enter` clause
|
||||
template <typename T, typename I, typename E> //
|
||||
struct EnterT {
|
||||
@ -1263,11 +1272,12 @@ template <typename T, typename I, typename E>
|
||||
using TupleClausesT =
|
||||
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>>;
|
||||
DoacrossT<T, I, E>, DynGroupprivateT<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>>;
|
||||
|
||||
template <typename T, typename I, typename E>
|
||||
using UnionClausesT = std::variant<DependT<T, I, E>>;
|
||||
|
@ -178,6 +178,9 @@ def OMPC_Doacross : Clause<[Spelling<"doacross">]> {
|
||||
def OMPC_DynamicAllocators : Clause<[Spelling<"dynamic_allocators">]> {
|
||||
let clangClass = "OMPDynamicAllocatorsClause";
|
||||
}
|
||||
def OMPC_DynGroupprivate : Clause<[Spelling<"dyn_groupprivate">]> {
|
||||
let flangClass = "OmpDynGroupprivateClause";
|
||||
}
|
||||
def OMPC_Enter : Clause<[Spelling<"enter">]> {
|
||||
let flangClass = "OmpEnterClause";
|
||||
}
|
||||
@ -1104,6 +1107,7 @@ def OMP_Target : Directive<[Spelling<"target">]> {
|
||||
let allowedOnceClauses = [
|
||||
VersionedClause<OMPC_DefaultMap>,
|
||||
VersionedClause<OMPC_Device>,
|
||||
VersionedClause<OMPC_DynGroupprivate, 61>,
|
||||
VersionedClause<OMPC_If>,
|
||||
VersionedClause<OMPC_NoWait>,
|
||||
VersionedClause<OMPC_OMPX_Bare>,
|
||||
@ -1254,6 +1258,7 @@ def OMP_Teams : Directive<[Spelling<"teams">]> {
|
||||
];
|
||||
let allowedOnceClauses = [
|
||||
VersionedClause<OMPC_Default>,
|
||||
VersionedClause<OMPC_DynGroupprivate, 61>,
|
||||
VersionedClause<OMPC_If, 52>,
|
||||
VersionedClause<OMPC_NumTeams>,
|
||||
VersionedClause<OMPC_ThreadLimit>,
|
||||
@ -1522,6 +1527,7 @@ def OMP_target_loop : Directive<[Spelling<"target loop">]> {
|
||||
let allowedOnceClauses = [
|
||||
VersionedClause<OMPC_Bind, 50>,
|
||||
VersionedClause<OMPC_Collapse>,
|
||||
VersionedClause<OMPC_DynGroupprivate, 61>,
|
||||
VersionedClause<OMPC_Order>,
|
||||
VersionedClause<OMPC_ThreadLimit>,
|
||||
VersionedClause<OMPC_OMPX_DynCGroupMem>,
|
||||
@ -1983,6 +1989,7 @@ def OMP_TargetParallel : Directive<[Spelling<"target parallel">]> {
|
||||
let allowedOnceClauses = [
|
||||
VersionedClause<OMPC_DefaultMap>,
|
||||
VersionedClause<OMPC_Device>,
|
||||
VersionedClause<OMPC_DynGroupprivate, 61>,
|
||||
VersionedClause<OMPC_NumThreads>,
|
||||
VersionedClause<OMPC_OMPX_DynCGroupMem>,
|
||||
VersionedClause<OMPC_ProcBind>,
|
||||
@ -2012,6 +2019,7 @@ def OMP_TargetParallelDo : Directive<[Spelling<"target parallel do">]> {
|
||||
VersionedClause<OMPC_Collapse>,
|
||||
VersionedClause<OMPC_DefaultMap>,
|
||||
VersionedClause<OMPC_Device>,
|
||||
VersionedClause<OMPC_DynGroupprivate, 61>,
|
||||
VersionedClause<OMPC_NoWait>,
|
||||
VersionedClause<OMPC_NumThreads>,
|
||||
VersionedClause<OMPC_Order, 50>,
|
||||
@ -2054,6 +2062,9 @@ def OMP_TargetParallelDoSimd
|
||||
VersionedClause<OMPC_SimdLen>,
|
||||
VersionedClause<OMPC_UsesAllocators>,
|
||||
];
|
||||
let allowedOnceClauses = [
|
||||
VersionedClause<OMPC_DynGroupprivate, 61>,
|
||||
];
|
||||
let leafConstructs = [OMP_Target, OMP_Parallel, OMP_Do, OMP_Simd];
|
||||
let category = CA_Executable;
|
||||
let languages = [L_Fortran];
|
||||
@ -2086,6 +2097,7 @@ def OMP_TargetParallelFor : Directive<[Spelling<"target parallel for">]> {
|
||||
VersionedClause<OMPC_UsesAllocators, 50>,
|
||||
];
|
||||
let allowedOnceClauses = [
|
||||
VersionedClause<OMPC_DynGroupprivate, 61>,
|
||||
VersionedClause<OMPC_OMPX_DynCGroupMem>,
|
||||
VersionedClause<OMPC_ThreadLimit, 51>,
|
||||
];
|
||||
@ -2126,6 +2138,7 @@ def OMP_TargetParallelForSimd
|
||||
VersionedClause<OMPC_UsesAllocators, 50>,
|
||||
];
|
||||
let allowedOnceClauses = [
|
||||
VersionedClause<OMPC_DynGroupprivate, 61>,
|
||||
VersionedClause<OMPC_OMPX_DynCGroupMem>,
|
||||
VersionedClause<OMPC_ThreadLimit, 51>,
|
||||
];
|
||||
@ -2155,6 +2168,7 @@ def OMP_target_parallel_loop : Directive<[Spelling<"target parallel loop">]> {
|
||||
VersionedClause<OMPC_Collapse>,
|
||||
VersionedClause<OMPC_Default>,
|
||||
VersionedClause<OMPC_DefaultMap>,
|
||||
VersionedClause<OMPC_DynGroupprivate, 61>,
|
||||
VersionedClause<OMPC_NoWait>,
|
||||
VersionedClause<OMPC_NumThreads>,
|
||||
VersionedClause<OMPC_OMPX_DynCGroupMem>,
|
||||
@ -2189,6 +2203,7 @@ def OMP_TargetSimd : Directive<[Spelling<"target simd">]> {
|
||||
VersionedClause<OMPC_Collapse>,
|
||||
VersionedClause<OMPC_DefaultMap>,
|
||||
VersionedClause<OMPC_Device>,
|
||||
VersionedClause<OMPC_DynGroupprivate, 61>,
|
||||
VersionedClause<OMPC_NumThreads>,
|
||||
VersionedClause<OMPC_OMPX_DynCGroupMem>,
|
||||
VersionedClause<OMPC_Order, 50>,
|
||||
@ -2220,6 +2235,7 @@ def OMP_TargetTeams : Directive<[Spelling<"target teams">]> {
|
||||
VersionedClause<OMPC_Default>,
|
||||
VersionedClause<OMPC_DefaultMap>,
|
||||
VersionedClause<OMPC_Device>,
|
||||
VersionedClause<OMPC_DynGroupprivate, 61>,
|
||||
VersionedClause<OMPC_NoWait>,
|
||||
VersionedClause<OMPC_NumTeams>,
|
||||
VersionedClause<OMPC_OMPX_DynCGroupMem>,
|
||||
@ -2252,6 +2268,7 @@ def OMP_TargetTeamsDistribute
|
||||
VersionedClause<OMPC_DefaultMap>,
|
||||
VersionedClause<OMPC_Device>,
|
||||
VersionedClause<OMPC_DistSchedule>,
|
||||
VersionedClause<OMPC_DynGroupprivate, 61>,
|
||||
VersionedClause<OMPC_NoWait>,
|
||||
VersionedClause<OMPC_NumTeams>,
|
||||
VersionedClause<OMPC_OMPX_DynCGroupMem>,
|
||||
@ -2284,6 +2301,7 @@ def OMP_TargetTeamsDistributeParallelDo
|
||||
VersionedClause<OMPC_DefaultMap>,
|
||||
VersionedClause<OMPC_Device>,
|
||||
VersionedClause<OMPC_DistSchedule>,
|
||||
VersionedClause<OMPC_DynGroupprivate, 61>,
|
||||
VersionedClause<OMPC_NoWait>,
|
||||
VersionedClause<OMPC_NumTeams>,
|
||||
VersionedClause<OMPC_NumThreads>,
|
||||
@ -2322,6 +2340,7 @@ def OMP_TargetTeamsDistributeParallelDoSimd
|
||||
VersionedClause<OMPC_DefaultMap>,
|
||||
VersionedClause<OMPC_Device>,
|
||||
VersionedClause<OMPC_DistSchedule>,
|
||||
VersionedClause<OMPC_DynGroupprivate, 61>,
|
||||
VersionedClause<OMPC_NoWait>,
|
||||
VersionedClause<OMPC_NumTeams>,
|
||||
VersionedClause<OMPC_NumThreads>,
|
||||
@ -2367,6 +2386,7 @@ def OMP_TargetTeamsDistributeParallelFor
|
||||
VersionedClause<OMPC_UsesAllocators, 50>,
|
||||
];
|
||||
let allowedOnceClauses = [
|
||||
VersionedClause<OMPC_DynGroupprivate, 61>,
|
||||
VersionedClause<OMPC_OMPX_DynCGroupMem>,
|
||||
];
|
||||
let leafConstructs =
|
||||
@ -2409,6 +2429,7 @@ def OMP_TargetTeamsDistributeParallelForSimd
|
||||
VersionedClause<OMPC_UsesAllocators, 50>,
|
||||
];
|
||||
let allowedOnceClauses = [
|
||||
VersionedClause<OMPC_DynGroupprivate, 61>,
|
||||
VersionedClause<OMPC_OMPX_DynCGroupMem>,
|
||||
];
|
||||
let leafConstructs =
|
||||
@ -2441,6 +2462,7 @@ def OMP_TargetTeamsDistributeSimd
|
||||
VersionedClause<OMPC_DefaultMap>,
|
||||
VersionedClause<OMPC_Device>,
|
||||
VersionedClause<OMPC_DistSchedule>,
|
||||
VersionedClause<OMPC_DynGroupprivate, 61>,
|
||||
VersionedClause<OMPC_NoWait>,
|
||||
VersionedClause<OMPC_NumTeams>,
|
||||
VersionedClause<OMPC_OMPX_DynCGroupMem>,
|
||||
@ -2474,6 +2496,7 @@ def OMP_target_teams_loop : Directive<[Spelling<"target teams loop">]> {
|
||||
VersionedClause<OMPC_Bind, 50>,
|
||||
VersionedClause<OMPC_Collapse>,
|
||||
VersionedClause<OMPC_Default>,
|
||||
VersionedClause<OMPC_DynGroupprivate, 61>,
|
||||
VersionedClause<OMPC_NoWait>,
|
||||
VersionedClause<OMPC_NumTeams>,
|
||||
VersionedClause<OMPC_OMPX_DynCGroupMem>,
|
||||
@ -2532,6 +2555,7 @@ def OMP_TeamsDistribute : Directive<[Spelling<"teams distribute">]> {
|
||||
VersionedClause<OMPC_ThreadLimit>,
|
||||
];
|
||||
let allowedOnceClauses = [
|
||||
VersionedClause<OMPC_DynGroupprivate, 61>,
|
||||
VersionedClause<OMPC_If>,
|
||||
VersionedClause<OMPC_Order, 50>,
|
||||
];
|
||||
@ -2555,6 +2579,7 @@ def OMP_TeamsDistributeParallelDo
|
||||
VersionedClause<OMPC_Collapse>,
|
||||
VersionedClause<OMPC_Default>,
|
||||
VersionedClause<OMPC_DistSchedule>,
|
||||
VersionedClause<OMPC_DynGroupprivate, 61>,
|
||||
VersionedClause<OMPC_NumTeams>,
|
||||
VersionedClause<OMPC_NumThreads>,
|
||||
VersionedClause<OMPC_Order, 50>,
|
||||
@ -2584,6 +2609,7 @@ def OMP_TeamsDistributeParallelDoSimd
|
||||
VersionedClause<OMPC_Collapse>,
|
||||
VersionedClause<OMPC_Default>,
|
||||
VersionedClause<OMPC_DistSchedule>,
|
||||
VersionedClause<OMPC_DynGroupprivate, 61>,
|
||||
VersionedClause<OMPC_NumTeams>,
|
||||
VersionedClause<OMPC_NumThreads>,
|
||||
VersionedClause<OMPC_Order, 50>,
|
||||
@ -2620,6 +2646,9 @@ def OMP_TeamsDistributeParallelFor
|
||||
VersionedClause<OMPC_Shared>,
|
||||
VersionedClause<OMPC_ThreadLimit>,
|
||||
];
|
||||
let allowedOnceClauses = [
|
||||
VersionedClause<OMPC_DynGroupprivate, 61>,
|
||||
];
|
||||
let leafConstructs = [OMP_Teams, OMP_Distribute, OMP_Parallel, OMP_For];
|
||||
let category = CA_Executable;
|
||||
let languages = [L_C];
|
||||
@ -2650,6 +2679,9 @@ def OMP_TeamsDistributeParallelForSimd
|
||||
VersionedClause<OMPC_SimdLen>,
|
||||
VersionedClause<OMPC_ThreadLimit>,
|
||||
];
|
||||
let allowedOnceClauses = [
|
||||
VersionedClause<OMPC_DynGroupprivate, 61>,
|
||||
];
|
||||
let leafConstructs =
|
||||
[OMP_Teams, OMP_Distribute, OMP_Parallel, OMP_For, OMP_Simd];
|
||||
let category = CA_Executable;
|
||||
@ -2673,6 +2705,7 @@ def OMP_TeamsDistributeSimd : Directive<[Spelling<"teams distribute simd">]> {
|
||||
VersionedClause<OMPC_Collapse>,
|
||||
VersionedClause<OMPC_Default>,
|
||||
VersionedClause<OMPC_DistSchedule>,
|
||||
VersionedClause<OMPC_DynGroupprivate, 61>,
|
||||
VersionedClause<OMPC_NumTeams>,
|
||||
VersionedClause<OMPC_Order, 50>,
|
||||
VersionedClause<OMPC_SafeLen>,
|
||||
@ -2696,6 +2729,7 @@ def OMP_teams_loop : Directive<[Spelling<"teams loop">]> {
|
||||
VersionedClause<OMPC_Bind, 50>,
|
||||
VersionedClause<OMPC_Collapse>,
|
||||
VersionedClause<OMPC_Default>,
|
||||
VersionedClause<OMPC_DynGroupprivate, 61>,
|
||||
VersionedClause<OMPC_NumTeams>,
|
||||
VersionedClause<OMPC_Order>,
|
||||
VersionedClause<OMPC_ThreadLimit>,
|
||||
|
Loading…
x
Reference in New Issue
Block a user