mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-25 08:13:41 +00:00
Improve CGU partitioning debug output.
- Pass a slice instead of an iterator to `debug_dump`. - For each CGU set, print: the number of CGUs, the max and min size, and the ratio of the max and min size (which indicates how evenly sized they are). - Print a `FINAL` entry, showing the absolute final results.
This commit is contained in:
parent
1551495d32
commit
1bb957efc6
@ -250,13 +250,13 @@ where
|
||||
cgu.create_size_estimate(tcx);
|
||||
}
|
||||
|
||||
debug_dump(tcx, "INITIAL PARTITIONING:", initial_partitioning.codegen_units.iter());
|
||||
debug_dump(tcx, "INITIAL PARTITIONING", &initial_partitioning.codegen_units);
|
||||
|
||||
// Merge until we have at most `max_cgu_count` codegen units.
|
||||
{
|
||||
let _prof_timer = tcx.prof.generic_activity("cgu_partitioning_merge_cgus");
|
||||
partitioner.merge_codegen_units(cx, &mut initial_partitioning);
|
||||
debug_dump(tcx, "POST MERGING:", initial_partitioning.codegen_units.iter());
|
||||
debug_dump(tcx, "POST MERGING", &initial_partitioning.codegen_units);
|
||||
}
|
||||
|
||||
// In the next step, we use the inlining map to determine which additional
|
||||
@ -272,7 +272,7 @@ where
|
||||
cgu.create_size_estimate(tcx);
|
||||
}
|
||||
|
||||
debug_dump(tcx, "POST INLINING:", post_inlining.codegen_units.iter());
|
||||
debug_dump(tcx, "POST INLINING", &post_inlining.codegen_units);
|
||||
|
||||
// Next we try to make as many symbols "internal" as possible, so LLVM has
|
||||
// more freedom to optimize.
|
||||
@ -322,6 +322,8 @@ where
|
||||
|
||||
result.sort_by(|a, b| a.name().as_str().cmp(b.name().as_str()));
|
||||
|
||||
debug_dump(tcx, "FINAL", &result);
|
||||
|
||||
result
|
||||
}
|
||||
|
||||
@ -346,19 +348,23 @@ struct PostInliningPartitioning<'tcx> {
|
||||
internalization_candidates: FxHashSet<MonoItem<'tcx>>,
|
||||
}
|
||||
|
||||
fn debug_dump<'a, 'tcx, I>(tcx: TyCtxt<'tcx>, label: &str, cgus: I)
|
||||
where
|
||||
I: Iterator<Item = &'a CodegenUnit<'tcx>>,
|
||||
'tcx: 'a,
|
||||
{
|
||||
fn debug_dump<'a, 'tcx: 'a>(tcx: TyCtxt<'tcx>, label: &str, cgus: &[CodegenUnit<'tcx>]) {
|
||||
let dump = move || {
|
||||
use std::fmt::Write;
|
||||
|
||||
let num_cgus = cgus.len();
|
||||
let max = cgus.iter().map(|cgu| cgu.size_estimate()).max().unwrap();
|
||||
let min = cgus.iter().map(|cgu| cgu.size_estimate()).min().unwrap();
|
||||
let ratio = max as f64 / min as f64;
|
||||
|
||||
let s = &mut String::new();
|
||||
let _ = writeln!(s, "{label}");
|
||||
let _ = writeln!(
|
||||
s,
|
||||
"{label} ({num_cgus} CodegenUnits, max={max}, min={min}, max/min={ratio:.1}):"
|
||||
);
|
||||
for cgu in cgus {
|
||||
let _ =
|
||||
writeln!(s, "CodegenUnit {} estimated size {} :", cgu.name(), cgu.size_estimate());
|
||||
writeln!(s, "CodegenUnit {} estimated size {}:", cgu.name(), cgu.size_estimate());
|
||||
|
||||
for (mono_item, linkage) in cgu.items() {
|
||||
let symbol_name = mono_item.symbol_name(tcx).name;
|
||||
|
Loading…
Reference in New Issue
Block a user