Skip to content

Commit cf68c93

Browse files
authored
[Flang][OpenMP] Move declare mapper sym creation outside loop, NFC (#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.
1 parent 032f83b commit cf68c93

File tree

1 file changed

+17
-15
lines changed

1 file changed

+17
-15
lines changed

flang/lib/Lower/OpenMP/ClauseProcessor.cpp

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -928,8 +928,24 @@ void ClauseProcessor::processMapObjects(
928928
llvm::SmallVectorImpl<const semantics::Symbol *> &mapSyms,
929929
llvm::StringRef mapperIdNameRef) const {
930930
fir::FirOpBuilder &firOpBuilder = converter.getFirOpBuilder();
931+
932+
// Create the mapper symbol from its name, if specified.
931933
mlir::FlatSymbolRefAttr mapperId;
932-
std::string mapperIdName = mapperIdNameRef.str();
934+
if (!mapperIdNameRef.empty() && !objects.empty()) {
935+
std::string mapperIdName = mapperIdNameRef.str();
936+
if (mapperIdName == "default") {
937+
const omp::Object &object = objects.front();
938+
auto &typeSpec = object.sym()->owner().IsDerivedType()
939+
? *object.sym()->owner().derivedTypeSpec()
940+
: object.sym()->GetType()->derivedTypeSpec();
941+
mapperIdName = typeSpec.name().ToString() + ".default";
942+
mapperIdName = converter.mangleName(mapperIdName, *typeSpec.GetScope());
943+
}
944+
assert(converter.getModuleOp().lookupSymbol(mapperIdName) &&
945+
"mapper not found");
946+
mapperId =
947+
mlir::FlatSymbolRefAttr::get(&converter.getMLIRContext(), mapperIdName);
948+
}
933949

934950
for (const omp::Object &object : objects) {
935951
llvm::SmallVector<mlir::Value> bounds;
@@ -962,20 +978,6 @@ void ClauseProcessor::processMapObjects(
962978
}
963979
}
964980

965-
if (!mapperIdName.empty()) {
966-
if (mapperIdName == "default") {
967-
auto &typeSpec = object.sym()->owner().IsDerivedType()
968-
? *object.sym()->owner().derivedTypeSpec()
969-
: object.sym()->GetType()->derivedTypeSpec();
970-
mapperIdName = typeSpec.name().ToString() + ".default";
971-
mapperIdName = converter.mangleName(mapperIdName, *typeSpec.GetScope());
972-
}
973-
assert(converter.getModuleOp().lookupSymbol(mapperIdName) &&
974-
"mapper not found");
975-
mapperId = mlir::FlatSymbolRefAttr::get(&converter.getMLIRContext(),
976-
mapperIdName);
977-
mapperIdName.clear();
978-
}
979981
// Explicit map captures are captured ByRef by default,
980982
// optimisation passes may alter this to ByCopy or other capture
981983
// types to optimise

0 commit comments

Comments
 (0)