https://github.com/kparzysz updated https://github.com/llvm/llvm-project/pull/163450
>From 639f10efafc662f28644f71301f40f8c51012cf8 Mon Sep 17 00:00:00 2001 From: Krzysztof Parzyszek <[email protected]> Date: Tue, 14 Oct 2025 15:02:19 -0500 Subject: [PATCH 1/3] [flang][OpenMP] Dump requirement clauses/flags in WithOmpDeclarative --- flang/include/flang/Semantics/symbol.h | 3 ++ flang/lib/Semantics/symbol.cpp | 32 ++++++++++++++++++- .../OpenMP/dump-requires-details.f90 | 14 ++++++++ 3 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 flang/test/Semantics/OpenMP/dump-requires-details.f90 diff --git a/flang/include/flang/Semantics/symbol.h b/flang/include/flang/Semantics/symbol.h index 14da5b443633f..04a063957082a 100644 --- a/flang/include/flang/Semantics/symbol.h +++ b/flang/include/flang/Semantics/symbol.h @@ -73,6 +73,9 @@ class WithOmpDeclarative { ompAtomicDefaultMemOrder_ = flags; } + friend llvm::raw_ostream &operator<<( + llvm::raw_ostream &, const WithOmpDeclarative &); + private: std::optional<RequiresClauses> ompRequires_; std::optional<common::OmpMemoryOrderType> ompAtomicDefaultMemOrder_; diff --git a/flang/lib/Semantics/symbol.cpp b/flang/lib/Semantics/symbol.cpp index 69169469fe8ce..a5f9706a73cf7 100644 --- a/flang/lib/Semantics/symbol.cpp +++ b/flang/lib/Semantics/symbol.cpp @@ -70,6 +70,32 @@ static void DumpList(llvm::raw_ostream &os, const char *label, const T &list) { } } +llvm::raw_ostream &operator<<( + llvm::raw_ostream &os, const WithOmpDeclarative &x) { + if (x.has_ompRequires() || x.has_ompAtomicDefaultMemOrder()) { + os << " OmpRequirements:("; + if (const common::OmpMemoryOrderType *atmo{x.ompAtomicDefaultMemOrder()}) { + os << parser::ToLowerCaseLetters(llvm::omp::getOpenMPClauseName( + llvm::omp::Clause::OMPC_atomic_default_mem_order)) + << '(' << parser::ToLowerCaseLetters(EnumToString(*atmo)) << ')'; + if (x.has_ompRequires()) { + os << ','; + } + } + if (const WithOmpDeclarative::RequiresClauses *reqs{x.ompRequires()}) { + size_t num{0}, size{reqs->count()}; + reqs->IterateOverMembers([&](llvm::omp::Clause f) { + os << parser::ToLowerCaseLetters(llvm::omp::getOpenMPClauseName(f)); + if (++num < size) { + os << ','; + } + }); + } + os << ')'; + } + return os; +} + void SubprogramDetails::set_moduleInterface(Symbol &symbol) { CHECK(!moduleInterface_); moduleInterface_ = &symbol; @@ -150,6 +176,7 @@ llvm::raw_ostream &operator<<( os << x; } } + os << static_cast<const WithOmpDeclarative&>(x); return os; } @@ -580,7 +607,9 @@ llvm::raw_ostream &operator<<(llvm::raw_ostream &os, const Details &details) { common::visit( // common::visitors{ [&](const UnknownDetails &) {}, - [&](const MainProgramDetails &) {}, + [&](const MainProgramDetails &x) { + os << static_cast<const WithOmpDeclarative&>(x); + }, [&](const ModuleDetails &x) { if (x.isSubmodule()) { os << " ("; @@ -599,6 +628,7 @@ llvm::raw_ostream &operator<<(llvm::raw_ostream &os, const Details &details) { if (x.isDefaultPrivate()) { os << " isDefaultPrivate"; } + os << static_cast<const WithOmpDeclarative&>(x); }, [&](const SubprogramNameDetails &x) { os << ' ' << EnumToString(x.kind()); diff --git a/flang/test/Semantics/OpenMP/dump-requires-details.f90 b/flang/test/Semantics/OpenMP/dump-requires-details.f90 new file mode 100644 index 0000000000000..9c844c092c5e6 --- /dev/null +++ b/flang/test/Semantics/OpenMP/dump-requires-details.f90 @@ -0,0 +1,14 @@ +!RUN: %flang_fc1 -fopenmp -fopenmp-version=60 -fdebug-dump-symbols %s | FileCheck %s + +module fred +!$omp requires atomic_default_mem_order(relaxed) +contains +subroutine f00 + !$omp requires unified_address +end +subroutine f01 + !$omp requires unified_shared_memory +end +end module + +!CHECK: fred: Module OmpRequirements:(atomic_default_mem_order(relaxed),unified_address,unified_shared_memory) >From f3532248a2569e21ad476d66bd302dfb5d028185 Mon Sep 17 00:00:00 2001 From: Krzysztof Parzyszek <[email protected]> Date: Tue, 14 Oct 2025 15:58:14 -0500 Subject: [PATCH 2/3] format --- flang/lib/Semantics/symbol.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/flang/lib/Semantics/symbol.cpp b/flang/lib/Semantics/symbol.cpp index a5f9706a73cf7..2a0ac80d28629 100644 --- a/flang/lib/Semantics/symbol.cpp +++ b/flang/lib/Semantics/symbol.cpp @@ -176,7 +176,7 @@ llvm::raw_ostream &operator<<( os << x; } } - os << static_cast<const WithOmpDeclarative&>(x); + os << static_cast<const WithOmpDeclarative &>(x); return os; } @@ -608,7 +608,7 @@ llvm::raw_ostream &operator<<(llvm::raw_ostream &os, const Details &details) { common::visitors{ [&](const UnknownDetails &) {}, [&](const MainProgramDetails &x) { - os << static_cast<const WithOmpDeclarative&>(x); + os << static_cast<const WithOmpDeclarative &>(x); }, [&](const ModuleDetails &x) { if (x.isSubmodule()) { @@ -628,7 +628,7 @@ llvm::raw_ostream &operator<<(llvm::raw_ostream &os, const Details &details) { if (x.isDefaultPrivate()) { os << " isDefaultPrivate"; } - os << static_cast<const WithOmpDeclarative&>(x); + os << static_cast<const WithOmpDeclarative &>(x); }, [&](const SubprogramNameDetails &x) { os << ' ' << EnumToString(x.kind()); >From 0ccf7a0d647864fc84fd81440c7cecee29615cd0 Mon Sep 17 00:00:00 2001 From: Krzysztof Parzyszek <[email protected]> Date: Tue, 14 Oct 2025 15:59:20 -0500 Subject: [PATCH 3/3] fix typo --- flang/lib/Semantics/symbol.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/flang/lib/Semantics/symbol.cpp b/flang/lib/Semantics/symbol.cpp index 2a0ac80d28629..0ec44b7c40491 100644 --- a/flang/lib/Semantics/symbol.cpp +++ b/flang/lib/Semantics/symbol.cpp @@ -74,10 +74,10 @@ llvm::raw_ostream &operator<<( llvm::raw_ostream &os, const WithOmpDeclarative &x) { if (x.has_ompRequires() || x.has_ompAtomicDefaultMemOrder()) { os << " OmpRequirements:("; - if (const common::OmpMemoryOrderType *atmo{x.ompAtomicDefaultMemOrder()}) { + if (const common::OmpMemoryOrderType *admo{x.ompAtomicDefaultMemOrder()}) { os << parser::ToLowerCaseLetters(llvm::omp::getOpenMPClauseName( llvm::omp::Clause::OMPC_atomic_default_mem_order)) - << '(' << parser::ToLowerCaseLetters(EnumToString(*atmo)) << ')'; + << '(' << parser::ToLowerCaseLetters(EnumToString(*admo)) << ')'; if (x.has_ompRequires()) { os << ','; } _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
