Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions flang/examples/FeatureList/FeatureList.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -465,7 +465,7 @@ struct NodeVisitor {
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)
Expand Down Expand Up @@ -508,7 +508,7 @@ struct NodeVisitor {
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)
Expand All @@ -526,7 +526,7 @@ struct NodeVisitor {
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)
Expand Down
8 changes: 5 additions & 3 deletions flang/examples/FlangOmpReport/FlangOmpReportVisitor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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)} + ";";
}
Expand Down
6 changes: 3 additions & 3 deletions flang/examples/FlangOmpReport/FlangOmpReportVisitor.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
8 changes: 4 additions & 4 deletions flang/include/flang/Parser/dump-parse-tree.h
Original file line number Diff line number Diff line change
Expand Up @@ -513,7 +513,7 @@ class ParseTreeDumper {
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)
Expand Down Expand Up @@ -573,9 +573,9 @@ class ParseTreeDumper {
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)
Expand All @@ -596,7 +596,7 @@ class ParseTreeDumper {
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)
Expand Down
130 changes: 93 additions & 37 deletions flang/include/flang/Parser/parse-tree.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
};

// 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);
};

// 2.15.3.1 default-clause -> DEFAULT (PRIVATE | FIRSTPRIVATE | SHARED | NONE)
// 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(
Expand All @@ -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;

Expand All @@ -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 {
Expand All @@ -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]
Expand All @@ -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 {
Expand All @@ -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 {
Expand Down Expand Up @@ -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]
Expand Down Expand Up @@ -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);
Expand Down
9 changes: 5 additions & 4 deletions flang/lib/Lower/OpenMP/Clauses.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down
Loading