Skip to content

Commit c2ca1e8

Browse files
committed
Rebased. Addressed reviewer comments.
1 parent 138250f commit c2ca1e8

File tree

2 files changed

+30
-31
lines changed

2 files changed

+30
-31
lines changed

flang/lib/Lower/OpenMP/ClauseProcessor.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1189,7 +1189,7 @@ void ClauseProcessor::processMapObjects(
11891189
}
11901190
}
11911191

1192-
// Make sure we don't return a mapper to self
1192+
// Make sure we don't return a mapper to self.
11931193
llvm::StringRef parentOpName;
11941194
if (auto declMapOp = mlir::dyn_cast<mlir::omp::DeclareMapperOp>(
11951195
firOpBuilder.getRegion().getParentOp()))
@@ -1299,7 +1299,7 @@ bool ClauseProcessor::processMap(
12991299
llvm::omp::OpenMPOffloadMappingFlags::OMP_MAP_NONE;
13001300
std::string mapperIdName = "__implicit_mapper";
13011301
// If the map type is specified, then process it else set the appropriate
1302-
// default value
1302+
// default value.
13031303
Map::MapType type;
13041304
if (directive == llvm::omp::Directive::OMPD_target_enter_data &&
13051305
semaCtx.langOptions().OpenMPVersion >= 52)

flang/lib/Lower/OpenMP/OpenMP.cpp

Lines changed: 28 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -2391,14 +2391,17 @@ genSingleOp(lower::AbstractConverter &converter, lower::SymMap &symTable,
23912391
queue, item, clauseOps);
23922392
}
23932393

2394-
static mlir::FlatSymbolRefAttr
2395-
genImplicitDefaultDeclareMapper(lower::AbstractConverter &converter,
2396-
mlir::Location loc, fir::RecordType recordType,
2397-
llvm::StringRef mapperNameStr) {
2394+
static mlir::FlatSymbolRefAttr getOrGenImplicitDefaultDeclareMapper(
2395+
lower::AbstractConverter &converter, mlir::Location loc,
2396+
fir::RecordType recordType, llvm::StringRef mapperNameStr) {
2397+
if (converter.getModuleOp().lookupSymbol(mapperNameStr))
2398+
return mlir::FlatSymbolRefAttr::get(&converter.getMLIRContext(),
2399+
mapperNameStr);
2400+
23982401
fir::FirOpBuilder &firOpBuilder = converter.getFirOpBuilder();
23992402

24002403
// Save current insertion point before moving to the module scope to create
2401-
// the DeclareMapperOp
2404+
// the DeclareMapperOp.
24022405
mlir::OpBuilder::InsertionGuard guard(firOpBuilder);
24032406

24042407
firOpBuilder.setInsertionPointToStart(converter.getModuleOp().getBody());
@@ -2429,11 +2432,8 @@ genImplicitDefaultDeclareMapper(lower::AbstractConverter &converter,
24292432
// Return a reference to the contents of a derived type with one field.
24302433
// Also return the field type.
24312434
const auto getFieldRef =
2432-
[&](mlir::Value rec,
2433-
unsigned index) -> std::tuple<mlir::Value, mlir::Type> {
2434-
auto recType = mlir::dyn_cast<fir::RecordType>(
2435-
fir::unwrapPassByRefType(rec.getType()));
2436-
auto [fieldName, fieldTy] = recType.getTypeList()[index];
2435+
[&](mlir::Value rec, llvm::StringRef fieldName, mlir::Type fieldTy,
2436+
mlir::Type recType) -> std::tuple<mlir::Value, mlir::Type> {
24372437
mlir::Value field = firOpBuilder.create<fir::FieldIndexOp>(
24382438
loc, fir::FieldType::get(recType.getContext()), fieldName, recType,
24392439
fir::getTypeParams(rec));
@@ -2452,41 +2452,41 @@ genImplicitDefaultDeclareMapper(lower::AbstractConverter &converter,
24522452
llvm::omp::OpenMPOffloadMappingFlags::OMP_MAP_IMPLICIT;
24532453
mlir::omp::VariableCaptureKind captureKind =
24542454
mlir::omp::VariableCaptureKind::ByRef;
2455-
int64_t index = 0;
24562455

24572456
// Populate the declareMapper region with the map information.
2458-
for (const auto &[memberName, memberType] :
2459-
mlir::dyn_cast<fir::RecordType>(recordType).getTypeList()) {
2460-
auto [ref, type] = getFieldRef(declareOp.getBase(), index);
2457+
for (const auto &entry : llvm::enumerate(
2458+
mlir::dyn_cast<fir::RecordType>(recordType).getTypeList())) {
2459+
const auto &memberName = entry.value().first;
2460+
const auto &memberType = entry.value().second;
2461+
auto [ref, type] =
2462+
getFieldRef(declareOp.getBase(), memberName, memberType, recordType);
24612463
mlir::FlatSymbolRefAttr mapperId;
24622464
if (auto recType = mlir::dyn_cast<fir::RecordType>(memberType)) {
24632465
std::string mapperIdName =
2464-
recType.getName().str() + ".omp.default.mapper";
2466+
recType.getName().str() + llvm::omp::OmpDefaultMapperName;
24652467
if (auto *sym = converter.getCurrentScope().FindSymbol(mapperIdName))
24662468
mapperIdName = converter.mangleName(mapperIdName, sym->owner());
24672469
else if (auto *sym = converter.getCurrentScope().FindSymbol(memberName))
24682470
mapperIdName = converter.mangleName(mapperIdName, sym->owner());
24692471

2470-
if (converter.getModuleOp().lookupSymbol(mapperIdName))
2471-
mapperId = mlir::FlatSymbolRefAttr::get(&converter.getMLIRContext(),
2472-
mapperIdName);
2473-
else
2474-
mapperId = genImplicitDefaultDeclareMapper(converter, loc, recType,
2475-
mapperIdName);
2472+
mapperId = getOrGenImplicitDefaultDeclareMapper(converter, loc, recType,
2473+
mapperIdName);
24762474
}
24772475

24782476
llvm::SmallVector<mlir::Value> bounds;
24792477
genBoundsOps(ref, bounds);
24802478
mlir::Value mapOp = createMapInfoOp(
2481-
firOpBuilder, loc, ref, /*varPtrPtr=*/mlir::Value{}, "", bounds,
2479+
firOpBuilder, loc, ref, /*varPtrPtr=*/mlir::Value{}, /*name=*/"",
2480+
bounds,
24822481
/*members=*/{},
24832482
/*membersIndex=*/mlir::ArrayAttr{},
24842483
static_cast<
24852484
std::underlying_type_t<llvm::omp::OpenMPOffloadMappingFlags>>(
24862485
mapFlag),
24872486
captureKind, ref.getType(), /*partialMap=*/false, mapperId);
24882487
memberMapOps.emplace_back(mapOp);
2489-
memberPlacementIndices.emplace_back(llvm::SmallVector<int64_t>{index++});
2488+
memberPlacementIndices.emplace_back(
2489+
llvm::SmallVector<int64_t>{(int64_t)entry.index()});
24902490
}
24912491

24922492
llvm::SmallVector<mlir::Value> bounds;
@@ -2597,12 +2597,11 @@ genTargetOp(lower::AbstractConverter &converter, lower::SymMap &symTable,
25972597
if (converter.getModuleOp().lookupSymbol(mapperIdName))
25982598
mapperId = mlir::FlatSymbolRefAttr::get(&converter.getMLIRContext(),
25992599
mapperIdName);
2600-
else
2601-
mapperId = genImplicitDefaultDeclareMapper(
2602-
converter, loc,
2603-
mlir::cast<fir::RecordType>(
2604-
converter.genType(sym.GetType()->derivedTypeSpec())),
2605-
mapperIdName);
2600+
mapperId = getOrGenImplicitDefaultDeclareMapper(
2601+
converter, loc,
2602+
mlir::cast<fir::RecordType>(
2603+
converter.genType(sym.GetType()->derivedTypeSpec())),
2604+
mapperIdName);
26062605
}
26072606

26082607
fir::factory::AddrAndBoundsInfo info =

0 commit comments

Comments
 (0)