[flang-commits] [flang] [Flang][OpenMP] Move declare mapper sym creation outside loop, NFC (PR #130794)
Sergio Afonso via flang-commits
flang-commits at lists.llvm.org
Tue Mar 11 09:29:58 PDT 2025
https://github.com/skatrak created https://github.com/llvm/llvm-project/pull/130794
This patch simplifies the definition of `ClauseProcessor::processMapObjects` by hoisting the creation of the MLIR symbol associated to an existing `omp.declare_mapper` operation outside of the loop processing all mapped objects.
That change removes some inter-iteration dependencies that made the implementation more difficult to follow.
>From d6da2062ea29ba2d20e815e90ce4ecd598ac47c7 Mon Sep 17 00:00:00 2001
From: Sergio Afonso <safonsof at amd.com>
Date: Tue, 11 Mar 2025 16:23:04 +0000
Subject: [PATCH] [Flang][OpenMP] Move declare mapper sym creation outside
loop, NFC
This patch simplifies the definition of `ClauseProcessor::processMapObjects` by
hoisting the creation of the MLIR symbol associated to an existing
`omp.declare_mapper` operation outside of the loop processing all mapped
objects.
That change removes some inter-iteration dependencies that made the
implementation more difficult to follow.
---
flang/lib/Lower/OpenMP/ClauseProcessor.cpp | 32 ++++++++++++----------
1 file changed, 17 insertions(+), 15 deletions(-)
diff --git a/flang/lib/Lower/OpenMP/ClauseProcessor.cpp b/flang/lib/Lower/OpenMP/ClauseProcessor.cpp
index dab3182e0162f..dda2ac76df3b2 100644
--- a/flang/lib/Lower/OpenMP/ClauseProcessor.cpp
+++ b/flang/lib/Lower/OpenMP/ClauseProcessor.cpp
@@ -928,8 +928,24 @@ void ClauseProcessor::processMapObjects(
llvm::SmallVectorImpl<const semantics::Symbol *> &mapSyms,
llvm::StringRef mapperIdNameRef) const {
fir::FirOpBuilder &firOpBuilder = converter.getFirOpBuilder();
+
+ // Create the mapper symbol from its name, if specified.
mlir::FlatSymbolRefAttr mapperId;
- std::string mapperIdName = mapperIdNameRef.str();
+ if (!mapperIdNameRef.empty() && !objects.empty()) {
+ std::string mapperIdName = mapperIdNameRef.str();
+ if (mapperIdName == "default") {
+ const omp::Object &object = objects.front();
+ auto &typeSpec = object.sym()->owner().IsDerivedType()
+ ? *object.sym()->owner().derivedTypeSpec()
+ : object.sym()->GetType()->derivedTypeSpec();
+ mapperIdName = typeSpec.name().ToString() + ".default";
+ mapperIdName = converter.mangleName(mapperIdName, *typeSpec.GetScope());
+ }
+ assert(converter.getModuleOp().lookupSymbol(mapperIdName) &&
+ "mapper not found");
+ mapperId =
+ mlir::FlatSymbolRefAttr::get(&converter.getMLIRContext(), mapperIdName);
+ }
for (const omp::Object &object : objects) {
llvm::SmallVector<mlir::Value> bounds;
@@ -962,20 +978,6 @@ void ClauseProcessor::processMapObjects(
}
}
- if (!mapperIdName.empty()) {
- if (mapperIdName == "default") {
- auto &typeSpec = object.sym()->owner().IsDerivedType()
- ? *object.sym()->owner().derivedTypeSpec()
- : object.sym()->GetType()->derivedTypeSpec();
- mapperIdName = typeSpec.name().ToString() + ".default";
- mapperIdName = converter.mangleName(mapperIdName, *typeSpec.GetScope());
- }
- assert(converter.getModuleOp().lookupSymbol(mapperIdName) &&
- "mapper not found");
- mapperId = mlir::FlatSymbolRefAttr::get(&converter.getMLIRContext(),
- mapperIdName);
- mapperIdName.clear();
- }
// Explicit map captures are captured ByRef by default,
// optimisation passes may alter this to ByCopy or other capture
// types to optimise
More information about the flang-commits
mailing list