[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