@@ -145,11 +145,10 @@ static bool isConstant(const Fortran::semantics::Symbol &sym) {
145145 sym.test (Fortran::semantics::Symbol::Flag::ReadOnly);
146146}
147147
148- static fir::GlobalOp defineGlobal (Fortran::lower::AbstractConverter &converter,
149- const Fortran::lower::pft::Variable &var,
150- llvm::StringRef globalName,
151- mlir::StringAttr linkage,
152- cuf::DataAttributeAttr dataAttr = {});
148+ // / Call \p genInit to generate code inside \p global initializer region.
149+ static void
150+ createGlobalInitialization (fir::FirOpBuilder &builder, fir::GlobalOp global,
151+ std::function<void (fir::FirOpBuilder &)> genInit);
153152
154153static mlir::Location genLocation (Fortran::lower::AbstractConverter &converter,
155154 const Fortran::semantics::Symbol &sym) {
@@ -467,9 +466,9 @@ static bool globalIsInitialized(fir::GlobalOp global) {
467466}
468467
469468// / Call \p genInit to generate code inside \p global initializer region.
470- void Fortran::lower::createGlobalInitialization (
471- fir::FirOpBuilder &builder, fir::GlobalOp global,
472- std::function<void (fir::FirOpBuilder &)> genInit) {
469+ static void
470+ createGlobalInitialization ( fir::FirOpBuilder &builder, fir::GlobalOp global,
471+ std::function<void (fir::FirOpBuilder &)> genInit) {
473472 mlir::Region ®ion = global.getRegion ();
474473 region.push_back (new mlir::Block);
475474 mlir::Block &block = region.back ();
@@ -479,7 +478,7 @@ void Fortran::lower::createGlobalInitialization(
479478 builder.restoreInsertionPoint (insertPt);
480479}
481480
482- static unsigned getAllocatorIdx (cuf::DataAttributeAttr dataAttr) {
481+ static unsigned getAllocatorIdxFromDataAttr (cuf::DataAttributeAttr dataAttr) {
483482 if (dataAttr) {
484483 if (dataAttr.getValue () == cuf::DataAttribute::Pinned)
485484 return kPinnedAllocatorPos ;
@@ -494,11 +493,10 @@ static unsigned getAllocatorIdx(cuf::DataAttributeAttr dataAttr) {
494493}
495494
496495// / Create the global op and its init if it has one
497- static fir::GlobalOp defineGlobal (Fortran::lower::AbstractConverter &converter,
498- const Fortran::lower::pft::Variable &var,
499- llvm::StringRef globalName,
500- mlir::StringAttr linkage,
501- cuf::DataAttributeAttr dataAttr) {
496+ fir::GlobalOp Fortran::lower::defineGlobal (
497+ Fortran::lower::AbstractConverter &converter,
498+ const Fortran::lower::pft::Variable &var, llvm::StringRef globalName,
499+ mlir::StringAttr linkage, cuf::DataAttributeAttr dataAttr) {
502500 fir::FirOpBuilder &builder = converter.getFirOpBuilder ();
503501 const Fortran::semantics::Symbol &sym = var.getSymbol ();
504502 mlir::Location loc = genLocation (converter, sym);
@@ -545,27 +543,25 @@ static fir::GlobalOp defineGlobal(Fortran::lower::AbstractConverter &converter,
545543 sym.detailsIf <Fortran::semantics::ObjectEntityDetails>();
546544 if (details && details->init ()) {
547545 auto expr = *details->init ();
548- Fortran::lower::createGlobalInitialization (
549- builder, global, [&](fir::FirOpBuilder &b) {
550- mlir::Value box = Fortran::lower::genInitialDataTarget (
551- converter, loc, symTy, expr);
552- b.create <fir::HasValueOp>(loc, box);
553- });
546+ createGlobalInitialization (builder, global, [&](fir::FirOpBuilder &b) {
547+ mlir::Value box =
548+ Fortran::lower::genInitialDataTarget (converter, loc, symTy, expr);
549+ b.create <fir::HasValueOp>(loc, box);
550+ });
554551 } else {
555552 // Create unallocated/disassociated descriptor if no explicit init
556- Fortran::lower::createGlobalInitialization (
557- builder, global, [&](fir::FirOpBuilder &b) {
558- mlir::Value box = fir::factory::createUnallocatedBox (
559- b, loc, symTy,
560- /* nonDeferredParams=*/ std::nullopt ,
561- /* typeSourceBox=*/ {}, getAllocatorIdx (dataAttr));
562- b.create <fir::HasValueOp>(loc, box);
563- });
553+ createGlobalInitialization (builder, global, [&](fir::FirOpBuilder &b) {
554+ mlir::Value box = fir::factory::createUnallocatedBox (
555+ b, loc, symTy,
556+ /* nonDeferredParams=*/ std::nullopt ,
557+ /* typeSourceBox=*/ {}, getAllocatorIdxFromDataAttr (dataAttr));
558+ b.create <fir::HasValueOp>(loc, box);
559+ });
564560 }
565561 } else if (const auto *details =
566562 sym.detailsIf <Fortran::semantics::ObjectEntityDetails>()) {
567563 if (details->init ()) {
568- Fortran::lower:: createGlobalInitialization (
564+ createGlobalInitialization (
569565 builder, global, [&](fir::FirOpBuilder &builder) {
570566 Fortran::lower::StatementContext stmtCtx (
571567 /* cleanupProhibited=*/ true );
@@ -576,7 +572,7 @@ static fir::GlobalOp defineGlobal(Fortran::lower::AbstractConverter &converter,
576572 builder.create <fir::HasValueOp>(loc, castTo);
577573 });
578574 } else if (Fortran::lower::hasDefaultInitialization (sym)) {
579- Fortran::lower:: createGlobalInitialization (
575+ createGlobalInitialization (
580576 builder, global, [&](fir::FirOpBuilder &builder) {
581577 Fortran::lower::StatementContext stmtCtx (
582578 /* cleanupProhibited=*/ true );
@@ -591,7 +587,7 @@ static fir::GlobalOp defineGlobal(Fortran::lower::AbstractConverter &converter,
591587 if (details && details->init ()) {
592588 auto sym{*details->init ()};
593589 if (sym) // Has a procedure target.
594- Fortran::lower:: createGlobalInitialization (
590+ createGlobalInitialization (
595591 builder, global, [&](fir::FirOpBuilder &b) {
596592 Fortran::lower::StatementContext stmtCtx (
597593 /* cleanupProhibited=*/ true );
@@ -601,19 +597,17 @@ static fir::GlobalOp defineGlobal(Fortran::lower::AbstractConverter &converter,
601597 b.create <fir::HasValueOp>(loc, castTo);
602598 });
603599 else { // Has NULL() target.
604- Fortran::lower::createGlobalInitialization (
605- builder, global, [&](fir::FirOpBuilder &b) {
606- auto box{fir::factory::createNullBoxProc (b, loc, symTy)};
607- b.create <fir::HasValueOp>(loc, box);
608- });
600+ createGlobalInitialization (builder, global, [&](fir::FirOpBuilder &b) {
601+ auto box{fir::factory::createNullBoxProc (b, loc, symTy)};
602+ b.create <fir::HasValueOp>(loc, box);
603+ });
609604 }
610605 } else {
611606 // No initialization.
612- Fortran::lower::createGlobalInitialization (
613- builder, global, [&](fir::FirOpBuilder &b) {
614- auto box{fir::factory::createNullBoxProc (b, loc, symTy)};
615- b.create <fir::HasValueOp>(loc, box);
616- });
607+ createGlobalInitialization (builder, global, [&](fir::FirOpBuilder &b) {
608+ auto box{fir::factory::createNullBoxProc (b, loc, symTy)};
609+ b.create <fir::HasValueOp>(loc, box);
610+ });
617611 }
618612 } else if (sym.has <Fortran::semantics::CommonBlockDetails>()) {
619613 mlir::emitError (loc, " COMMON symbol processed elsewhere" );
@@ -634,7 +628,7 @@ static fir::GlobalOp defineGlobal(Fortran::lower::AbstractConverter &converter,
634628 // file.
635629 if (sym.attrs ().test (Fortran::semantics::Attr::BIND_C))
636630 global.setLinkName (builder.createCommonLinkage ());
637- Fortran::lower:: createGlobalInitialization (
631+ createGlobalInitialization (
638632 builder, global, [&](fir::FirOpBuilder &builder) {
639633 mlir::Value initValue;
640634 if (converter.getLoweringOptions ().getInitGlobalZero ())
@@ -826,7 +820,7 @@ void Fortran::lower::defaultInitializeAtRuntime(
826820 /* isConst=*/ true ,
827821 /* isTarget=*/ false ,
828822 /* dataAttr=*/ {});
829- Fortran::lower:: createGlobalInitialization (
823+ createGlobalInitialization (
830824 builder, global, [&](fir::FirOpBuilder &builder) {
831825 Fortran::lower::StatementContext stmtCtx (
832826 /* cleanupProhibited=*/ true );
@@ -842,7 +836,7 @@ void Fortran::lower::defaultInitializeAtRuntime(
842836 /* isConst=*/ true ,
843837 /* isTarget=*/ false ,
844838 /* dataAttr=*/ {});
845- Fortran::lower:: createGlobalInitialization (
839+ createGlobalInitialization (
846840 builder, global, [&](fir::FirOpBuilder &builder) {
847841 Fortran::lower::StatementContext stmtCtx (
848842 /* cleanupProhibited=*/ true );
@@ -1207,7 +1201,7 @@ static fir::GlobalOp defineGlobalAggregateStore(
12071201 if (const auto *objectDetails =
12081202 initSym->detailsIf <Fortran::semantics::ObjectEntityDetails>())
12091203 if (objectDetails->init ()) {
1210- Fortran::lower:: createGlobalInitialization (
1204+ createGlobalInitialization (
12111205 builder, global, [&](fir::FirOpBuilder &builder) {
12121206 Fortran::lower::StatementContext stmtCtx;
12131207 mlir::Value initVal = fir::getBase (genInitializerExprValue (
@@ -1219,12 +1213,11 @@ static fir::GlobalOp defineGlobalAggregateStore(
12191213 // Equivalence has no Fortran initial value. Create an undefined FIR initial
12201214 // value to ensure this is consider an object definition in the IR regardless
12211215 // of the linkage.
1222- Fortran::lower::createGlobalInitialization (
1223- builder, global, [&](fir::FirOpBuilder &builder) {
1224- Fortran::lower::StatementContext stmtCtx;
1225- mlir::Value initVal = builder.create <fir::ZeroOp>(loc, aggTy);
1226- builder.create <fir::HasValueOp>(loc, initVal);
1227- });
1216+ createGlobalInitialization (builder, global, [&](fir::FirOpBuilder &builder) {
1217+ Fortran::lower::StatementContext stmtCtx;
1218+ mlir::Value initVal = builder.create <fir::ZeroOp>(loc, aggTy);
1219+ builder.create <fir::HasValueOp>(loc, initVal);
1220+ });
12281221 return global;
12291222}
12301223
@@ -1543,7 +1536,7 @@ static void finalizeCommonBlockDefinition(
15431536 LLVM_DEBUG (llvm::dbgs () << " }\n " );
15441537 builder.create <fir::HasValueOp>(loc, cb);
15451538 };
1546- Fortran::lower:: createGlobalInitialization (builder, global, initFunc);
1539+ createGlobalInitialization (builder, global, initFunc);
15471540}
15481541
15491542void Fortran::lower::defineCommonBlocks (
0 commit comments