diff options
| author | bjorn3 <bjorn3@users.noreply.github.com> | 2022-05-13 13:04:48 +0000 |
|---|---|---|
| committer | bjorn3 <bjorn3@users.noreply.github.com> | 2022-05-15 11:49:25 +0000 |
| commit | 1c1f16c3e3222d9e8d0b17285244e6155fc69db3 (patch) | |
| tree | 16f105dad9c0d11a9135ed28bab2240033837a66 /compiler/rustc_codegen_ssa | |
| parent | 97d48bec2d2ac7e1aac807e1fe3e8341189db7da (diff) | |
| download | rust-1c1f16c3e3222d9e8d0b17285244e6155fc69db3.tar.gz rust-1c1f16c3e3222d9e8d0b17285244e6155fc69db3.zip | |
Move cgu_reuse a bit earlier
There is no reason it needs to be lazily computed at the first iteration of the cgu loop.
Diffstat (limited to 'compiler/rustc_codegen_ssa')
| -rw-r--r-- | compiler/rustc_codegen_ssa/src/base.rs | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/compiler/rustc_codegen_ssa/src/base.rs b/compiler/rustc_codegen_ssa/src/base.rs index 7b7e09208a2..4bee2749016 100644 --- a/compiler/rustc_codegen_ssa/src/base.rs +++ b/compiler/rustc_codegen_ssa/src/base.rs @@ -607,6 +607,11 @@ pub fn codegen_crate<B: ExtraBackendMethods>( second_half.iter().rev().interleave(first_half).copied().collect() }; + // Calculate the CGU reuse + let cgu_reuse = tcx.sess.time("find_cgu_reuse", || { + codegen_units.iter().map(|cgu| determine_cgu_reuse(tcx, &cgu)).collect::<Vec<_>>() + }); + // The non-parallel compiler can only translate codegen units to LLVM IR // on a single thread, leading to a staircase effect where the N LLVM // threads have to wait on the single codegen threads to generate work @@ -618,7 +623,7 @@ pub fn codegen_crate<B: ExtraBackendMethods>( // non-parallel compiler anymore, we can compile CGUs end-to-end in // parallel and get rid of the complicated scheduling logic. #[cfg(parallel_compiler)] - let pre_compile_cgus = |cgu_reuse: &[CguReuse]| { + let pre_compile_cgus = || { tcx.sess.time("compile_first_CGU_batch", || { // Try to find one CGU to compile per thread. let cgus: Vec<_> = cgu_reuse @@ -643,9 +648,8 @@ pub fn codegen_crate<B: ExtraBackendMethods>( }; #[cfg(not(parallel_compiler))] - let pre_compile_cgus = |_: &[CguReuse]| (FxHashMap::default(), Duration::new(0, 0)); + let pre_compile_cgus = || (FxHashMap::default(), Duration::new(0, 0)); - let mut cgu_reuse = Vec::new(); let mut pre_compiled_cgus: Option<FxHashMap<usize, _>> = None; let mut total_codegen_time = Duration::new(0, 0); let start_rss = tcx.sess.time_passes().then(|| get_resident_set_size()); @@ -656,12 +660,8 @@ pub fn codegen_crate<B: ExtraBackendMethods>( // Do some setup work in the first iteration if pre_compiled_cgus.is_none() { - // Calculate the CGU reuse - cgu_reuse = tcx.sess.time("find_cgu_reuse", || { - codegen_units.iter().map(|cgu| determine_cgu_reuse(tcx, &cgu)).collect() - }); // Pre compile some CGUs - let (compiled_cgus, codegen_time) = pre_compile_cgus(&cgu_reuse); + let (compiled_cgus, codegen_time) = pre_compile_cgus(); pre_compiled_cgus = Some(compiled_cgus); total_codegen_time += codegen_time; } |
