@@ -149,7 +149,7 @@ bool PrescanAndSemaDebugAction::beginSourceFileAction() {
149
149
(runSemanticChecks () || true ) && (generateRtTypeTables () || true );
150
150
}
151
151
152
- static void addDependentLibs (mlir::ModuleOp & mlirModule, CompilerInstance &ci) {
152
+ static void addDependentLibs (mlir::ModuleOp mlirModule, CompilerInstance &ci) {
153
153
const std::vector<std::string> &libs =
154
154
ci.getInvocation ().getCodeGenOpts ().DependentLibs ;
155
155
if (libs.empty ()) {
@@ -171,7 +171,7 @@ static void addDependentLibs(mlir::ModuleOp &mlirModule, CompilerInstance &ci) {
171
171
// Add to MLIR code target specific items which are dependent on target
172
172
// configuration specified by the user.
173
173
// Clang equivalent function: AMDGPUTargetCodeGenInfo::emitTargetGlobals
174
- static void addAMDGPUSpecificMLIRItems (mlir::ModuleOp & mlirModule,
174
+ static void addAMDGPUSpecificMLIRItems (mlir::ModuleOp mlirModule,
175
175
CompilerInstance &ci) {
176
176
const TargetOptions &targetOpts = ci.getInvocation ().getTargetOpts ();
177
177
const llvm::Triple triple (targetOpts.triple );
@@ -269,7 +269,7 @@ bool CodeGenAction::beginSourceFileAction() {
269
269
return false ;
270
270
}
271
271
272
- mlirModule = std::make_unique<mlir::ModuleOp> (module. release () );
272
+ mlirModule = std::move (module);
273
273
const llvm::DataLayout &dl = targetMachine.createDataLayout ();
274
274
fir::support::setMLIRDataLayout (*mlirModule, dl);
275
275
return true ;
@@ -303,21 +303,21 @@ bool CodeGenAction::beginSourceFileAction() {
303
303
ci.getInvocation ().getFrontendOpts ().features , targetMachine,
304
304
ci.getInvocation ().getTargetOpts (), ci.getInvocation ().getCodeGenOpts ());
305
305
306
- // Fetch module from lb, so we can set
307
- mlirModule = std::make_unique<mlir::ModuleOp>(lb.getModule ());
308
-
309
306
if (ci.getInvocation ().getFrontendOpts ().features .IsEnabled (
310
307
Fortran::common::LanguageFeature::OpenMP)) {
311
- setOffloadModuleInterfaceAttributes (*mlirModule ,
308
+ setOffloadModuleInterfaceAttributes (lb. getModule () ,
312
309
ci.getInvocation ().getLangOpts ());
313
- setOpenMPVersionAttribute (*mlirModule ,
310
+ setOpenMPVersionAttribute (lb. getModule () ,
314
311
ci.getInvocation ().getLangOpts ().OpenMPVersion );
315
312
}
316
313
317
314
// Create a parse tree and lower it to FIR
318
315
Fortran::parser::Program &parseTree{*ci.getParsing ().parseTree ()};
319
316
lb.lower (parseTree, ci.getSemanticsContext ());
320
317
318
+ // Fetch module from lb, so we can set
319
+ mlirModule = lb.getModuleAndRelease ();
320
+
321
321
// Add target specific items like dependent libraries, target specific
322
322
// constants etc.
323
323
addDependentLibs (*mlirModule, ci);
@@ -961,6 +961,9 @@ static void generateMachineCodeOrAssemblyImpl(clang::DiagnosticsEngine &diags,
961
961
962
962
// Run the passes
963
963
codeGenPasses.run (llvmModule);
964
+
965
+ // Cleanup
966
+ delete tlii;
964
967
}
965
968
966
969
void CodeGenAction::runOptimizationPipeline (llvm::raw_pwrite_stream &os) {
@@ -1043,6 +1046,9 @@ void CodeGenAction::runOptimizationPipeline(llvm::raw_pwrite_stream &os) {
1043
1046
1044
1047
// Run the passes.
1045
1048
mpm.run (*llvmModule, mam);
1049
+
1050
+ // Cleanup
1051
+ delete tlii;
1046
1052
}
1047
1053
1048
1054
// This class handles optimization remark messages requested if
0 commit comments