@@ -3553,10 +3553,10 @@ genOMP(lower::AbstractConverter &converter, lower::SymMap &symTable,
35533553 TODO (converter.getCurrentLocation (), " OpenMPDeclareSimdConstruct" );
35543554}
35553555
3556- static void genOpenMPDeclareMapperImpl (
3557- lower::AbstractConverter &converter, semantics::SemanticsContext &semaCtx,
3558- const parser::OpenMPDeclareMapperConstruct &construct ,
3559- const semantics::Symbol *mapperSymOpt = nullptr ) {
3556+ static void genOMP (lower::AbstractConverter &converter, lower::SymMap &symTable,
3557+ semantics::SemanticsContext &semaCtx,
3558+ lower::pft::Evaluation &eval ,
3559+ const parser::OpenMPDeclareMapperConstruct &construct ) {
35603560 mlir::Location loc = converter.genLocation (construct.source );
35613561 fir::FirOpBuilder &firOpBuilder = converter.getFirOpBuilder ();
35623562 const parser::OmpArgumentList &args = construct.v .Arguments ();
@@ -3572,17 +3572,8 @@ static void genOpenMPDeclareMapperImpl(
35723572 " Expected derived type" );
35733573
35743574 std::string mapperNameStr = mapperName;
3575- if (mapperSymOpt && mapperNameStr != " default" ) {
3576- mapperNameStr = converter.mangleName (mapperNameStr, mapperSymOpt->owner ());
3577- } else if (auto *sym =
3578- converter.getCurrentScope ().FindSymbol (mapperNameStr)) {
3575+ if (auto *sym = converter.getCurrentScope ().FindSymbol (mapperNameStr))
35793576 mapperNameStr = converter.mangleName (mapperNameStr, sym->owner ());
3580- }
3581-
3582- // If the mapper op already exists (e.g., created by regular lowering or by
3583- // materialization of imported mappers), do not recreate it.
3584- if (converter.getModuleOp ().lookupSymbol (mapperNameStr))
3585- return ;
35863577
35873578 // Save current insertion point before moving to the module scope to create
35883579 // the DeclareMapperOp
@@ -3605,13 +3596,6 @@ static void genOpenMPDeclareMapperImpl(
36053596 mlir::omp::DeclareMapperInfoOp::create (firOpBuilder, loc, clauseOps.mapVars );
36063597}
36073598
3608- static void genOMP (lower::AbstractConverter &converter, lower::SymMap &symTable,
3609- semantics::SemanticsContext &semaCtx,
3610- lower::pft::Evaluation &eval,
3611- const parser::OpenMPDeclareMapperConstruct &construct) {
3612- genOpenMPDeclareMapperImpl (converter, semaCtx, construct);
3613- }
3614-
36153599static void
36163600genOMP (lower::AbstractConverter &converter, lower::SymMap &symTable,
36173601 semantics::SemanticsContext &semaCtx, lower::pft::Evaluation &eval,
@@ -4247,36 +4231,3 @@ void Fortran::lower::genOpenMPRequires(mlir::Operation *mod,
42474231 offloadMod.setRequires (mlirFlags);
42484232 }
42494233}
4250-
4251- // Walk scopes and materialize omp.declare_mapper ops for mapper declarations
4252- // found in imported modules. If \p scope is null, start from the global scope.
4253- void Fortran::lower::materializeOpenMPDeclareMappers (
4254- Fortran::lower::AbstractConverter &converter,
4255- semantics::SemanticsContext &semaCtx, const semantics::Scope *scope) {
4256- const semantics::Scope &root = scope ? *scope : semaCtx.globalScope ();
4257-
4258- // Recurse into child scopes first (modules, submodules, etc.).
4259- for (const semantics::Scope &child : root.children ())
4260- materializeOpenMPDeclareMappers (converter, semaCtx, &child);
4261-
4262- // Only consider module scopes to avoid duplicating local constructs.
4263- if (!root.IsModule ())
4264- return ;
4265-
4266- // Only materialize for modules coming from mod files to avoid duplicates.
4267- if (!root.symbol () || !root.symbol ()->test (semantics::Symbol::Flag::ModFile))
4268- return ;
4269-
4270- // Scan symbols in this module scope for MapperDetails.
4271- for (auto &it : root) {
4272- const semantics::Symbol &sym = *it.second ;
4273- if (auto *md = sym.detailsIf <semantics::MapperDetails>()) {
4274- for (const auto *decl : md->GetDeclList ()) {
4275- if (const auto *mapperDecl =
4276- std::get_if<parser::OpenMPDeclareMapperConstruct>(&decl->u )) {
4277- genOpenMPDeclareMapperImpl (converter, semaCtx, *mapperDecl, &sym);
4278- }
4279- }
4280- }
4281- }
4282- }
0 commit comments