Let LtoModuleCodegen::optimize take self by value

This commit is contained in:
bjorn3 2022-04-30 20:51:17 +02:00
parent 336bb0afea
commit ee94ff254a
6 changed files with 13 additions and 14 deletions

View file

@ -213,7 +213,7 @@ impl WriteBackendMethods for GccCodegenBackend {
unimplemented!(); unimplemented!();
} }
}; };
Ok(LtoModuleCodegen::Fat { module: Some(module), _serialized_bitcode: vec![] }) Ok(LtoModuleCodegen::Fat { module, _serialized_bitcode: vec![] })
} }
fn run_thin_lto(_cgcx: &CodegenContext<Self>, _modules: Vec<(String, Self::ThinBuffer)>, _cached_modules: Vec<(SerializedModule<Self::ModuleBuffer>, WorkProduct)>) -> Result<(Vec<LtoModuleCodegen<Self>>, Vec<WorkProduct>), FatalError> { fn run_thin_lto(_cgcx: &CodegenContext<Self>, _modules: Vec<(String, Self::ThinBuffer)>, _cached_modules: Vec<(SerializedModule<Self::ModuleBuffer>, WorkProduct)>) -> Result<(Vec<LtoModuleCodegen<Self>>, Vec<WorkProduct>), FatalError> {
@ -234,7 +234,7 @@ impl WriteBackendMethods for GccCodegenBackend {
Ok(()) Ok(())
} }
unsafe fn optimize_thin(_cgcx: &CodegenContext<Self>, _thin: &mut ThinModule<Self>) -> Result<ModuleCodegen<Self::Module>, FatalError> { unsafe fn optimize_thin(_cgcx: &CodegenContext<Self>, _thin: ThinModule<Self>) -> Result<ModuleCodegen<Self::Module>, FatalError> {
unimplemented!(); unimplemented!();
} }

View file

@ -353,7 +353,7 @@ fn fat_lto(
} }
} }
Ok(LtoModuleCodegen::Fat { module: Some(module), _serialized_bitcode: serialized_bitcode }) Ok(LtoModuleCodegen::Fat { module, _serialized_bitcode: serialized_bitcode })
} }
crate struct Linker<'a>(&'a mut llvm::Linker<'a>); crate struct Linker<'a>(&'a mut llvm::Linker<'a>);
@ -726,7 +726,7 @@ impl Drop for ThinBuffer {
} }
pub unsafe fn optimize_thin_module( pub unsafe fn optimize_thin_module(
thin_module: &mut ThinModule<LlvmCodegenBackend>, thin_module: ThinModule<LlvmCodegenBackend>,
cgcx: &CodegenContext<LlvmCodegenBackend>, cgcx: &CodegenContext<LlvmCodegenBackend>,
) -> Result<ModuleCodegen<ModuleLlvm>, FatalError> { ) -> Result<ModuleCodegen<ModuleLlvm>, FatalError> {
let diag_handler = cgcx.create_diag_handler(); let diag_handler = cgcx.create_diag_handler();

View file

@ -220,7 +220,7 @@ impl WriteBackendMethods for LlvmCodegenBackend {
} }
unsafe fn optimize_thin( unsafe fn optimize_thin(
cgcx: &CodegenContext<Self>, cgcx: &CodegenContext<Self>,
thin: &mut ThinModule<Self>, thin: ThinModule<Self>,
) -> Result<ModuleCodegen<Self::Module>, FatalError> { ) -> Result<ModuleCodegen<Self::Module>, FatalError> {
back::lto::optimize_thin_module(thin, cgcx) back::lto::optimize_thin_module(thin, cgcx)
} }

View file

@ -42,7 +42,7 @@ pub struct ThinShared<B: WriteBackendMethods> {
pub enum LtoModuleCodegen<B: WriteBackendMethods> { pub enum LtoModuleCodegen<B: WriteBackendMethods> {
Fat { Fat {
module: Option<ModuleCodegen<B::Module>>, module: ModuleCodegen<B::Module>,
_serialized_bitcode: Vec<SerializedModule<B::ModuleBuffer>>, _serialized_bitcode: Vec<SerializedModule<B::ModuleBuffer>>,
}, },
@ -64,19 +64,18 @@ impl<B: WriteBackendMethods> LtoModuleCodegen<B> {
/// It's intended that the module returned is immediately code generated and /// It's intended that the module returned is immediately code generated and
/// dropped, and then this LTO module is dropped. /// dropped, and then this LTO module is dropped.
pub unsafe fn optimize( pub unsafe fn optimize(
&mut self, self,
cgcx: &CodegenContext<B>, cgcx: &CodegenContext<B>,
) -> Result<ModuleCodegen<B::Module>, FatalError> { ) -> Result<ModuleCodegen<B::Module>, FatalError> {
match *self { match self {
LtoModuleCodegen::Fat { ref mut module, .. } => { LtoModuleCodegen::Fat { module, .. } => {
let module = module.take().unwrap();
{ {
let config = cgcx.config(module.kind); let config = cgcx.config(module.kind);
B::run_lto_pass_manager(cgcx, &module, config, false)?; B::optimize_fat(cgcx, &module, config)?;
} }
Ok(module) Ok(module)
} }
LtoModuleCodegen::Thin(ref mut thin) => B::optimize_thin(cgcx, thin), LtoModuleCodegen::Thin(thin) => B::optimize_thin(cgcx, thin),
} }
} }

View file

@ -889,7 +889,7 @@ fn execute_copy_from_cache_work_item<B: ExtraBackendMethods>(
fn execute_lto_work_item<B: ExtraBackendMethods>( fn execute_lto_work_item<B: ExtraBackendMethods>(
cgcx: &CodegenContext<B>, cgcx: &CodegenContext<B>,
mut module: lto::LtoModuleCodegen<B>, module: lto::LtoModuleCodegen<B>,
module_config: &ModuleConfig, module_config: &ModuleConfig,
) -> Result<WorkItemResult<B>, FatalError> { ) -> Result<WorkItemResult<B>, FatalError> {
let module = unsafe { module.optimize(cgcx)? }; let module = unsafe { module.optimize(cgcx)? };

View file

@ -48,7 +48,7 @@ pub trait WriteBackendMethods: 'static + Sized + Clone {
) -> Result<(), FatalError>; ) -> Result<(), FatalError>;
unsafe fn optimize_thin( unsafe fn optimize_thin(
cgcx: &CodegenContext<Self>, cgcx: &CodegenContext<Self>,
thin: &mut ThinModule<Self>, thin: ThinModule<Self>,
) -> Result<ModuleCodegen<Self::Module>, FatalError>; ) -> Result<ModuleCodegen<Self::Module>, FatalError>;
unsafe fn codegen( unsafe fn codegen(
cgcx: &CodegenContext<Self>, cgcx: &CodegenContext<Self>,