Skip to content

Commit 8529ae2

Browse files
committed
rustc_codegen_ssa: add time-passes output for each CGU compilation
Add time-passes event for each CGU compilation to LLVM IR. This is useful to measure, as the event can cause a large increase in RSS. Also, allow `extra_verbose_generic_activity` to accept multiple event arguments.
1 parent b122908 commit 8529ae2

File tree

10 files changed

+33
-23
lines changed

10 files changed

+33
-23
lines changed

compiler/rustc_codegen_cranelift/src/driver/aot.rs

+4
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,10 @@ fn reuse_workproduct_for_cgu(
119119

120120
fn module_codegen(tcx: TyCtxt<'_>, cgu_name: rustc_span::Symbol) -> ModuleCodegenResult {
121121
let cgu = tcx.codegen_unit(cgu_name);
122+
let _prof_timer = tcx.prof.extra_verbose_generic_activity(
123+
"codegen_module",
124+
&[cgu_name.to_string(), cgu.size_estimate().to_string()],
125+
);
122126
let mono_items = cgu.items_in_deterministic_order(tcx);
123127

124128
let mut module = new_module(tcx, cgu_name.as_str().to_string());

compiler/rustc_codegen_llvm/src/back/lto.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -571,7 +571,7 @@ pub(crate) fn run_pass_manager(
571571
config: &ModuleConfig,
572572
thin: bool,
573573
) {
574-
let _timer = cgcx.prof.extra_verbose_generic_activity("LLVM_lto_optimize", &module.name[..]);
574+
let _timer = cgcx.prof.extra_verbose_generic_activity("LLVM_lto_optimize", &[&module.name[..]]);
575575

576576
// Now we have one massive module inside of llmod. Time to run the
577577
// LTO-specific optimization passes that LLVM provides.

compiler/rustc_codegen_llvm/src/back/write.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -620,14 +620,14 @@ pub(crate) unsafe fn optimize(
620620
{
621621
let _timer = cgcx.prof.extra_verbose_generic_activity(
622622
"LLVM_module_optimize_function_passes",
623-
&module.name[..],
623+
&[&module.name[..]],
624624
);
625625
llvm::LLVMRustRunFunctionPassManager(fpm, llmod);
626626
}
627627
{
628628
let _timer = cgcx.prof.extra_verbose_generic_activity(
629629
"LLVM_module_optimize_module_passes",
630-
&module.name[..],
630+
&[&module.name[..]],
631631
);
632632
llvm::LLVMRunPassManager(mpm, llmod);
633633
}

compiler/rustc_codegen_llvm/src/base.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ pub fn compile_codegen_unit(
108108

109109
fn module_codegen(tcx: TyCtxt<'_>, cgu_name: Symbol) -> ModuleCodegen<ModuleLlvm> {
110110
let cgu = tcx.codegen_unit(cgu_name);
111-
let _prof_timer = tcx.prof.generic_activity_with_args(
111+
let _prof_timer = tcx.prof.extra_verbose_generic_activity(
112112
"codegen_module",
113113
&[cgu_name.to_string(), cgu.size_estimate().to_string()],
114114
);

compiler/rustc_codegen_ssa/src/back/write.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1544,7 +1544,7 @@ fn start_executing_work<B: ExtraBackendMethods>(
15441544
llvm_start_time: &mut Option<VerboseTimingGuard<'a>>,
15451545
) {
15461546
if config.time_module && llvm_start_time.is_none() {
1547-
*llvm_start_time = Some(prof.extra_verbose_generic_activity("LLVM_passes", "crate"));
1547+
*llvm_start_time = Some(prof.extra_verbose_generic_activity("LLVM_passes", &["crate"]));
15481548
}
15491549
}
15501550
}

compiler/rustc_data_structures/src/profiling.rs

+10-7
Original file line numberDiff line numberDiff line change
@@ -223,18 +223,18 @@ impl SelfProfilerRef {
223223
pub fn extra_verbose_generic_activity<'a, A>(
224224
&'a self,
225225
event_label: &'static str,
226-
event_arg: A,
226+
event_args: &[A],
227227
) -> VerboseTimingGuard<'a>
228228
where
229229
A: Borrow<str> + Into<String>,
230230
{
231231
let message = if self.print_extra_verbose_generic_activities {
232-
Some(format!("{}({})", event_label, event_arg.borrow()))
232+
Some(format!("{}({})", event_label, event_args.join(", ")))
233233
} else {
234234
None
235235
};
236236

237-
VerboseTimingGuard::start(message, self.generic_activity_with_arg(event_label, event_arg))
237+
VerboseTimingGuard::start(message, self.generic_activity_with_args(event_label, event_args))
238238
}
239239

240240
/// Start profiling a generic activity. Profiling continues until the
@@ -273,18 +273,21 @@ impl SelfProfilerRef {
273273
}
274274

275275
#[inline(always)]
276-
pub fn generic_activity_with_args(
276+
pub fn generic_activity_with_args<A>(
277277
&self,
278278
event_label: &'static str,
279-
event_args: &[String],
280-
) -> TimingGuard<'_> {
279+
event_args: &[A],
280+
) -> TimingGuard<'_>
281+
where
282+
A: Borrow<str> + Into<String>,
283+
{
281284
self.exec(EventFilter::GENERIC_ACTIVITIES, |profiler| {
282285
let builder = EventIdBuilder::new(&profiler.profiler);
283286
let event_label = profiler.get_or_alloc_cached_string(event_label);
284287
let event_id = if profiler.event_filter_mask.contains(EventFilter::FUNCTION_ARGS) {
285288
let event_args: Vec<_> = event_args
286289
.iter()
287-
.map(|s| profiler.get_or_alloc_cached_string(&s[..]))
290+
.map(|s| profiler.get_or_alloc_cached_string(s.borrow()))
288291
.collect();
289292
builder.from_label_and_args(event_label, &event_args)
290293
} else {

compiler/rustc_lint/src/early.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -363,7 +363,7 @@ pub fn check_ast_crate<T: EarlyLintPass>(
363363
} else {
364364
for pass in &mut passes {
365365
buffered =
366-
sess.prof.extra_verbose_generic_activity("run_lint", pass.name()).run(|| {
366+
sess.prof.extra_verbose_generic_activity("run_lint", &[pass.name()]).run(|| {
367367
early_lint_crate(
368368
sess,
369369
lint_store,

compiler/rustc_lint/src/late.rs

+10-7
Original file line numberDiff line numberDiff line change
@@ -462,20 +462,23 @@ fn late_lint_crate<'tcx, T: LateLintPass<'tcx>>(tcx: TyCtxt<'tcx>, builtin_lints
462462
late_lint_pass_crate(tcx, builtin_lints);
463463
} else {
464464
for pass in &mut passes {
465-
tcx.sess.prof.extra_verbose_generic_activity("run_late_lint", pass.name()).run(|| {
466-
late_lint_pass_crate(tcx, LateLintPassObjects { lints: slice::from_mut(pass) });
467-
});
465+
tcx.sess.prof.extra_verbose_generic_activity("run_late_lint", &[pass.name()]).run(
466+
|| {
467+
late_lint_pass_crate(tcx, LateLintPassObjects { lints: slice::from_mut(pass) });
468+
},
469+
);
468470
}
469471

470472
let mut passes: Vec<_> =
471473
unerased_lint_store(tcx).late_module_passes.iter().map(|pass| (pass)()).collect();
472474

473475
for pass in &mut passes {
474-
tcx.sess.prof.extra_verbose_generic_activity("run_late_module_lint", pass.name()).run(
475-
|| {
476+
tcx.sess
477+
.prof
478+
.extra_verbose_generic_activity("run_late_module_lint", &[pass.name()])
479+
.run(|| {
476480
late_lint_pass_crate(tcx, LateLintPassObjects { lints: slice::from_mut(pass) });
477-
},
478-
);
481+
});
479482
}
480483
}
481484
}

compiler/rustc_middle/src/ty/query/on_disk_cache.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1242,7 +1242,7 @@ where
12421242
let _timer = tcx
12431243
.sess
12441244
.prof
1245-
.extra_verbose_generic_activity("encode_query_results_for", std::any::type_name::<Q>());
1245+
.extra_verbose_generic_activity("encode_query_results_for", &[std::any::type_name::<Q>()]);
12461246

12471247
let state = Q::query_state(tcx);
12481248
assert!(state.all_inactive());

src/librustdoc/formats/renderer.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ crate fn run_format<'tcx, T: FormatRenderer<'tcx>>(
6666
let prof = &tcx.sess.prof;
6767

6868
let (mut format_renderer, mut krate) = prof
69-
.extra_verbose_generic_activity("create_renderer", T::descr())
69+
.extra_verbose_generic_activity("create_renderer", &[T::descr()])
7070
.run(|| T::init(krate, options, render_info, edition, cache, tcx))?;
7171

7272
let mut item = match krate.module.take() {
@@ -106,6 +106,6 @@ crate fn run_format<'tcx, T: FormatRenderer<'tcx>>(
106106
.run(|| cx.item(item))?;
107107
}
108108
}
109-
prof.extra_verbose_generic_activity("renderer_after_krate", T::descr())
109+
prof.extra_verbose_generic_activity("renderer_after_krate", &[T::descr()])
110110
.run(|| format_renderer.after_krate(&krate, diag))
111111
}

0 commit comments

Comments
 (0)