diff options
| author | John Kåre Alsaker <john.kare.alsaker@gmail.com> | 2020-01-05 02:10:23 +0100 |
|---|---|---|
| committer | John Kåre Alsaker <john.kare.alsaker@gmail.com> | 2020-01-09 22:36:15 +0100 |
| commit | f45758cddc962248dc46d8c051f9f3a73ef50c14 (patch) | |
| tree | e38ae992d5f9b8eb5d679361faed58a927dacb64 /src/librustc_codegen_llvm | |
| parent | 59eb49d0da83fff01ae3c63f2e282b953e5f88df (diff) | |
Compile some CGUs in parallel at the start of codegen
Diffstat (limited to 'src/librustc_codegen_llvm')
| -rw-r--r-- | src/librustc_codegen_llvm/base.rs | 10 | ||||
| -rw-r--r-- | src/librustc_codegen_llvm/lib.rs | 6 |
2 files changed, 7 insertions, 9 deletions
diff --git a/src/librustc_codegen_llvm/base.rs b/src/librustc_codegen_llvm/base.rs index cb44a56d075..d3b524c1a1e 100644 --- a/src/librustc_codegen_llvm/base.rs +++ b/src/librustc_codegen_llvm/base.rs @@ -13,7 +13,7 @@ //! but one `llvm::Type` corresponds to many `Ty`s; for instance, `tup(int, int, //! int)` and `rec(x=int, y=int, z=int)` will have the same `llvm::Type`. -use super::{LlvmCodegenBackend, ModuleLlvm}; +use super::ModuleLlvm; use crate::builder::Builder; use crate::common; @@ -29,7 +29,6 @@ use rustc::middle::exported_symbols; use rustc::mir::mono::{Linkage, Visibility}; use rustc::session::config::DebugInfo; use rustc::ty::TyCtxt; -use rustc_codegen_ssa::back::write::submit_codegened_module_to_llvm; use rustc_codegen_ssa::base::maybe_create_entry_wrapper; use rustc_codegen_ssa::mono_item::MonoItemExt; use rustc_codegen_ssa::traits::*; @@ -100,8 +99,7 @@ pub fn iter_globals(llmod: &'ll llvm::Module) -> ValueIter<'ll> { pub fn compile_codegen_unit( tcx: TyCtxt<'tcx>, cgu_name: Symbol, - tx_to_llvm_workers: &std::sync::mpsc::Sender<Box<dyn std::any::Any + Send>>, -) { +) -> (ModuleCodegen<ModuleLlvm>, u64) { let prof_timer = tcx.prof.generic_activity("codegen_module"); let start_time = Instant::now(); @@ -115,8 +113,6 @@ pub fn compile_codegen_unit( // the time we needed for codegenning it. let cost = time_to_codegen.as_secs() * 1_000_000_000 + time_to_codegen.subsec_nanos() as u64; - submit_codegened_module_to_llvm(&LlvmCodegenBackend(()), tx_to_llvm_workers, module, cost); - fn module_codegen(tcx: TyCtxt<'_>, cgu_name: Symbol) -> ModuleCodegen<ModuleLlvm> { let cgu = tcx.codegen_unit(cgu_name); // Instantiate monomorphizations without filling out definitions yet... @@ -164,6 +160,8 @@ pub fn compile_codegen_unit( kind: ModuleKind::Regular, } } + + (module, cost) } pub fn set_link_section(llval: &Value, attrs: &CodegenFnAttrs) { diff --git a/src/librustc_codegen_llvm/lib.rs b/src/librustc_codegen_llvm/lib.rs index 35c71a66756..a6168128c4d 100644 --- a/src/librustc_codegen_llvm/lib.rs +++ b/src/librustc_codegen_llvm/lib.rs @@ -19,6 +19,7 @@ #![feature(link_args)] #![feature(static_nobundle)] #![feature(trusted_len)] +#![recursion_limit = "256"] use back::write::{create_informational_target_machine, create_target_machine}; use rustc_span::symbol::Symbol; @@ -108,9 +109,8 @@ impl ExtraBackendMethods for LlvmCodegenBackend { &self, tcx: TyCtxt<'_>, cgu_name: Symbol, - tx: &std::sync::mpsc::Sender<Box<dyn Any + Send>>, - ) { - base::compile_codegen_unit(tcx, cgu_name, tx); + ) -> (ModuleCodegen<ModuleLlvm>, u64) { + base::compile_codegen_unit(tcx, cgu_name) } fn target_machine_factory( &self, |
