[flang-commits] [flang] bc28e96 - [flang][OpenMP] Switch AdjustOp to use modifier infrastructure (#217660)
via flang-commits
flang-commits at lists.llvm.org
Thu Aug 20 12:47:59 PDT 2026
Author: Krzysztof Parzyszek
Date: 2026-08-20T14:47:54-05:00
New Revision: bc28e96978f94f6b10787db295b7116dc171d94f
URL: https://github.com/llvm/llvm-project/commit/bc28e96978f94f6b10787db295b7116dc171d94f
DIFF: https://github.com/llvm/llvm-project/commit/bc28e96978f94f6b10787db295b7116dc171d94f.diff
LOG: [flang][OpenMP] Switch AdjustOp to use modifier infrastructure (#217660)
This will make a subject to automatic modifier validation in the future.
Added:
Modified:
flang/include/flang/Parser/dump-parse-tree.h
flang/include/flang/Parser/parse-tree.h
flang/lib/Parser/openmp-parsers.cpp
flang/lib/Parser/unparse.cpp
flang/test/Parser/OpenMP/declare-variant.f90
Removed:
################################################################################
diff --git a/flang/include/flang/Parser/dump-parse-tree.h b/flang/include/flang/Parser/dump-parse-tree.h
index 5b6bb820a3394..d7a060cb7b429 100644
--- a/flang/include/flang/Parser/dump-parse-tree.h
+++ b/flang/include/flang/Parser/dump-parse-tree.h
@@ -539,8 +539,9 @@ class ParseTreeDumper {
NODE(parser, OmpAccessGroup)
NODE_ENUM(OmpAccessGroup, Value)
NODE(parser, OmpAdjustArgsClause)
- NODE(OmpAdjustArgsClause, OmpAdjustOp)
- NODE_ENUM(OmpAdjustArgsClause::OmpAdjustOp, Value)
+ NODE(OmpAdjustArgsClause, Modifier)
+ NODE(parser, OmpAdjustOp)
+ NODE_ENUM(OmpAdjustOp, Value)
NODE(parser, OmpAffinityClause)
NODE(OmpAffinityClause, Modifier)
NODE(parser, OmpAlignClause)
diff --git a/flang/include/flang/Parser/parse-tree.h b/flang/include/flang/Parser/parse-tree.h
index 1c817805e1dba..e330dac01f3d2 100644
--- a/flang/include/flang/Parser/parse-tree.h
+++ b/flang/include/flang/Parser/parse-tree.h
@@ -3910,6 +3910,16 @@ struct OmpAccessGroup {
WRAPPER_CLASS_BOILERPLATE(OmpAccessGroup, Value);
};
+// Ref: [5.1:63-68], [5.2:195-196], [6.0:331-333]
+//
+// adjust-op ->
+// NOTHING | // since 5.1
+// NEED_DEVICE_PTR // since 5.1
+struct OmpAdjustOp {
+ ENUM_CLASS(Value, Nothing, Need_Device_Ptr)
+ WRAPPER_CLASS_BOILERPLATE(OmpAdjustOp, Value);
+};
+
// Ref: [4.5:72-81], [5.0:110-119], [5.1:134-143], [5.2:169-170]
//
// alignment ->
@@ -4421,11 +4431,8 @@ struct OmpAbsentClause {
struct OmpAdjustArgsClause {
TUPLE_CLASS_BOILERPLATE(OmpAdjustArgsClause);
- struct OmpAdjustOp {
- ENUM_CLASS(Value, Nothing, Need_Device_Ptr)
- WRAPPER_CLASS_BOILERPLATE(OmpAdjustOp, Value);
- };
- std::tuple<OmpAdjustOp, OmpObjectList> t;
+ MODIFIER_BOILERPLATE(OmpAdjustOp);
+ std::tuple<MODIFIERS(), OmpObjectList> t;
};
// Ref: [5.0:135-140], [5.1:161-166], [5.2:264-265]
diff --git a/flang/lib/Parser/openmp-parsers.cpp b/flang/lib/Parser/openmp-parsers.cpp
index 33c85bb945fdc..c532324d5a757 100644
--- a/flang/lib/Parser/openmp-parsers.cpp
+++ b/flang/lib/Parser/openmp-parsers.cpp
@@ -843,6 +843,10 @@ TYPE_PARSER(sourced(construct<OmpContextSelectorSpecification>(
TYPE_PARSER(construct<OmpAccessGroup>( //
"CGROUP" >> pure(OmpAccessGroup::Value::Cgroup)))
+TYPE_PARSER(construct<OmpAdjustOp>( //
+ "NOTHING" >> pure(OmpAdjustOp::Value::Nothing) ||
+ "NEED_DEVICE_PTR" >> pure(OmpAdjustOp::Value::Need_Device_Ptr)))
+
TYPE_PARSER(construct<OmpAlignment>(scalarIntExpr))
TYPE_PARSER(construct<OmpAlignModifier>( //
@@ -1067,6 +1071,9 @@ TYPE_PARSER(construct<OmpxHoldModifier>( //
"OMPX_HOLD" >> pure(OmpxHoldModifier::Value::Ompx_Hold)))
// This could be auto-generated.
+TYPE_PARSER(
+ sourced(construct<OmpAdjustArgsClause::Modifier>(Parser<OmpAdjustOp>{})))
+
TYPE_PARSER(
sourced(construct<OmpAffinityClause::Modifier>(Parser<OmpIterator>{})))
@@ -1220,11 +1227,6 @@ TYPE_PARSER(sourced(construct<OmpWhenClause::Modifier>( //
TYPE_PARSER(construct<OmpAppendArgsClause::OmpAppendOp>(
"INTEROP" >> parenthesized(nonemptyList(Parser<OmpInteropType>{}))))
-TYPE_PARSER(construct<OmpAdjustArgsClause::OmpAdjustOp>(
- "NOTHING" >> pure(OmpAdjustArgsClause::OmpAdjustOp::Value::Nothing) ||
- "NEED_DEVICE_PTR" >>
- pure(OmpAdjustArgsClause::OmpAdjustOp::Value::Need_Device_Ptr)))
-
TYPE_PARSER(construct<OmpApplyClause::Modifier>(Parser<OmpLoopModifier>{}))
TYPE_PARSER(sourced(construct<OmpLoopModifier>(
@@ -1272,7 +1274,7 @@ static inline MOBClause makeMobClause(
}
TYPE_PARSER(construct<OmpAdjustArgsClause>(
- (Parser<OmpAdjustArgsClause::OmpAdjustOp>{} / ":"),
+ maybe(nonemptyList(Parser<OmpAdjustArgsClause::Modifier>{}) / ":"),
Parser<OmpObjectList>{}))
// [5.0] 2.10.1 affinity([aff-modifier:] locator-list)
diff --git a/flang/lib/Parser/unparse.cpp b/flang/lib/Parser/unparse.cpp
index d46c65ae72329..4d06eeda3ab19 100644
--- a/flang/lib/Parser/unparse.cpp
+++ b/flang/lib/Parser/unparse.cpp
@@ -2177,8 +2177,8 @@ class UnparseVisitor {
}
void Unparse(const OmpAbsentClause &x) { Walk("", x.v, ","); }
void Unparse(const OmpAdjustArgsClause &x) {
- Walk(std::get<OmpAdjustArgsClause::OmpAdjustOp>(x.t).v);
- Put(":");
+ using Modifier = OmpAdjustArgsClause::Modifier;
+ Walk(std::get<std::optional<std::list<Modifier>>>(x.t), ": ");
Walk(std::get<parser::OmpObjectList>(x.t));
}
void Unparse(const OmpAffinityClause &x) {
@@ -2924,7 +2924,7 @@ class UnparseVisitor {
WALK_NESTED_ENUM(InquireSpec::LogVar, Kind)
WALK_NESTED_ENUM(ProcedureStmt, Kind) // R1506
WALK_NESTED_ENUM(UseStmt, ModuleNature) // R1410
- WALK_NESTED_ENUM(OmpAdjustArgsClause::OmpAdjustOp, Value) // OMP adjustop
+ WALK_NESTED_ENUM(OmpAdjustOp, Value) // OMP adjustop
WALK_NESTED_ENUM(OmpAtClause, ActionTime) // OMP at
WALK_NESTED_ENUM(OmpAutomapModifier, Value) // OMP automap-modifier
WALK_NESTED_ENUM(OmpBindClause, Binding) // OMP bind
diff --git a/flang/test/Parser/OpenMP/declare-variant.f90 b/flang/test/Parser/OpenMP/declare-variant.f90
index cc967cf6642ee..b8eb8b2dfc396 100644
--- a/flang/test/Parser/OpenMP/declare-variant.f90
+++ b/flang/test/Parser/OpenMP/declare-variant.f90
@@ -91,8 +91,8 @@ subroutine sb3 (x1, x2)
contains
subroutine sub (v1, v2)
type(c_ptr), value :: v1, v2
-!CHECK: !$OMP DECLARE VARIANT(vsub) MATCH(CONSTRUCT={DISPATCH}) ADJUST_ARGS(NOTHING:v1&
-!CHECK: !$OMP&) ADJUST_ARGS(NEED_DEVICE_PTR:v2)
+!CHECK: !$OMP DECLARE VARIANT(vsub) MATCH(CONSTRUCT={DISPATCH}) ADJUST_ARGS(NOTHING: v&
+!CHECK: !$OMP&1) ADJUST_ARGS(NEED_DEVICE_PTR: v2)
!PARSE-TREE: DeclarationConstruct -> SpecificationConstruct -> OpenMPDeclarativeConstruct -> OmpDeclareVariantDirective -> OmpDirectiveSpecification
!PARSE-TREE: | OmpDirectiveName -> llvm::omp::Directive = declare variant
@@ -102,10 +102,10 @@ subroutine sub (v1, v2)
!PARSE-TREE: | | OmpTraitSelector
!PARSE-TREE: | | | OmpTraitSelectorName -> llvm::omp::Directive = dispatch
!PARSE-TREE: | OmpClause -> AdjustArgs -> OmpAdjustArgsClause
-!PARSE-TREE: | | OmpAdjustOp -> Value = Nothing
+!PARSE-TREE: | | Modifier -> OmpAdjustOp -> Value = Nothing
!PARSE-TREE: | | OmpObjectList -> OmpObject -> Designator -> DataRef -> Name = 'v1'
!PARSE-TREE: | OmpClause -> AdjustArgs -> OmpAdjustArgsClause
-!PARSE-TREE: | | OmpAdjustOp -> Value = Need_Device_Ptr
+!PARSE-TREE: | | Modifier -> OmpAdjustOp -> Value = Need_Device_Ptr
!PARSE-TREE: | | OmpObjectList -> OmpObject -> Designator -> DataRef -> Name = 'v2'
!PARSE-TREE: | Flags = {}
More information about the flang-commits
mailing list