From d6da2062ea29ba2d20e815e90ce4ecd598ac47c7 Mon Sep 17 00:00:00 2001 From: Sergio Afonso 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 &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 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