#[derive(Clone, Default)]
pub struct Stats {
- pub n_glues_created: usize,
- pub n_null_glues: usize,
- pub n_real_glues: usize,
- pub n_fns: usize,
- pub n_inlines: usize,
- pub n_closures: usize,
pub n_llvm_insns: usize,
pub llvm_insns: FxHashMap<String, usize>,
// (ident, llvm-instructions)
}
impl_stable_hash_for!(struct self::Stats {
- n_glues_created,
- n_null_glues,
- n_real_glues,
- n_fns,
- n_inlines,
- n_closures,
n_llvm_insns,
llvm_insns,
fn_stats
impl Stats {
pub fn extend(&mut self, stats: Stats) {
- self.n_glues_created += stats.n_glues_created;
- self.n_null_glues += stats.n_null_glues;
- self.n_real_glues += stats.n_real_glues;
- self.n_fns += stats.n_fns;
- self.n_inlines += stats.n_inlines;
- self.n_closures += stats.n_closures;
self.n_llvm_insns += stats.n_llvm_insns;
for (k, v) in stats.llvm_insns {
let mut stats = self.cx.stats().borrow_mut();
let iend = stats.n_llvm_insns;
stats.fn_stats.push((self.name.take().unwrap(), iend - self.istart));
- stats.n_fns += 1;
// Reset LLVM insn count to avoid compound costs.
stats.n_llvm_insns = self.istart;
}
let lldecl = cx.instances().borrow().get(&instance).cloned().unwrap_or_else(||
bug!("Instance `{:?}` not already declared", instance));
- cx.stats().borrow_mut().n_closures += 1;
-
let mir = cx.tcx().instance_mir(instance.def);
mir::codegen_mir::<Bx>(cx, lldecl, &mir, instance, sig);
}
if tcx.sess.codegen_stats() {
println!("--- codegen stats ---");
- println!("n_glues_created: {}", all_stats.n_glues_created);
- println!("n_null_glues: {}", all_stats.n_null_glues);
- println!("n_real_glues: {}", all_stats.n_real_glues);
-
- println!("n_fns: {}", all_stats.n_fns);
- println!("n_inlines: {}", all_stats.n_inlines);
- println!("n_closures: {}", all_stats.n_closures);
println!("fn stats:");
all_stats.fn_stats.sort_by_key(|&(_, insns)| insns);
for &(ref name, insns) in all_stats.fn_stats.iter() {