Save/restore more items in cache with incremental compilation
This commit is contained in:
parent
914e43a664
commit
691e953da6
8 changed files with 97 additions and 5 deletions
|
@ -528,12 +528,20 @@ fn copy_all_cgu_workproducts_to_incr_comp_cache_dir(
|
|||
for module in compiled_modules.modules.iter().filter(|m| m.kind == ModuleKind::Regular) {
|
||||
let mut files = Vec::new();
|
||||
if let Some(object_file_path) = &module.object {
|
||||
files.push(("o", object_file_path.as_path()));
|
||||
files.push((OutputType::Object.extension(), object_file_path.as_path()));
|
||||
}
|
||||
if let Some(dwarf_object_file_path) = &module.dwarf_object {
|
||||
files.push(("dwo", dwarf_object_file_path.as_path()));
|
||||
}
|
||||
|
||||
if let Some(path) = &module.assembly {
|
||||
files.push((OutputType::Assembly.extension(), path.as_path()));
|
||||
}
|
||||
if let Some(path) = &module.llvm_ir {
|
||||
files.push((OutputType::LlvmAssembly.extension(), path.as_path()));
|
||||
}
|
||||
if let Some(path) = &module.bytecode {
|
||||
files.push((OutputType::Bitcode.extension(), path.as_path()));
|
||||
}
|
||||
if let Some((id, product)) =
|
||||
copy_cgu_workproduct_to_incr_comp_cache_dir(sess, &module.name, files.as_slice())
|
||||
{
|
||||
|
@ -937,12 +945,28 @@ fn execute_copy_from_cache_work_item<B: ExtraBackendMethods>(
|
|||
load_from_incr_comp_dir(dwarf_obj_out, saved_dwarf_object_file)
|
||||
});
|
||||
|
||||
let load_from_incr_cache = |perform, output_type: OutputType| {
|
||||
if perform {
|
||||
let saved_file = module.source.saved_files.get(output_type.extension())?;
|
||||
let output_path = cgcx.output_filenames.temp_path(output_type, Some(&module.name));
|
||||
load_from_incr_comp_dir(output_path, &saved_file)
|
||||
} else {
|
||||
None
|
||||
}
|
||||
};
|
||||
|
||||
let assembly = load_from_incr_cache(module_config.emit_asm, OutputType::Assembly);
|
||||
let llvm_ir = load_from_incr_cache(module_config.emit_ir, OutputType::LlvmAssembly);
|
||||
let bytecode = load_from_incr_cache(module_config.emit_bc, OutputType::Bitcode);
|
||||
|
||||
WorkItemResult::Finished(CompiledModule {
|
||||
name: module.name,
|
||||
kind: ModuleKind::Regular,
|
||||
object,
|
||||
dwarf_object,
|
||||
bytecode: None,
|
||||
bytecode,
|
||||
assembly,
|
||||
llvm_ir,
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
@ -656,6 +656,8 @@ pub fn codegen_crate<B: ExtraBackendMethods>(
|
|||
object: Some(file_name),
|
||||
dwarf_object: None,
|
||||
bytecode: None,
|
||||
assembly: None,
|
||||
llvm_ir: None,
|
||||
}
|
||||
})
|
||||
});
|
||||
|
|
|
@ -79,13 +79,26 @@ impl<M> ModuleCodegen<M> {
|
|||
emit_obj: bool,
|
||||
emit_dwarf_obj: bool,
|
||||
emit_bc: bool,
|
||||
emit_asm: bool,
|
||||
emit_ir: bool,
|
||||
outputs: &OutputFilenames,
|
||||
) -> CompiledModule {
|
||||
let object = emit_obj.then(|| outputs.temp_path(OutputType::Object, Some(&self.name)));
|
||||
let dwarf_object = emit_dwarf_obj.then(|| outputs.temp_path_dwo(Some(&self.name)));
|
||||
let bytecode = emit_bc.then(|| outputs.temp_path(OutputType::Bitcode, Some(&self.name)));
|
||||
let assembly = emit_asm.then(|| outputs.temp_path(OutputType::Assembly, Some(&self.name)));
|
||||
let llvm_ir =
|
||||
emit_ir.then(|| outputs.temp_path(OutputType::LlvmAssembly, Some(&self.name)));
|
||||
|
||||
CompiledModule { name: self.name.clone(), kind: self.kind, object, dwarf_object, bytecode }
|
||||
CompiledModule {
|
||||
name: self.name.clone(),
|
||||
kind: self.kind,
|
||||
object,
|
||||
dwarf_object,
|
||||
bytecode,
|
||||
assembly,
|
||||
llvm_ir,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -96,6 +109,8 @@ pub struct CompiledModule {
|
|||
pub object: Option<PathBuf>,
|
||||
pub dwarf_object: Option<PathBuf>,
|
||||
pub bytecode: Option<PathBuf>,
|
||||
pub assembly: Option<PathBuf>, // --emit=asm
|
||||
pub llvm_ir: Option<PathBuf>, // --emit=llvm-ir, llvm-bc is in bytecode
|
||||
}
|
||||
|
||||
pub struct CachedModuleCodegen {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue