[flang][OpenMP] Rename some Type
members in OpenMP clauses (#117784)
The intent is to keep names in sync with the terminology from the OpenMP spec: ``` OmpBindClause::Type -> Binding OmpDefaultClause::Type -> DataSharingAttribute OmpDeviceTypeClause::Type -> DeviceTypeDescription OmpProcBindClause::Type -> AffinityPolicy ``` Add more comments with references to the OpenMP specs.
This commit is contained in:
parent
4ad4d34a22
commit
608f4ae113
@ -465,7 +465,7 @@ public:
|
||||
READ_FEATURE(OmpDeclareTargetWithClause)
|
||||
READ_FEATURE(OmpDeclareTargetWithList)
|
||||
READ_FEATURE(OmpDefaultClause)
|
||||
READ_FEATURE(OmpDefaultClause::Type)
|
||||
READ_FEATURE(OmpDefaultClause::DataSharingAttribute)
|
||||
READ_FEATURE(OmpDefaultmapClause)
|
||||
READ_FEATURE(OmpDefaultmapClause::ImplicitBehavior)
|
||||
READ_FEATURE(OmpVariableCategory::Value)
|
||||
@ -508,7 +508,7 @@ public:
|
||||
READ_FEATURE(OmpOrderModifier)
|
||||
READ_FEATURE(OmpOrderModifier::Value)
|
||||
READ_FEATURE(OmpProcBindClause)
|
||||
READ_FEATURE(OmpProcBindClause::Type)
|
||||
READ_FEATURE(OmpProcBindClause::AffinityPolicy)
|
||||
READ_FEATURE(OmpReductionClause)
|
||||
READ_FEATURE(OmpInReductionClause)
|
||||
READ_FEATURE(OmpReductionCombiner)
|
||||
@ -526,7 +526,7 @@ public:
|
||||
READ_FEATURE(OmpDeviceClause)
|
||||
READ_FEATURE(OmpDeviceClause::DeviceModifier)
|
||||
READ_FEATURE(OmpDeviceTypeClause)
|
||||
READ_FEATURE(OmpDeviceTypeClause::Type)
|
||||
READ_FEATURE(OmpDeviceTypeClause::DeviceTypeDescription)
|
||||
READ_FEATURE(OmpChunkModifier)
|
||||
READ_FEATURE(OmpChunkModifier::Value)
|
||||
READ_FEATURE(OmpOrderingModifier)
|
||||
|
@ -190,15 +190,17 @@ void OpenMPCounterVisitor::PostConstructsCommon() {
|
||||
delete curConstruct;
|
||||
}
|
||||
|
||||
void OpenMPCounterVisitor::Post(const OmpProcBindClause::Type &c) {
|
||||
void OpenMPCounterVisitor::Post(const OmpProcBindClause::AffinityPolicy &c) {
|
||||
clauseDetails +=
|
||||
"type=" + std::string{OmpProcBindClause::EnumToString(c)} + ";";
|
||||
}
|
||||
void OpenMPCounterVisitor::Post(const OmpDefaultClause::Type &c) {
|
||||
void OpenMPCounterVisitor::Post(
|
||||
const OmpDefaultClause::DataSharingAttribute &c) {
|
||||
clauseDetails +=
|
||||
"type=" + std::string{OmpDefaultClause::EnumToString(c)} + ";";
|
||||
}
|
||||
void OpenMPCounterVisitor::Post(const OmpDeviceTypeClause::Type &c) {
|
||||
void OpenMPCounterVisitor::Post(
|
||||
const OmpDeviceTypeClause::DeviceTypeDescription &c) {
|
||||
clauseDetails +=
|
||||
"type=" + std::string{OmpDeviceTypeClause::EnumToString(c)} + ";";
|
||||
}
|
||||
|
@ -66,11 +66,11 @@ struct OpenMPCounterVisitor {
|
||||
void Post(const OpenMPConstruct &);
|
||||
void PostConstructsCommon();
|
||||
|
||||
void Post(const OmpProcBindClause::Type &c);
|
||||
void Post(const OmpDefaultClause::Type &c);
|
||||
void Post(const OmpProcBindClause::AffinityPolicy &c);
|
||||
void Post(const OmpDefaultClause::DataSharingAttribute &c);
|
||||
void Post(const OmpDefaultmapClause::ImplicitBehavior &c);
|
||||
void Post(const OmpVariableCategory::Value &c);
|
||||
void Post(const OmpDeviceTypeClause::Type &c);
|
||||
void Post(const OmpDeviceTypeClause::DeviceTypeDescription &c);
|
||||
void Post(const OmpChunkModifier::Value &c);
|
||||
void Post(const OmpLinearModifier::Value &c);
|
||||
void Post(const OmpOrderingModifier::Value &c);
|
||||
|
@ -515,7 +515,7 @@ public:
|
||||
NODE(parser, OmpDeclareTargetWithList)
|
||||
NODE(parser, OmpDeclareMapperSpecifier)
|
||||
NODE(parser, OmpDefaultClause)
|
||||
NODE_ENUM(OmpDefaultClause, Type)
|
||||
NODE_ENUM(OmpDefaultClause, DataSharingAttribute)
|
||||
NODE(parser, OmpVariableCategory)
|
||||
NODE_ENUM(OmpVariableCategory, Value)
|
||||
NODE(parser, OmpDefaultmapClause)
|
||||
@ -575,9 +575,9 @@ public:
|
||||
NODE(parser, OmpNumTasksClause)
|
||||
NODE_ENUM(OmpNumTasksClause, Prescriptiveness)
|
||||
NODE(parser, OmpBindClause)
|
||||
NODE_ENUM(OmpBindClause, Type)
|
||||
NODE_ENUM(OmpBindClause, Binding)
|
||||
NODE(parser, OmpProcBindClause)
|
||||
NODE_ENUM(OmpProcBindClause, Type)
|
||||
NODE_ENUM(OmpProcBindClause, AffinityPolicy)
|
||||
NODE(parser, OmpReductionModifier)
|
||||
NODE_ENUM(OmpReductionModifier, Value)
|
||||
NODE(parser, OmpReductionClause)
|
||||
@ -598,7 +598,7 @@ public:
|
||||
NODE(parser, OmpDeviceClause)
|
||||
NODE_ENUM(OmpDeviceClause, DeviceModifier)
|
||||
NODE(parser, OmpDeviceTypeClause)
|
||||
NODE_ENUM(OmpDeviceTypeClause, Type)
|
||||
NODE_ENUM(OmpDeviceTypeClause, DeviceTypeDescription)
|
||||
NODE(parser, OmpUpdateClause)
|
||||
NODE(parser, OmpChunkModifier)
|
||||
NODE_ENUM(OmpChunkModifier, Value)
|
||||
|
@ -3686,21 +3686,51 @@ struct OmpAllocateClause {
|
||||
std::tuple<MODIFIERS(), OmpObjectList> t;
|
||||
};
|
||||
|
||||
// OMP 5.0 2.4 atomic-default-mem-order-clause ->
|
||||
// ATOMIC_DEFAULT_MEM_ORDER (SEQ_CST | ACQ_REL |
|
||||
// RELAXED)
|
||||
// Ref: [5.0:60-63], [5.1:83-86], [5.2:210-213]
|
||||
//
|
||||
// atomic-default-mem-order-clause ->
|
||||
// ATOMIC_DEFAULT_MEM_ORDER(memory-order) // since 5.0
|
||||
// memory-order ->
|
||||
// SEQ_CST | ACQ_REL | RELAXED | // since 5.0
|
||||
// ACQUIRE | RELEASE // since 5.2
|
||||
struct OmpAtomicDefaultMemOrderClause {
|
||||
WRAPPER_CLASS_BOILERPLATE(
|
||||
OmpAtomicDefaultMemOrderClause, common::OmpAtomicDefaultMemOrderType);
|
||||
using MemoryOrder = common::OmpAtomicDefaultMemOrderType;
|
||||
WRAPPER_CLASS_BOILERPLATE(OmpAtomicDefaultMemOrderClause, MemoryOrder);
|
||||
};
|
||||
|
||||
// 2.15.3.1 default-clause -> DEFAULT (PRIVATE | FIRSTPRIVATE | SHARED | NONE)
|
||||
// Ref: [5.0:128-131], [5.1:151-154], [5.2:258-259]
|
||||
//
|
||||
// bind-clause ->
|
||||
// BIND(binding) // since 5.0
|
||||
// binding ->
|
||||
// TEAMS | PARALLEL | THREAD // since 5.0
|
||||
struct OmpBindClause {
|
||||
ENUM_CLASS(Binding, Parallel, Teams, Thread)
|
||||
WRAPPER_CLASS_BOILERPLATE(OmpBindClause, Binding);
|
||||
};
|
||||
|
||||
// Ref: [4.5:46-50], [5.0:74-78], [5.1:92-96], [5.2:109]
|
||||
//
|
||||
// default-clause ->
|
||||
// DEFAULT(data-sharing-attribute) // since 4.5
|
||||
// data-sharing-attribute ->
|
||||
// SHARED | NONE | // since 4.5
|
||||
// PRIVATE | FIRSTPRIVATE // since 5.0
|
||||
struct OmpDefaultClause {
|
||||
ENUM_CLASS(Type, Private, Firstprivate, Shared, None)
|
||||
WRAPPER_CLASS_BOILERPLATE(OmpDefaultClause, Type);
|
||||
ENUM_CLASS(DataSharingAttribute, Private, Firstprivate, Shared, None)
|
||||
WRAPPER_CLASS_BOILERPLATE(OmpDefaultClause, DataSharingAttribute);
|
||||
};
|
||||
|
||||
// 2.15.5.2 defaultmap -> DEFAULTMAP (implicit-behavior[:variable-category])
|
||||
// Ref: [4.5:103-107], [5.0:324-325], [5.1:357-358], [5.2:161-162]
|
||||
//
|
||||
// defaultmap-clause ->
|
||||
// DEFAULTMAP(implicit-behavior
|
||||
// [: variable-category]) // since 5.0
|
||||
// implicit-behavior ->
|
||||
// TOFROM | // since 4.5
|
||||
// ALLOC | TO | FROM | FIRSTPRIVATE | NONE |
|
||||
// DEFAULT | // since 5.0
|
||||
// PRESENT // since 5.1
|
||||
struct OmpDefaultmapClause {
|
||||
TUPLE_CLASS_BOILERPLATE(OmpDefaultmapClause);
|
||||
ENUM_CLASS(
|
||||
@ -3709,23 +3739,35 @@ struct OmpDefaultmapClause {
|
||||
std::tuple<ImplicitBehavior, MODIFIERS()> t;
|
||||
};
|
||||
|
||||
// 2.13.9 iteration-offset -> +/- non-negative-constant
|
||||
// Ref: [4.5:169-172], [5.0:255-259], [5.1:288-292], [5.2:91-93]
|
||||
//
|
||||
// iteration-offset ->
|
||||
// +|- non-negative-constant // since 4.5
|
||||
struct OmpIterationOffset {
|
||||
TUPLE_CLASS_BOILERPLATE(OmpIterationOffset);
|
||||
std::tuple<DefinedOperator, ScalarIntConstantExpr> t;
|
||||
};
|
||||
|
||||
// 2.13.9 iteration -> induction-variable [iteration-offset]
|
||||
// Ref: [4.5:169-172], [5.0:255-259], [5.1:288-292], [5.2:91-93]
|
||||
//
|
||||
// iteration ->
|
||||
// induction-variable [iteration-offset] // since 4.5
|
||||
struct OmpIteration {
|
||||
TUPLE_CLASS_BOILERPLATE(OmpIteration);
|
||||
std::tuple<Name, std::optional<OmpIterationOffset>> t;
|
||||
};
|
||||
|
||||
// Ref: [4.5:169-172], [5.0:255-259], [5.1:288-292], [5.2:91-93]
|
||||
//
|
||||
// iteration-vector ->
|
||||
// [iteration...] // since 4.5
|
||||
WRAPPER_CLASS(OmpIterationVector, std::list<OmpIteration>);
|
||||
|
||||
// Extract this into a separate structure (instead of having it directly in
|
||||
// OmpDoacrossClause), so that the context in TYPE_CONTEXT_PARSER can be set
|
||||
// separately for OmpDependClause and OmpDoacrossClause.
|
||||
//
|
||||
// See: depend-clause, doacross-clause
|
||||
struct OmpDoacross {
|
||||
OmpDependenceType::Value GetDepType() const;
|
||||
|
||||
@ -3735,15 +3777,15 @@ struct OmpDoacross {
|
||||
std::variant<Sink, Source> u;
|
||||
};
|
||||
|
||||
// Ref: [4.5:169-170], [5.0:255-256], [5.1:288-289], [5.2:323-324]
|
||||
// Ref: [4.5:169-172], [5.0:255-259], [5.1:288-292], [5.2:323-326]
|
||||
//
|
||||
// depend-clause ->
|
||||
// DEPEND(SOURCE) | // since 4.5, until 5.1
|
||||
// DEPEND(SINK: iteration-vector) | // since 4.5, until 5.1
|
||||
// DEPEND(SOURCE) | // since 4.5, until 5.1
|
||||
// DEPEND(SINK: iteration-vector) | // since 4.5, until 5.1
|
||||
// DEPEND([depend-modifier,]
|
||||
// task-dependence-type: locator-list) // since 4.5
|
||||
// task-dependence-type: locator-list) // since 4.5
|
||||
//
|
||||
// depend-modifier -> iterator-modifier // since 5.0
|
||||
// depend-modifier -> iterator-modifier // since 5.0
|
||||
struct OmpDependClause {
|
||||
UNION_CLASS_BOILERPLATE(OmpDependClause);
|
||||
struct TaskDep {
|
||||
@ -3755,6 +3797,10 @@ struct OmpDependClause {
|
||||
std::variant<TaskDep, OmpDoacross> u;
|
||||
};
|
||||
|
||||
// Ref: [5.2:326-328]
|
||||
//
|
||||
// doacross-clause ->
|
||||
// DOACROSS(dependence-type: iteration-vector) // since 5.2
|
||||
WRAPPER_CLASS(OmpDoacrossClause, OmpDoacross);
|
||||
|
||||
// Ref: [5.0:254-255], [5.1:287-288], [5.2:73]
|
||||
@ -3764,25 +3810,41 @@ WRAPPER_CLASS(OmpDoacrossClause, OmpDoacross);
|
||||
// DESTROY(variable) // since 5.2
|
||||
WRAPPER_CLASS(OmpDestroyClause, OmpObject);
|
||||
|
||||
// device([ device-modifier :] scalar-integer-expression)
|
||||
// Ref: [5.0:135-140], [5.1:161-166], [5.2:265-266]
|
||||
//
|
||||
// detach-clause ->
|
||||
// DETACH(event-handle) // since 5.0
|
||||
struct OmpDetachClause {
|
||||
WRAPPER_CLASS_BOILERPLATE(OmpDetachClause, OmpObject);
|
||||
};
|
||||
|
||||
// Ref: [4.5:103-107], [5.0:170-176], [5.1:197-205], [5.2:276-277]
|
||||
//
|
||||
// device-clause ->
|
||||
// DEVICE(scalar-integer-expression) | // since 4.5
|
||||
// DEVICE([device-modifier:]
|
||||
// scalar-integer-expression) // since 5.0
|
||||
struct OmpDeviceClause {
|
||||
TUPLE_CLASS_BOILERPLATE(OmpDeviceClause);
|
||||
ENUM_CLASS(DeviceModifier, Ancestor, Device_Num)
|
||||
std::tuple<std::optional<DeviceModifier>, ScalarIntExpr> t;
|
||||
};
|
||||
|
||||
// device_type(any | host | nohost)
|
||||
// Ref: [5.0:180-185], [5.1:210-216], [5.2:275]
|
||||
//
|
||||
// device-type-clause ->
|
||||
// DEVICE_TYPE(ANY | HOST | NOHOST) // since 5.0
|
||||
struct OmpDeviceTypeClause {
|
||||
ENUM_CLASS(Type, Any, Host, Nohost)
|
||||
WRAPPER_CLASS_BOILERPLATE(OmpDeviceTypeClause, Type);
|
||||
ENUM_CLASS(DeviceTypeDescription, Any, Host, Nohost)
|
||||
WRAPPER_CLASS_BOILERPLATE(OmpDeviceTypeClause, DeviceTypeDescription);
|
||||
};
|
||||
|
||||
// Ref: [4.5:107-109], [5.0:176-180], [5.1:205-210], [5.2:167-168]
|
||||
//
|
||||
// from-clause ->
|
||||
// FROM(locator-list) |
|
||||
// FROM(mapper-modifier: locator-list) | // since 5.0
|
||||
// FROM(motion-modifier[,] ...: locator-list) // since 5.1
|
||||
// FROM(mapper-modifier: locator-list) | // since 5.0
|
||||
// FROM(motion-modifier[,] ...: locator-list) // since 5.1
|
||||
// motion-modifier ->
|
||||
// PRESENT | mapper-modifier | iterator-modifier
|
||||
struct OmpFromClause {
|
||||
@ -3806,11 +3868,6 @@ struct OmpIfClause {
|
||||
std::tuple<std::optional<DirectiveNameModifier>, ScalarLogicalExpr> t;
|
||||
};
|
||||
|
||||
// OpenMPv5.2 12.5.2 detach-clause -> DETACH (event-handle)
|
||||
struct OmpDetachClause {
|
||||
WRAPPER_CLASS_BOILERPLATE(OmpDetachClause, OmpObject);
|
||||
};
|
||||
|
||||
// OMP 5.0 2.19.5.6 in_reduction-clause -> IN_REDUCTION (reduction-identifier:
|
||||
// variable-name-list)
|
||||
struct OmpInReductionClause {
|
||||
@ -3878,10 +3935,16 @@ struct OmpOrderClause {
|
||||
std::tuple<MODIFIERS(), Ordering> t;
|
||||
};
|
||||
|
||||
// 2.5 proc-bind-clause -> PROC_BIND (MASTER | CLOSE | SPREAD)
|
||||
// Ref: [4.5:46-50], [5.0:74-78], [5.1:92-96], [5.2:229-230]
|
||||
//
|
||||
// proc-bind-clause ->
|
||||
// PROC_BIND(affinity-policy) // since 4.5
|
||||
// affinity-policy ->
|
||||
// CLOSE | PRIMARY | SPREAD | // since 4.5
|
||||
// MASTER // since 4.5, until 5.2
|
||||
struct OmpProcBindClause {
|
||||
ENUM_CLASS(Type, Close, Master, Spread, Primary)
|
||||
WRAPPER_CLASS_BOILERPLATE(OmpProcBindClause, Type);
|
||||
ENUM_CLASS(AffinityPolicy, Close, Master, Spread, Primary)
|
||||
WRAPPER_CLASS_BOILERPLATE(OmpProcBindClause, AffinityPolicy);
|
||||
};
|
||||
|
||||
// Ref: [4.5:201-207], [5.0:300-302], [5.1:332-334], [5.2:134-137]
|
||||
@ -3945,13 +4008,6 @@ struct OmpUpdateClause {
|
||||
std::variant<OmpDependenceType, OmpTaskDependenceType> u;
|
||||
};
|
||||
|
||||
// OMP 5.2 11.7.1 bind-clause ->
|
||||
// BIND( PARALLEL | TEAMS | THREAD )
|
||||
struct OmpBindClause {
|
||||
ENUM_CLASS(Type, Parallel, Teams, Thread)
|
||||
WRAPPER_CLASS_BOILERPLATE(OmpBindClause, Type);
|
||||
};
|
||||
|
||||
// OpenMP Clauses
|
||||
struct OmpClause {
|
||||
UNION_CLASS_BOILERPLATE(OmpClause);
|
||||
|
@ -478,7 +478,7 @@ Bind make(const parser::OmpClause::Bind &inp,
|
||||
using wrapped = parser::OmpBindClause;
|
||||
|
||||
CLAUSET_ENUM_CONVERT( //
|
||||
convert, wrapped::Type, Bind::Binding,
|
||||
convert, wrapped::Binding, Bind::Binding,
|
||||
// clang-format off
|
||||
MS(Teams, Teams)
|
||||
MS(Parallel, Parallel)
|
||||
@ -523,7 +523,7 @@ Default make(const parser::OmpClause::Default &inp,
|
||||
using wrapped = parser::OmpDefaultClause;
|
||||
|
||||
CLAUSET_ENUM_CONVERT( //
|
||||
convert, wrapped::Type, Default::DataSharingAttribute,
|
||||
convert, wrapped::DataSharingAttribute, Default::DataSharingAttribute,
|
||||
// clang-format off
|
||||
MS(Firstprivate, Firstprivate)
|
||||
MS(None, None)
|
||||
@ -680,7 +680,8 @@ DeviceType make(const parser::OmpClause::DeviceType &inp,
|
||||
using wrapped = parser::OmpDeviceTypeClause;
|
||||
|
||||
CLAUSET_ENUM_CONVERT( //
|
||||
convert, wrapped::Type, DeviceType::DeviceTypeDescription,
|
||||
convert, wrapped::DeviceTypeDescription,
|
||||
DeviceType::DeviceTypeDescription,
|
||||
// clang-format off
|
||||
MS(Any, Any)
|
||||
MS(Host, Host)
|
||||
@ -1142,7 +1143,7 @@ ProcBind make(const parser::OmpClause::ProcBind &inp,
|
||||
using wrapped = parser::OmpProcBindClause;
|
||||
|
||||
CLAUSET_ENUM_CONVERT( //
|
||||
convert, wrapped::Type, ProcBind::AffinityPolicy,
|
||||
convert, wrapped::AffinityPolicy, ProcBind::AffinityPolicy,
|
||||
// clang-format off
|
||||
MS(Close, Close)
|
||||
MS(Master, Master)
|
||||
|
@ -255,17 +255,18 @@ TYPE_PARSER(construct<OmpAffinityClause>(
|
||||
|
||||
// 2.15.3.1 DEFAULT (PRIVATE | FIRSTPRIVATE | SHARED | NONE)
|
||||
TYPE_PARSER(construct<OmpDefaultClause>(
|
||||
"PRIVATE" >> pure(OmpDefaultClause::Type::Private) ||
|
||||
"FIRSTPRIVATE" >> pure(OmpDefaultClause::Type::Firstprivate) ||
|
||||
"SHARED" >> pure(OmpDefaultClause::Type::Shared) ||
|
||||
"NONE" >> pure(OmpDefaultClause::Type::None)))
|
||||
"PRIVATE" >> pure(OmpDefaultClause::DataSharingAttribute::Private) ||
|
||||
"FIRSTPRIVATE" >>
|
||||
pure(OmpDefaultClause::DataSharingAttribute::Firstprivate) ||
|
||||
"SHARED" >> pure(OmpDefaultClause::DataSharingAttribute::Shared) ||
|
||||
"NONE" >> pure(OmpDefaultClause::DataSharingAttribute::None)))
|
||||
|
||||
// 2.5 PROC_BIND (MASTER | CLOSE | PRIMARY | SPREAD)
|
||||
TYPE_PARSER(construct<OmpProcBindClause>(
|
||||
"CLOSE" >> pure(OmpProcBindClause::Type::Close) ||
|
||||
"MASTER" >> pure(OmpProcBindClause::Type::Master) ||
|
||||
"PRIMARY" >> pure(OmpProcBindClause::Type::Primary) ||
|
||||
"SPREAD" >> pure(OmpProcBindClause::Type::Spread)))
|
||||
"CLOSE" >> pure(OmpProcBindClause::AffinityPolicy::Close) ||
|
||||
"MASTER" >> pure(OmpProcBindClause::AffinityPolicy::Master) ||
|
||||
"PRIMARY" >> pure(OmpProcBindClause::AffinityPolicy::Primary) ||
|
||||
"SPREAD" >> pure(OmpProcBindClause::AffinityPolicy::Spread)))
|
||||
|
||||
TYPE_PARSER(construct<OmpMapClause>(
|
||||
applyFunction<OmpMapClause>(makeMobClause<true>,
|
||||
@ -311,9 +312,9 @@ TYPE_PARSER(construct<OmpDeviceClause>(
|
||||
|
||||
// device_type(any | host | nohost)
|
||||
TYPE_PARSER(construct<OmpDeviceTypeClause>(
|
||||
"ANY" >> pure(OmpDeviceTypeClause::Type::Any) ||
|
||||
"HOST" >> pure(OmpDeviceTypeClause::Type::Host) ||
|
||||
"NOHOST" >> pure(OmpDeviceTypeClause::Type::Nohost)))
|
||||
"ANY" >> pure(OmpDeviceTypeClause::DeviceTypeDescription::Any) ||
|
||||
"HOST" >> pure(OmpDeviceTypeClause::DeviceTypeDescription::Host) ||
|
||||
"NOHOST" >> pure(OmpDeviceTypeClause::DeviceTypeDescription::Nohost)))
|
||||
|
||||
// 2.12 IF (directive-name-modifier: scalar-logical-expr)
|
||||
TYPE_PARSER(construct<OmpIfClause>(
|
||||
@ -432,9 +433,9 @@ TYPE_PARSER(construct<OmpLastprivateClause>(
|
||||
|
||||
// OMP 5.2 11.7.1 BIND ( PARALLEL | TEAMS | THREAD )
|
||||
TYPE_PARSER(construct<OmpBindClause>(
|
||||
"PARALLEL" >> pure(OmpBindClause::Type::Parallel) ||
|
||||
"TEAMS" >> pure(OmpBindClause::Type::Teams) ||
|
||||
"THREAD" >> pure(OmpBindClause::Type::Thread)))
|
||||
"PARALLEL" >> pure(OmpBindClause::Binding::Parallel) ||
|
||||
"TEAMS" >> pure(OmpBindClause::Binding::Teams) ||
|
||||
"THREAD" >> pure(OmpBindClause::Binding::Thread)))
|
||||
|
||||
TYPE_PARSER(
|
||||
"ACQUIRE" >> construct<OmpClause>(construct<OmpClause::Acquire>()) ||
|
||||
|
@ -2830,10 +2830,10 @@ public:
|
||||
WALK_NESTED_ENUM(InquireSpec::LogVar, Kind)
|
||||
WALK_NESTED_ENUM(ProcedureStmt, Kind) // R1506
|
||||
WALK_NESTED_ENUM(UseStmt, ModuleNature) // R1410
|
||||
WALK_NESTED_ENUM(OmpBindClause, Type) // OMP bind
|
||||
WALK_NESTED_ENUM(OmpProcBindClause, Type) // OMP PROC_BIND
|
||||
WALK_NESTED_ENUM(OmpDefaultClause, Type) // OMP DEFAULT
|
||||
WALK_NESTED_ENUM(OmpDefaultmapClause, ImplicitBehavior) // OMP DEFAULTMAP
|
||||
WALK_NESTED_ENUM(OmpBindClause, Binding) // OMP bind
|
||||
WALK_NESTED_ENUM(OmpProcBindClause, AffinityPolicy) // OMP proc_bind
|
||||
WALK_NESTED_ENUM(OmpDefaultClause, DataSharingAttribute) // OMP default
|
||||
WALK_NESTED_ENUM(OmpDefaultmapClause, ImplicitBehavior) // OMP defaultmap
|
||||
WALK_NESTED_ENUM(OmpVariableCategory, Value) // OMP variable-category
|
||||
WALK_NESTED_ENUM(
|
||||
OmpLastprivateClause, LastprivateModifier) // OMP lastprivate-modifier
|
||||
@ -2843,7 +2843,8 @@ public:
|
||||
WALK_NESTED_ENUM(OmpTaskDependenceType, Value) // OMP task-dependence-type
|
||||
WALK_NESTED_ENUM(OmpScheduleClause, Kind) // OMP schedule-kind
|
||||
WALK_NESTED_ENUM(OmpDeviceClause, DeviceModifier) // OMP device modifier
|
||||
WALK_NESTED_ENUM(OmpDeviceTypeClause, Type) // OMP DEVICE_TYPE
|
||||
WALK_NESTED_ENUM(
|
||||
OmpDeviceTypeClause, DeviceTypeDescription) // OMP device_type
|
||||
WALK_NESTED_ENUM(OmpReductionModifier, Value) // OMP reduction-modifier
|
||||
WALK_NESTED_ENUM(OmpExpectation, Value) // OMP motion-expectation
|
||||
WALK_NESTED_ENUM(OmpIfClause, DirectiveNameModifier) // OMP directive-modifier
|
||||
|
@ -428,7 +428,7 @@ void OmpStructureChecker::HasInvalidLoopBinding(
|
||||
for (const auto &clause : clauseList.v) {
|
||||
if (const auto *bindClause{
|
||||
std::get_if<parser::OmpClause::Bind>(&clause.u)}) {
|
||||
if (bindClause->v.v != parser::OmpBindClause::Type::Teams) {
|
||||
if (bindClause->v.v != parser::OmpBindClause::Binding::Teams) {
|
||||
context_.Say(beginDir.source, msg);
|
||||
}
|
||||
}
|
||||
@ -1644,7 +1644,7 @@ void OmpStructureChecker::Leave(const parser::OpenMPDeclareTargetConstruct &x) {
|
||||
[&](const parser::OmpClause::DeviceType &deviceTypeClause) {
|
||||
deviceTypeClauseFound = true;
|
||||
if (deviceTypeClause.v.v !=
|
||||
parser::OmpDeviceTypeClause::Type::Host) {
|
||||
parser::OmpDeviceTypeClause::DeviceTypeDescription::Host) {
|
||||
// Function / subroutine explicitly marked as runnable by the
|
||||
// target device.
|
||||
deviceConstructFound_ = true;
|
||||
|
@ -2023,16 +2023,16 @@ bool OmpAttributeVisitor::Pre(const parser::OpenMPAllocatorsConstruct &x) {
|
||||
void OmpAttributeVisitor::Post(const parser::OmpDefaultClause &x) {
|
||||
if (!dirContext_.empty()) {
|
||||
switch (x.v) {
|
||||
case parser::OmpDefaultClause::Type::Private:
|
||||
case parser::OmpDefaultClause::DataSharingAttribute::Private:
|
||||
SetContextDefaultDSA(Symbol::Flag::OmpPrivate);
|
||||
break;
|
||||
case parser::OmpDefaultClause::Type::Firstprivate:
|
||||
case parser::OmpDefaultClause::DataSharingAttribute::Firstprivate:
|
||||
SetContextDefaultDSA(Symbol::Flag::OmpFirstPrivate);
|
||||
break;
|
||||
case parser::OmpDefaultClause::Type::Shared:
|
||||
case parser::OmpDefaultClause::DataSharingAttribute::Shared:
|
||||
SetContextDefaultDSA(Symbol::Flag::OmpShared);
|
||||
break;
|
||||
case parser::OmpDefaultClause::Type::None:
|
||||
case parser::OmpDefaultClause::DataSharingAttribute::None:
|
||||
SetContextDefaultDSA(Symbol::Flag::OmpNone);
|
||||
break;
|
||||
}
|
||||
|
@ -20,6 +20,6 @@ end
|
||||
!PARSE-TREE: ExecutionPartConstruct -> ExecutableConstruct -> OpenMPConstruct -> OpenMPLoopConstruct
|
||||
!PARSE-TREE: | OmpBeginLoopDirective
|
||||
!PARSE-TREE: | | OmpLoopDirective -> llvm::omp::Directive = loop
|
||||
!PARSE-TREE: | | OmpClauseList -> OmpClause -> Bind -> OmpBindClause -> Type = Parallel
|
||||
!PARSE-TREE: | | OmpClauseList -> OmpClause -> Bind -> OmpBindClause -> Binding = Parallel
|
||||
!PARSE-TREE: | DoConstruct
|
||||
|
||||
|
@ -31,7 +31,7 @@ subroutine openmp_declare_target
|
||||
end do
|
||||
|
||||
!PARSE-TREE: OpenMPDeclarativeConstruct -> OpenMPDeclareTargetConstruct
|
||||
!PARSE-TREE: OmpDeclareTargetSpecifier -> OmpDeclareTargetWithClause -> OmpClauseList -> OmpClause -> DeviceType -> OmpDeviceTypeClause -> Type = Host
|
||||
!PARSE-TREE: OmpDeclareTargetSpecifier -> OmpDeclareTargetWithClause -> OmpClauseList -> OmpClause -> DeviceType -> OmpDeviceTypeClause -> Type = Nohost
|
||||
!PARSE-TREE: OmpDeclareTargetSpecifier -> OmpDeclareTargetWithClause -> OmpClauseList -> OmpClause -> DeviceType -> OmpDeviceTypeClause -> Type = Any
|
||||
!PARSE-TREE: OmpDeclareTargetSpecifier -> OmpDeclareTargetWithClause -> OmpClauseList -> OmpClause -> DeviceType -> OmpDeviceTypeClause -> DeviceTypeDescription = Host
|
||||
!PARSE-TREE: OmpDeclareTargetSpecifier -> OmpDeclareTargetWithClause -> OmpClauseList -> OmpClause -> DeviceType -> OmpDeviceTypeClause -> DeviceTypeDescription = Nohost
|
||||
!PARSE-TREE: OmpDeclareTargetSpecifier -> OmpDeclareTargetWithClause -> OmpClauseList -> OmpClause -> DeviceType -> OmpDeviceTypeClause -> DeviceTypeDescription = Any
|
||||
END subroutine openmp_declare_target
|
||||
|
@ -6,7 +6,7 @@
|
||||
! PARSE-TREE: ExecutionPartConstruct -> ExecutableConstruct -> OpenMPConstruct -> OpenMPBlockConstruct
|
||||
! PARSE-TREE: OmpBeginBlockDirective
|
||||
! PARSE-TREE: OmpBlockDirective -> llvm::omp::Directive = parallel
|
||||
! PARSE-TREE: OmpClauseList -> OmpClause -> ProcBind -> OmpProcBindClause -> Type = Primary
|
||||
! PARSE-TREE: OmpClauseList -> OmpClause -> ProcBind -> OmpProcBindClause -> AffinityPolicy = Primary
|
||||
subroutine sb1
|
||||
!$omp parallel proc_bind(primary)
|
||||
print *, "Hello"
|
||||
|
@ -19,7 +19,7 @@ subroutine test_loop
|
||||
|
||||
!PARSE-TREE: OmpBeginLoopDirective
|
||||
!PARSE-TREE-NEXT: OmpLoopDirective -> llvm::omp::Directive = loop
|
||||
!PARSE-TREE-NEXT: OmpClauseList -> OmpClause -> Bind -> OmpBindClause -> Type = Thread
|
||||
!PARSE-TREE-NEXT: OmpClauseList -> OmpClause -> Bind -> OmpBindClause -> Binding = Thread
|
||||
!CHECK: !$omp loop
|
||||
!$omp loop bind(thread)
|
||||
do i=1,10
|
||||
|
Loading…
x
Reference in New Issue
Block a user