[flang-commits] [flang] [flang][OpenMP] Move some utilities from openmp-parsers to openmp-uti… (PR #169188)
Krzysztof Parzyszek via flang-commits
flang-commits at lists.llvm.org
Sat Nov 22 13:01:14 PST 2025
https://github.com/kparzysz created https://github.com/llvm/llvm-project/pull/169188
…ls, NFC
>From 9ee6fdf9a2347188165cb7742bc80827b49c8a73 Mon Sep 17 00:00:00 2001
From: Krzysztof Parzyszek <Krzysztof.Parzyszek at amd.com>
Date: Sat, 22 Nov 2025 15:00:04 -0600
Subject: [PATCH] [flang][OpenMP] Move some utilities from openmp-parsers to
openmp-utils, NFC
---
flang/include/flang/Parser/openmp-utils.h | 10 ++++++++++
flang/lib/Parser/openmp-parsers.cpp | 24 -----------------------
flang/lib/Parser/openmp-utils.cpp | 19 ++++++++++++++++++
3 files changed, 29 insertions(+), 24 deletions(-)
diff --git a/flang/include/flang/Parser/openmp-utils.h b/flang/include/flang/Parser/openmp-utils.h
index 7396e57144b90..d4b739f4c9529 100644
--- a/flang/include/flang/Parser/openmp-utils.h
+++ b/flang/include/flang/Parser/openmp-utils.h
@@ -126,6 +126,16 @@ const OpenMPConstruct *GetOmp(const ExecutionPartConstruct &x);
const OpenMPLoopConstruct *GetOmpLoop(const ExecutionPartConstruct &x);
const DoConstruct *GetDoConstruct(const ExecutionPartConstruct &x);
+// Is the template argument "Statement<T>" for some T?
+template <typename T> struct IsStatement {
+ static constexpr bool value{false};
+};
+template <typename T> struct IsStatement<Statement<T>> {
+ static constexpr bool value{true};
+};
+
+std::optional<Label> GetStatementLabel(const ExecutionPartConstruct &x);
+
const OmpObjectList *GetOmpObjectList(const OmpClause &clause);
template <typename T>
diff --git a/flang/lib/Parser/openmp-parsers.cpp b/flang/lib/Parser/openmp-parsers.cpp
index 0652dac209dbb..b7f23348328b4 100644
--- a/flang/lib/Parser/openmp-parsers.cpp
+++ b/flang/lib/Parser/openmp-parsers.cpp
@@ -1731,30 +1731,6 @@ struct NonBlockDoConstructParser {
}
return std::nullopt;
}
-
-private:
- // Is the template argument "Statement<T>" for some T?
- template <typename T> struct IsStatement {
- static constexpr bool value{false};
- };
- template <typename T> struct IsStatement<Statement<T>> {
- static constexpr bool value{true};
- };
-
- // Get the Label from a Statement<...> contained in an ExecutionPartConstruct,
- // or std::nullopt, if there is no Statement<...> contained in there.
- template <typename T>
- static std::optional<Label> GetStatementLabel(const T &stmt) {
- if constexpr (IsStatement<T>::value) {
- return stmt.label;
- } else if constexpr (WrapperTrait<T>) {
- return GetStatementLabel(stmt.v);
- } else if constexpr (UnionTrait<T>) {
- return common::visit(
- [&](auto &&s) { return GetStatementLabel(s); }, stmt.u);
- }
- return std::nullopt;
- }
};
struct LoopNestParser {
diff --git a/flang/lib/Parser/openmp-utils.cpp b/flang/lib/Parser/openmp-utils.cpp
index dfe8dbdd5ac9e..3201e5149e27c 100644
--- a/flang/lib/Parser/openmp-utils.cpp
+++ b/flang/lib/Parser/openmp-utils.cpp
@@ -58,6 +58,25 @@ const DoConstruct *GetDoConstruct(const ExecutionPartConstruct &x) {
return nullptr;
}
+// Get the Label from a Statement<...> contained in an ExecutionPartConstruct,
+// or std::nullopt, if there is no Statement<...> contained in there.
+template <typename T>
+static std::optional<Label> GetStatementLabelHelper(const T &stmt) {
+ if constexpr (IsStatement<T>::value) {
+ return stmt.label;
+ } else if constexpr (WrapperTrait<T>) {
+ return GetStatementLabelHelper(stmt.v);
+ } else if constexpr (UnionTrait<T>) {
+ return common::visit(
+ [&](auto &&s) { return GetStatementLabelHelper(s); }, stmt.u);
+ }
+ return std::nullopt;
+}
+
+std::optional<Label> GetStatementLabel(const ExecutionPartConstruct &x) {
+ return GetStatementLabelHelper(x);
+}
+
const OmpObjectList *GetOmpObjectList(const OmpClause &clause) {
// Clauses with OmpObjectList as its data member
using MemberObjectListClauses = std::tuple<OmpClause::Copyin,
More information about the flang-commits
mailing list