@@ -149,7 +149,7 @@ bool PrescanAndSemaDebugAction::beginSourceFileAction() {
149149 (runSemanticChecks () || true ) && (generateRtTypeTables () || true );
150150}
151151
152- static void addDependentLibs (mlir::ModuleOp & mlirModule, CompilerInstance &ci) {
152+ static void addDependentLibs (mlir::ModuleOp mlirModule, CompilerInstance &ci) {
153153 const std::vector<std::string> &libs =
154154 ci.getInvocation ().getCodeGenOpts ().DependentLibs ;
155155 if (libs.empty ()) {
@@ -171,7 +171,7 @@ static void addDependentLibs(mlir::ModuleOp &mlirModule, CompilerInstance &ci) {
171171// Add to MLIR code target specific items which are dependent on target
172172// configuration specified by the user.
173173// Clang equivalent function: AMDGPUTargetCodeGenInfo::emitTargetGlobals
174- static void addAMDGPUSpecificMLIRItems (mlir::ModuleOp & mlirModule,
174+ static void addAMDGPUSpecificMLIRItems (mlir::ModuleOp mlirModule,
175175 CompilerInstance &ci) {
176176 const TargetOptions &targetOpts = ci.getInvocation ().getTargetOpts ();
177177 const llvm::Triple triple (targetOpts.triple );
@@ -269,7 +269,7 @@ bool CodeGenAction::beginSourceFileAction() {
269269 return false ;
270270 }
271271
272- mlirModule = std::make_unique<mlir::ModuleOp> (module . release () );
272+ mlirModule = std::move (module );
273273 const llvm::DataLayout &dl = targetMachine.createDataLayout ();
274274 fir::support::setMLIRDataLayout (*mlirModule, dl);
275275 return true ;
@@ -303,21 +303,21 @@ bool CodeGenAction::beginSourceFileAction() {
303303 ci.getInvocation ().getFrontendOpts ().features , targetMachine,
304304 ci.getInvocation ().getTargetOpts (), ci.getInvocation ().getCodeGenOpts ());
305305
306- // Fetch module from lb, so we can set
307- mlirModule = std::make_unique<mlir::ModuleOp>(lb.getModule ());
308-
309306 if (ci.getInvocation ().getFrontendOpts ().features .IsEnabled (
310307 Fortran::common::LanguageFeature::OpenMP)) {
311- setOffloadModuleInterfaceAttributes (*mlirModule ,
308+ setOffloadModuleInterfaceAttributes (lb. getModule () ,
312309 ci.getInvocation ().getLangOpts ());
313- setOpenMPVersionAttribute (*mlirModule ,
310+ setOpenMPVersionAttribute (lb. getModule () ,
314311 ci.getInvocation ().getLangOpts ().OpenMPVersion );
315312 }
316313
317314 // Create a parse tree and lower it to FIR
318315 Fortran::parser::Program &parseTree{*ci.getParsing ().parseTree ()};
319316 lb.lower (parseTree, ci.getSemanticsContext ());
320317
318+ // Fetch module from lb, so we can set
319+ mlirModule = lb.getModuleAndRelease ();
320+
321321 // Add target specific items like dependent libraries, target specific
322322 // constants etc.
323323 addDependentLibs (*mlirModule, ci);
@@ -961,6 +961,9 @@ static void generateMachineCodeOrAssemblyImpl(clang::DiagnosticsEngine &diags,
961961
962962 // Run the passes
963963 codeGenPasses.run (llvmModule);
964+
965+ // Cleanup
966+ delete tlii;
964967}
965968
966969void CodeGenAction::runOptimizationPipeline (llvm::raw_pwrite_stream &os) {
@@ -1043,6 +1046,9 @@ void CodeGenAction::runOptimizationPipeline(llvm::raw_pwrite_stream &os) {
10431046
10441047 // Run the passes.
10451048 mpm.run (*llvmModule, mam);
1049+
1050+ // Cleanup
1051+ delete tlii;
10461052}
10471053
10481054// This class handles optimization remark messages requested if
0 commit comments