Skip to content

Commit 4a54869

Browse files
committed
Add copilot suggestions.
1 parent eda69eb commit 4a54869

File tree

3 files changed

+53
-51
lines changed

3 files changed

+53
-51
lines changed

flang/lib/Lower/OpenMP/ClauseProcessor.cpp

Lines changed: 23 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1263,29 +1263,27 @@ void ClauseProcessor::processMapObjects(
12631263
recordType, mapperIdName);
12641264
};
12651265

1266-
auto getDefaultMapperID = [&](const semantics::DerivedTypeSpec *typeSpec,
1267-
std::string &mapperIdName) {
1268-
mapperIdName.clear();
1269-
if (!mlir::isa<mlir::omp::DeclareMapperOp>(
1270-
firOpBuilder.getRegion().getParentOp()) &&
1271-
typeSpec) {
1272-
mapperIdName =
1273-
typeSpec->name().ToString() + llvm::omp::OmpDefaultMapperName;
1274-
if (auto *sym = converter.getCurrentScope().FindSymbol(mapperIdName)) {
1275-
mapperIdName = converter.mangleName(mapperIdName, sym->owner());
1276-
} else {
1277-
mapperIdName =
1278-
converter.mangleName(mapperIdName, *typeSpec->GetScope());
1279-
}
1266+
auto getDefaultMapperID =
1267+
[&](const semantics::DerivedTypeSpec *typeSpec) -> std::string {
1268+
if (mlir::isa<mlir::omp::DeclareMapperOp>(
1269+
firOpBuilder.getRegion().getParentOp()) ||
1270+
!typeSpec)
1271+
return {};
1272+
1273+
std::string mapperIdName =
1274+
typeSpec->name().ToString() + llvm::omp::OmpDefaultMapperName;
1275+
if (auto *sym = converter.getCurrentScope().FindSymbol(mapperIdName)) {
1276+
mapperIdName = converter.mangleName(mapperIdName, sym->owner());
1277+
} else {
1278+
mapperIdName = converter.mangleName(mapperIdName, *typeSpec->GetScope());
12801279
}
12811280

12821281
// Make sure we don't return a mapper to self.
1283-
llvm::StringRef parentOpName;
12841282
if (auto declMapOp = mlir::dyn_cast<mlir::omp::DeclareMapperOp>(
12851283
firOpBuilder.getRegion().getParentOp()))
1286-
parentOpName = declMapOp.getSymName();
1287-
if (mapperIdName == parentOpName)
1288-
mapperIdName.clear();
1284+
if (mapperIdName == declMapOp.getSymName())
1285+
return {};
1286+
return mapperIdName;
12891287
};
12901288

12911289
// Create the mapper symbol from its name, if specified.
@@ -1299,7 +1297,7 @@ void ClauseProcessor::processMapObjects(
12991297
getSymbolDerivedType(*object.sym());
13001298
if (!typeSpec && object.sym()->owner().IsDerivedType())
13011299
typeSpec = object.sym()->owner().derivedTypeSpec();
1302-
getDefaultMapperID(typeSpec, mapperIdName);
1300+
mapperIdName = getDefaultMapperID(typeSpec);
13031301
}
13041302
assert(converter.getModuleOp().lookupSymbol(mapperIdName) &&
13051303
"mapper not found");
@@ -1340,26 +1338,25 @@ void ClauseProcessor::processMapObjects(
13401338

13411339
const semantics::DerivedTypeSpec *objectTypeSpec =
13421340
getSymbolDerivedType(*object.sym());
1343-
if (!objectTypeSpec && object.sym()->owner().IsDerivedType())
1344-
objectTypeSpec = object.sym()->owner().derivedTypeSpec();
13451341

13461342
if (mapperIdNameRef == "__implicit_mapper") {
13471343
if (parentObj.has_value()) {
13481344
mapperId = mlir::FlatSymbolRefAttr();
1349-
} else {
1350-
std::string mapperIdName;
1351-
getDefaultMapperID(objectTypeSpec, mapperIdName);
1345+
} else if (objectTypeSpec) {
1346+
std::string mapperIdName = getDefaultMapperID(objectTypeSpec);
13521347
bool needsDefaultMapper =
1348+
semantics::IsAllocatableOrObjectPointer(object.sym()) ||
13531349
(objectTypeSpec &&
1354-
requiresImplicitDefaultDeclareMapper(*objectTypeSpec)) ||
1355-
semantics::IsAllocatableOrObjectPointer(object.sym());
1350+
requiresImplicitDefaultDeclareMapper(*objectTypeSpec));
13561351
bool containsDelete = (mapTypeBits & mlir::omp::ClauseMapFlags::del) !=
13571352
mlir::omp::ClauseMapFlags::none;
13581353
if (!mapperIdName.empty() && !containsDelete)
13591354
mapperId = addImplicitMapper(object, mapperIdName,
13601355
/*allowGenerate=*/needsDefaultMapper);
13611356
else
13621357
mapperId = mlir::FlatSymbolRefAttr();
1358+
} else {
1359+
mapperId = mlir::FlatSymbolRefAttr();
13631360
}
13641361
}
13651362

flang/lib/Lower/OpenMP/OpenMP.cpp

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2602,31 +2602,28 @@ genTargetOp(lower::AbstractConverter &converter, lower::SymMap &symTable,
26022602
const semantics::DerivedTypeSpec *typeSpec =
26032603
sym.GetType() ? sym.GetType()->AsDerived() : nullptr;
26042604
if (typeSpec) {
2605-
auto getDefaultMapperName = [&]() -> std::string {
2606-
std::string mapperIdName =
2607-
typeSpec->name().ToString() + llvm::omp::OmpDefaultMapperName;
2608-
if (auto *mapperSym =
2609-
converter.getCurrentScope().FindSymbol(mapperIdName))
2610-
mapperIdName =
2611-
converter.mangleName(mapperIdName, mapperSym->owner());
2612-
else
2613-
mapperIdName =
2614-
converter.mangleName(mapperIdName, *typeSpec->GetScope());
2615-
return mapperIdName;
2616-
};
2617-
2618-
std::string mapperIdName = getDefaultMapperName();
2605+
std::string mapperIdName =
2606+
typeSpec->name().ToString() + llvm::omp::OmpDefaultMapperName;
2607+
if (auto *mapperSym =
2608+
converter.getCurrentScope().FindSymbol(mapperIdName))
2609+
mapperIdName =
2610+
converter.mangleName(mapperIdName, mapperSym->owner());
2611+
else
2612+
mapperIdName =
2613+
converter.mangleName(mapperIdName, *typeSpec->GetScope());
2614+
26192615
if (!mapperIdName.empty()) {
26202616
bool allowImplicitMapper =
26212617
semantics::IsAllocatableOrObjectPointer(&sym);
26222618
bool hasDefaultMapper =
26232619
converter.getModuleOp().lookupSymbol(mapperIdName);
26242620
if (hasDefaultMapper || allowImplicitMapper) {
2625-
if (auto recordType = mlir::dyn_cast_or_null<fir::RecordType>(
2626-
converter.genType(*typeSpec))) {
2627-
mapperId = getOrGenImplicitDefaultDeclareMapper(
2628-
converter, loc, recordType, mapperIdName);
2629-
} else if (hasDefaultMapper) {
2621+
if (!hasDefaultMapper) {
2622+
if (auto recordType = mlir::dyn_cast_or_null<fir::RecordType>(
2623+
converter.genType(*typeSpec)))
2624+
mapperId = getOrGenImplicitDefaultDeclareMapper(
2625+
converter, loc, recordType, mapperIdName);
2626+
} else {
26302627
mapperId = mlir::FlatSymbolRefAttr::get(
26312628
&converter.getMLIRContext(), mapperIdName);
26322629
}

flang/lib/Lower/OpenMP/Utils.cpp

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,9 @@ namespace omp {
7070
mlir::FlatSymbolRefAttr getOrGenImplicitDefaultDeclareMapper(
7171
lower::AbstractConverter &converter, mlir::Location loc,
7272
fir::RecordType recordType, llvm::StringRef mapperNameStr) {
73+
if (mapperNameStr.empty())
74+
return {};
75+
7376
if (converter.getModuleOp().lookupSymbol(mapperNameStr))
7477
return mlir::FlatSymbolRefAttr::get(&converter.getMLIRContext(),
7578
mapperNameStr);
@@ -111,7 +114,7 @@ mlir::FlatSymbolRefAttr getOrGenImplicitDefaultDeclareMapper(
111114
firOpBuilder, loc, firOpBuilder.getRefType(fieldTy), rec, field);
112115
};
113116

114-
mlir::omp::DeclareMapperInfoOperands clauseOps;
117+
llvm::SmallVector<mlir::Value> clauseMapVars;
115118
llvm::SmallVector<llvm::SmallVector<int64_t>> memberPlacementIndices;
116119
llvm::SmallVector<mlir::Value> memberMapOps;
117120

@@ -131,8 +134,9 @@ mlir::FlatSymbolRefAttr getOrGenImplicitDefaultDeclareMapper(
131134
recType.getName().str() + llvm::omp::OmpDefaultMapperName;
132135
if (auto *sym = converter.getCurrentScope().FindSymbol(mapperIdName))
133136
mapperIdName = converter.mangleName(mapperIdName, sym->owner());
134-
else if (auto *sym = converter.getCurrentScope().FindSymbol(memberName))
135-
mapperIdName = converter.mangleName(mapperIdName, sym->owner());
137+
else if (auto *memberSym =
138+
converter.getCurrentScope().FindSymbol(memberName))
139+
mapperIdName = converter.mangleName(mapperIdName, memberSym->owner());
136140

137141
mapperId = getOrGenImplicitDefaultDeclareMapper(converter, loc, recType,
138142
mapperIdName);
@@ -155,22 +159,26 @@ mlir::FlatSymbolRefAttr getOrGenImplicitDefaultDeclareMapper(
155159

156160
llvm::SmallVector<mlir::Value> bounds;
157161
genBoundsOps(declareOp.getOriginalBase(), bounds);
158-
mlir::omp::ClauseMapFlags parentMapFlag = mlir::omp::ClauseMapFlags::implicit;
162+
mlir::omp::ClauseMapFlags parentMapFlag = mlir::omp::ClauseMapFlags::to;
163+
parentMapFlag |= mlir::omp::ClauseMapFlags::from;
164+
parentMapFlag |= mlir::omp::ClauseMapFlags::implicit;
159165
mlir::omp::MapInfoOp mapOp = Fortran::utils::openmp::createMapInfoOp(
160166
firOpBuilder, loc, declareOp.getOriginalBase(),
161167
/*varPtrPtr=*/mlir::Value(), /*name=*/"", bounds, memberMapOps,
162168
firOpBuilder.create2DI64ArrayAttr(memberPlacementIndices), parentMapFlag,
163169
captureKind, declareOp.getType(0),
164170
/*partialMap=*/true);
165171

166-
clauseOps.mapVars.emplace_back(mapOp);
167-
mlir::omp::DeclareMapperInfoOp::create(firOpBuilder, loc, clauseOps.mapVars);
172+
clauseMapVars.emplace_back(mapOp);
173+
mlir::omp::DeclareMapperInfoOp::create(firOpBuilder, loc, clauseMapVars);
168174
return mlir::FlatSymbolRefAttr::get(&converter.getMLIRContext(),
169175
mapperNameStr);
170176
}
171177

172178
bool requiresImplicitDefaultDeclareMapper(
173179
const semantics::DerivedTypeSpec &typeSpec) {
180+
// ISO C interoperable types (e.g., c_ptr, c_funptr) must always have implicit
181+
// default mappers available so that OpenMP offloading can correctly map them.
174182
if (semantics::IsIsoCType(&typeSpec))
175183
return true;
176184

0 commit comments

Comments
 (0)