[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