diff options
| author | bors <bors@rust-lang.org> | 2019-02-14 10:32:25 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2019-02-14 10:32:25 +0000 |
| commit | f47ec2ad5b6887b3d400aee49e2294bd27733d18 (patch) | |
| tree | 8888f8d17504ecad6033bd1992efeb9e04145f93 /src/librustc_codegen_llvm/lib.rs | |
| parent | c67d4749a547a0c937e257ad9e0248075178ddc4 (diff) | |
| parent | 410b4456ca52b6e90259d4aaf04376d862ad36d3 (diff) | |
| download | rust-f47ec2ad5b6887b3d400aee49e2294bd27733d18.tar.gz rust-f47ec2ad5b6887b3d400aee49e2294bd27733d18.zip | |
Auto merge of #58455 - Centril:rollup, r=Centril
Rollup of 7 pull requests Successful merges: - #58309 (Add more profiler events) - #58347 (Closure bounds fixes) - #58365 (Add an option to print the status of incremental tasks / dep nodes after running them) - #58371 (Check user type annotations for range patterns.) - #58378 (rustc: Implement incremental "fat" LTO) - #58407 (specify "upper camel case" in style lint) - #58449 (Notify @topecongiro when the state of rustfmt has changed) Failed merges: r? @ghost
Diffstat (limited to 'src/librustc_codegen_llvm/lib.rs')
| -rw-r--r-- | src/librustc_codegen_llvm/lib.rs | 40 |
1 files changed, 35 insertions, 5 deletions
diff --git a/src/librustc_codegen_llvm/lib.rs b/src/librustc_codegen_llvm/lib.rs index ad8db25ee95..b605badc153 100644 --- a/src/librustc_codegen_llvm/lib.rs +++ b/src/librustc_codegen_llvm/lib.rs @@ -54,7 +54,7 @@ extern crate tempfile; extern crate memmap; use rustc_codegen_ssa::traits::*; -use rustc_codegen_ssa::back::write::{CodegenContext, ModuleConfig}; +use rustc_codegen_ssa::back::write::{CodegenContext, ModuleConfig, FatLTOInput}; use rustc_codegen_ssa::back::lto::{SerializedModule, LtoModuleCodegen, ThinModule}; use rustc_codegen_ssa::CompiledModule; use errors::{FatalError, Handler}; @@ -165,10 +165,11 @@ impl WriteBackendMethods for LlvmCodegenBackend { } fn run_fat_lto( cgcx: &CodegenContext<Self>, - modules: Vec<ModuleCodegen<Self::Module>>, + modules: Vec<FatLTOInput<Self>>, + cached_modules: Vec<(SerializedModule<Self::ModuleBuffer>, WorkProduct)>, timeline: &mut Timeline ) -> Result<LtoModuleCodegen<Self>, FatalError> { - back::lto::run_fat(cgcx, modules, timeline) + back::lto::run_fat(cgcx, modules, cached_modules, timeline) } fn run_thin_lto( cgcx: &CodegenContext<Self>, @@ -204,10 +205,14 @@ impl WriteBackendMethods for LlvmCodegenBackend { back::write::codegen(cgcx, diag_handler, module, config, timeline) } fn prepare_thin( - cgcx: &CodegenContext<Self>, module: ModuleCodegen<Self::Module> ) -> (String, Self::ThinBuffer) { - back::lto::prepare_thin(cgcx, module) + back::lto::prepare_thin(module) + } + fn serialize_module( + module: ModuleCodegen<Self::Module> + ) -> (String, Self::ModuleBuffer) { + (module.name, back::lto::ModuleBuffer::new(module.module_llvm.llmod())) } fn run_lto_pass_manager( cgcx: &CodegenContext<Self>, @@ -375,6 +380,31 @@ impl ModuleLlvm { } } + fn parse( + cgcx: &CodegenContext<LlvmCodegenBackend>, + name: &str, + buffer: &back::lto::ModuleBuffer, + handler: &Handler, + ) -> Result<Self, FatalError> { + unsafe { + let llcx = llvm::LLVMRustContextCreate(cgcx.fewer_names); + let llmod_raw = buffer.parse(name, llcx, handler)?; + let tm = match (cgcx.tm_factory.0)() { + Ok(m) => m, + Err(e) => { + handler.struct_err(&e).emit(); + return Err(FatalError) + } + }; + + Ok(ModuleLlvm { + llmod_raw, + llcx, + tm, + }) + } + } + fn llmod(&self) -> &llvm::Module { unsafe { &*self.llmod_raw |
