[llvm] 5d062bf - [flang][OpenMP] Replace modifiers in DYN_GROUPPRIVATE clause (#166199)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Nov 11 06:01:57 PST 2025
Author: Krzysztof Parzyszek
Date: 2025-11-11T08:01:52-06:00
New Revision: 5d062bf0cc45412f7a4dc5f8c8cc3af5b2335fcc
URL: https://github.com/llvm/llvm-project/commit/5d062bf0cc45412f7a4dc5f8c8cc3af5b2335fcc
DIFF: https://github.com/llvm/llvm-project/commit/5d062bf0cc45412f7a4dc5f8c8cc3af5b2335fcc.diff
LOG: [flang][OpenMP] Replace modifiers in DYN_GROUPPRIVATE clause (#166199)
The "prescriptiveness" modifier has been replaced with
"fallback-modifier". The "fallback" value has been removed from the
"prescriptiveness" modifier.
Added:
Modified:
flang/include/flang/Parser/dump-parse-tree.h
flang/include/flang/Parser/parse-tree.h
flang/lib/Lower/OpenMP/Clauses.cpp
flang/lib/Parser/openmp-parsers.cpp
flang/lib/Parser/unparse.cpp
flang/test/Parser/OpenMP/dyn-groupprivate-clause.f90
llvm/include/llvm/Frontend/OpenMP/ClauseT.h
Removed:
################################################################################
diff --git a/flang/include/flang/Parser/dump-parse-tree.h b/flang/include/flang/Parser/dump-parse-tree.h
index 1c4d2daef2a11..353260b2e5c02 100644
--- a/flang/include/flang/Parser/dump-parse-tree.h
+++ b/flang/include/flang/Parser/dump-parse-tree.h
@@ -588,6 +588,8 @@ class ParseTreeDumper {
NODE(parser, OmpExpectation)
NODE_ENUM(OmpExpectation, Value)
NODE(parser, OmpFailClause)
+ NODE(parser, OmpFallbackModifier)
+ NODE_ENUM(OmpFallbackModifier, Value)
NODE(parser, OmpFromClause)
NODE(OmpFromClause, Modifier)
NODE(parser, OmpGrainsizeClause)
diff --git a/flang/include/flang/Parser/parse-tree.h b/flang/include/flang/Parser/parse-tree.h
index cd9429b9631d6..2f6b95b2fa2a8 100644
--- a/flang/include/flang/Parser/parse-tree.h
+++ b/flang/include/flang/Parser/parse-tree.h
@@ -4000,6 +4000,17 @@ struct OmpExpectation {
WRAPPER_CLASS_BOILERPLATE(OmpExpectation, Value);
};
+// Ref: [6.1:tbd]
+//
+// fallback-modifier ->
+// FALLBACK(fallback-mode) // since 6.1
+// fallback-mode ->
+// ABORT | DEFAULT_MEM | NULL // since 6.1
+struct OmpFallbackModifier {
+ ENUM_CLASS(Value, Abort, Default_Mem, Null);
+ WRAPPER_CLASS_BOILERPLATE(OmpFallbackModifier, Value);
+};
+
// REF: [5.1:217-220], [5.2:293-294]
//
// OmpInteropRuntimeIdentifier -> // since 5.2
@@ -4129,9 +4140,8 @@ struct OmpOrderModifier {
//
// prescriptiveness ->
// STRICT // since 5.1
-// FALLBACK // since 6.1
struct OmpPrescriptiveness {
- ENUM_CLASS(Value, Strict, Fallback)
+ ENUM_CLASS(Value, Strict)
WRAPPER_CLASS_BOILERPLATE(OmpPrescriptiveness, Value);
};
@@ -4512,7 +4522,7 @@ struct OmpDynamicAllocatorsClause {
struct OmpDynGroupprivateClause {
TUPLE_CLASS_BOILERPLATE(OmpDynGroupprivateClause);
- MODIFIER_BOILERPLATE(OmpAccessGroup, OmpPrescriptiveness);
+ MODIFIER_BOILERPLATE(OmpAccessGroup, OmpFallbackModifier);
std::tuple<MODIFIERS(), ScalarIntExpr> t;
};
diff --git a/flang/lib/Lower/OpenMP/Clauses.cpp b/flang/lib/Lower/OpenMP/Clauses.cpp
index 2575b7081039b..002b7c1888e73 100644
--- a/flang/lib/Lower/OpenMP/Clauses.cpp
+++ b/flang/lib/Lower/OpenMP/Clauses.cpp
@@ -396,8 +396,6 @@ 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");
}
@@ -799,21 +797,31 @@ DynGroupprivate make(const parser::OmpClause::DynGroupprivate &inp,
semantics::SemanticsContext &semaCtx) {
// imp.v -> OmpDyngroupprivateClause
CLAUSET_ENUM_CONVERT( //
- convert, parser::OmpAccessGroup::Value, DynGroupprivate::AccessGroup,
+ makeAccessGroup, parser::OmpAccessGroup::Value,
+ DynGroupprivate::AccessGroup,
// clang-format off
MS(Cgroup, Cgroup)
// clang-format on
);
+ CLAUSET_ENUM_CONVERT( //
+ makeFallback, parser::OmpFallbackModifier::Value,
+ DynGroupprivate::Fallback,
+ // clang-format off
+ MS(Abort, Abort)
+ MS(Default_Mem, Default_Mem)
+ MS(Null, Null)
+ // clang-format on
+ );
+
auto &mods = semantics::OmpGetModifiers(inp.v);
auto *m0 = semantics::OmpGetUniqueModifier<parser::OmpAccessGroup>(mods);
- auto *m1 = semantics::OmpGetUniqueModifier<parser::OmpPrescriptiveness>(mods);
+ auto *m1 = semantics::OmpGetUniqueModifier<parser::OmpFallbackModifier>(mods);
auto &size = std::get<parser::ScalarIntExpr>(inp.v.t);
- return DynGroupprivate{
- {/*AccessGroup=*/maybeApplyToV(convert, m0),
- /*Prescriptiveness=*/maybeApplyToV(makePrescriptiveness, m1),
- /*Size=*/makeExpr(size, semaCtx)}};
+ return DynGroupprivate{{/*AccessGroup=*/maybeApplyToV(makeAccessGroup, m0),
+ /*Fallback=*/maybeApplyToV(makeFallback, m1),
+ /*Size=*/makeExpr(size, semaCtx)}};
}
Enter make(const parser::OmpClause::Enter &inp,
diff --git a/flang/lib/Parser/openmp-parsers.cpp b/flang/lib/Parser/openmp-parsers.cpp
index 4374acbbe51bf..e2da60ed19de8 100644
--- a/flang/lib/Parser/openmp-parsers.cpp
+++ b/flang/lib/Parser/openmp-parsers.cpp
@@ -791,6 +791,12 @@ TYPE_PARSER(construct<OmpDirectiveNameModifier>(OmpDirectiveNameParser{}))
TYPE_PARSER(construct<OmpExpectation>( //
"PRESENT" >> pure(OmpExpectation::Value::Present)))
+TYPE_PARSER(construct<OmpFallbackModifier>("FALLBACK"_tok >>
+ parenthesized( //
+ "ABORT" >> pure(OmpFallbackModifier::Value::Abort) ||
+ "DEFAULT_MEM" >> pure(OmpFallbackModifier::Value::Default_Mem) ||
+ "NULL" >> pure(OmpFallbackModifier::Value::Null))))
+
TYPE_PARSER(construct<OmpInteropRuntimeIdentifier>(
construct<OmpInteropRuntimeIdentifier>(charLiteralConstant) ||
construct<OmpInteropRuntimeIdentifier>(scalarIntConstantExpr)))
@@ -857,8 +863,7 @@ TYPE_PARSER(construct<OmpOrderingModifier>(
"SIMD" >> pure(OmpOrderingModifier::Value::Simd)))
TYPE_PARSER(construct<OmpPrescriptiveness>(
- "STRICT" >> pure(OmpPrescriptiveness::Value::Strict) ||
- "FALLBACK" >> pure(OmpPrescriptiveness::Value::Fallback)))
+ "STRICT" >> pure(OmpPrescriptiveness::Value::Strict)))
TYPE_PARSER(construct<OmpPresentModifier>( //
"PRESENT" >> pure(OmpPresentModifier::Value::Present)))
@@ -925,7 +930,7 @@ TYPE_PARSER( //
sourced(construct<OmpDynGroupprivateClause::Modifier>(
Parser<OmpAccessGroup>{})) ||
sourced(construct<OmpDynGroupprivateClause::Modifier>(
- Parser<OmpPrescriptiveness>{})))
+ Parser<OmpFallbackModifier>{})))
TYPE_PARSER(
sourced(construct<OmpDeviceClause::Modifier>(Parser<OmpDeviceModifier>{})))
diff --git a/flang/lib/Parser/unparse.cpp b/flang/lib/Parser/unparse.cpp
index dc0f083c9fc95..53e74298f96ac 100644
--- a/flang/lib/Parser/unparse.cpp
+++ b/flang/lib/Parser/unparse.cpp
@@ -2286,6 +2286,11 @@ class UnparseVisitor {
Walk(std::get<OmpObjectList>(x.t));
Walk(": ", std::get<std::optional<std::list<Modifier>>>(x.t));
}
+ void Unparse(const OmpFallbackModifier &x) {
+ Word("FALLBACK(");
+ Walk(x.v);
+ Put(")");
+ }
void Unparse(const OmpDynGroupprivateClause &x) {
using Modifier = OmpDynGroupprivateClause::Modifier;
Walk(std::get<std::optional<std::list<Modifier>>>(x.t), ": ");
@@ -2795,6 +2800,7 @@ class UnparseVisitor {
OmpDeviceTypeClause, DeviceTypeDescription) // OMP device_type
WALK_NESTED_ENUM(OmpReductionModifier, Value) // OMP reduction-modifier
WALK_NESTED_ENUM(OmpExpectation, Value) // OMP motion-expectation
+ WALK_NESTED_ENUM(OmpFallbackModifier, Value) // OMP fallback-modifier
WALK_NESTED_ENUM(OmpInteropType, Value) // OMP InteropType
WALK_NESTED_ENUM(OmpOrderClause, Ordering) // OMP ordering
WALK_NESTED_ENUM(OmpOrderModifier, Value) // OMP order-modifier
diff --git a/flang/test/Parser/OpenMP/dyn-groupprivate-clause.f90 b/flang/test/Parser/OpenMP/dyn-groupprivate-clause.f90
index 7d41efd348e50..599821dbe3377 100644
--- a/flang/test/Parser/OpenMP/dyn-groupprivate-clause.f90
+++ b/flang/test/Parser/OpenMP/dyn-groupprivate-clause.f90
@@ -26,21 +26,21 @@ subroutine f00(n)
subroutine f01(n)
implicit none
integer :: n
- !$omp target dyn_groupprivate(strict: n)
+ !$omp target dyn_groupprivate(fallback(abort): n)
!$omp end target
end
!UNPARSE: SUBROUTINE f01 (n)
!UNPARSE: IMPLICIT NONE
!UNPARSE: INTEGER n
-!UNPARSE: !$OMP TARGET DYN_GROUPPRIVATE(STRICT: n)
+!UNPARSE: !$OMP TARGET DYN_GROUPPRIVATE(FALLBACK(ABORT): 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: | | Modifier -> OmpFallbackModifier -> Value = Abort
!PARSE-TREE: | | Scalar -> Integer -> Expr = 'n'
!PARSE-TREE: | | | Designator -> DataRef -> Name = 'n'
!PARSE-TREE: | Flags = None
@@ -49,21 +49,21 @@ subroutine f01(n)
subroutine f02(n)
implicit none
integer :: n
- !$omp target dyn_groupprivate(fallback, cgroup: n)
+ !$omp target dyn_groupprivate(fallback(default_mem), 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 TARGET DYN_GROUPPRIVATE(FALLBACK(DEFAULT_MEM), 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 -> OmpFallbackModifier -> Value = Default_Mem
!PARSE-TREE: | | Modifier -> OmpAccessGroup -> Value = Cgroup
!PARSE-TREE: | | Scalar -> Integer -> Expr = 'n'
!PARSE-TREE: | | | Designator -> DataRef -> Name = 'n'
diff --git a/llvm/include/llvm/Frontend/OpenMP/ClauseT.h b/llvm/include/llvm/Frontend/OpenMP/ClauseT.h
index 12dfb6c607bb9..67ebafc89cf99 100644
--- a/llvm/include/llvm/Frontend/OpenMP/ClauseT.h
+++ b/llvm/include/llvm/Frontend/OpenMP/ClauseT.h
@@ -241,7 +241,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, Fallback);
+ENUM(Prescriptiveness, Strict);
template <typename I, typename E> //
struct LoopIterationT {
@@ -591,10 +591,10 @@ struct DynamicAllocatorsT {
template <typename T, typename I, typename E> //
struct DynGroupprivateT {
ENUM(AccessGroup, Cgroup);
- using Prescriptiveness = type::Prescriptiveness;
+ ENUM(Fallback, Abort, Default_Mem, Null);
using Size = E;
using TupleTrait = std::true_type;
- std::tuple<OPT(AccessGroup), OPT(Prescriptiveness), Size> t;
+ std::tuple<OPT(AccessGroup), OPT(Fallback), Size> t;
};
// V5.2: [5.8.4] `enter` clause
More information about the llvm-commits
mailing list