rustc_llvm: Add a -Z print-llvm-stats option to expose LLVM statistics.

LLVM has a neat [statistics] feature that tracks how often optimizations kick
in. It's very handy for optimization work. Since we expose the LLVM pass
timings, I thought it made sense to expose the LLVM statistics too.

[statistics]: https://llvm.org/docs/ProgrammersManual.html#the-statistic-class-stats-option
This commit is contained in:
Patrick Walton 2022-11-05 01:08:57 -07:00 committed by khei4
parent 55be59d2ce
commit 2d47816cba
10 changed files with 35 additions and 0 deletions

View file

@ -181,6 +181,11 @@ impl WriteBackendMethods for LlvmCodegenBackend {
llvm::LLVMRustPrintPassTimings();
}
}
fn print_statistics(&self) {
unsafe {
llvm::LLVMRustPrintStatistics();
}
}
fn run_link(
cgcx: &CodegenContext<Self>,
diag_handler: &Handler,

View file

@ -1870,6 +1870,9 @@ extern "C" {
/// Print the pass timings since static dtors aren't picking them up.
pub fn LLVMRustPrintPassTimings();
/// Print the statistics since static dtors aren't picking them up.
pub fn LLVMRustPrintStatistics();
pub fn LLVMStructCreateNamed(C: &Context, Name: *const c_char) -> &Type;
pub fn LLVMStructSetBody<'a>(

View file

@ -110,6 +110,10 @@ unsafe fn configure_llvm(sess: &Session) {
// Use non-zero `import-instr-limit` multiplier for cold callsites.
add("-import-cold-multiplier=0.1", false);
if sess.print_llvm_stats() {
add("-stats", false);
}
for arg in sess_args {
add(&(*arg), true);
}