Skip to content

Commit 1c1f16c

Browse files
committed
Move cgu_reuse a bit earlier
There is no reason it needs to be lazily computed at the first iteration of the cgu loop.
1 parent 97d48be commit 1c1f16c

File tree

1 file changed

+8
-8
lines changed
  • compiler/rustc_codegen_ssa/src

1 file changed

+8
-8
lines changed

compiler/rustc_codegen_ssa/src/base.rs

+8-8
Original file line numberDiff line numberDiff line change
@@ -607,6 +607,11 @@ pub fn codegen_crate<B: ExtraBackendMethods>(
607607
second_half.iter().rev().interleave(first_half).copied().collect()
608608
};
609609

610+
// Calculate the CGU reuse
611+
let cgu_reuse = tcx.sess.time("find_cgu_reuse", || {
612+
codegen_units.iter().map(|cgu| determine_cgu_reuse(tcx, &cgu)).collect::<Vec<_>>()
613+
});
614+
610615
// The non-parallel compiler can only translate codegen units to LLVM IR
611616
// on a single thread, leading to a staircase effect where the N LLVM
612617
// threads have to wait on the single codegen threads to generate work
@@ -618,7 +623,7 @@ pub fn codegen_crate<B: ExtraBackendMethods>(
618623
// non-parallel compiler anymore, we can compile CGUs end-to-end in
619624
// parallel and get rid of the complicated scheduling logic.
620625
#[cfg(parallel_compiler)]
621-
let pre_compile_cgus = |cgu_reuse: &[CguReuse]| {
626+
let pre_compile_cgus = || {
622627
tcx.sess.time("compile_first_CGU_batch", || {
623628
// Try to find one CGU to compile per thread.
624629
let cgus: Vec<_> = cgu_reuse
@@ -643,9 +648,8 @@ pub fn codegen_crate<B: ExtraBackendMethods>(
643648
};
644649

645650
#[cfg(not(parallel_compiler))]
646-
let pre_compile_cgus = |_: &[CguReuse]| (FxHashMap::default(), Duration::new(0, 0));
651+
let pre_compile_cgus = || (FxHashMap::default(), Duration::new(0, 0));
647652

648-
let mut cgu_reuse = Vec::new();
649653
let mut pre_compiled_cgus: Option<FxHashMap<usize, _>> = None;
650654
let mut total_codegen_time = Duration::new(0, 0);
651655
let start_rss = tcx.sess.time_passes().then(|| get_resident_set_size());
@@ -656,12 +660,8 @@ pub fn codegen_crate<B: ExtraBackendMethods>(
656660

657661
// Do some setup work in the first iteration
658662
if pre_compiled_cgus.is_none() {
659-
// Calculate the CGU reuse
660-
cgu_reuse = tcx.sess.time("find_cgu_reuse", || {
661-
codegen_units.iter().map(|cgu| determine_cgu_reuse(tcx, &cgu)).collect()
662-
});
663663
// Pre compile some CGUs
664-
let (compiled_cgus, codegen_time) = pre_compile_cgus(&cgu_reuse);
664+
let (compiled_cgus, codegen_time) = pre_compile_cgus();
665665
pre_compiled_cgus = Some(compiled_cgus);
666666
total_codegen_time += codegen_time;
667667
}

0 commit comments

Comments
 (0)