[flang-commits] [flang] [Flang][OpenMP] Move declare mapper sym creation outside loop, NFC (PR #130794)
via flang-commits
flang-commits at lists.llvm.org
Tue Mar 11 09:30:41 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-flang-fir-hlfir
Author: Sergio Afonso (skatrak)
<details>
<summary>Changes</summary>
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.
---
Full diff: https://github.com/llvm/llvm-project/pull/130794.diff
1 Files Affected:
- (modified) flang/lib/Lower/OpenMP/ClauseProcessor.cpp (+17-15)
``````````diff
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
``````````
</details>
https://github.com/llvm/llvm-project/pull/130794
More information about the flang-commits
mailing list