Rollup merge of #117350 - Zalathar:counters-indent, r=oli-obk

coverage: Replace manual debug indents with nested tracing spans in `counters`

Instead of indenting these debug messages manually, we can get `#[instrument]` to do a better job of it for us, giving us some nice little simplifications.
This commit is contained in:
León Orell Valerian Liehr 2023-10-30 10:48:19 +01:00 committed by GitHub
commit 9a8d800180
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -12,8 +12,6 @@ use rustc_middle::mir::coverage::*;
use std::fmt::{self, Debug}; use std::fmt::{self, Debug};
const NESTED_INDENT: &str = " ";
/// The coverage counter or counter expression associated with a particular /// The coverage counter or counter expression associated with a particular
/// BCB node or BCB edge. /// BCB node or BCB edge.
#[derive(Clone)] #[derive(Clone)]
@ -346,23 +344,11 @@ impl<'a> MakeBcbCounters<'a> {
Ok(()) Ok(())
} }
#[instrument(level = "debug", skip(self))]
fn get_or_make_counter_operand(&mut self, bcb: BasicCoverageBlock) -> Result<CovTerm, Error> { fn get_or_make_counter_operand(&mut self, bcb: BasicCoverageBlock) -> Result<CovTerm, Error> {
self.recursive_get_or_make_counter_operand(bcb, 1)
}
fn recursive_get_or_make_counter_operand(
&mut self,
bcb: BasicCoverageBlock,
debug_indent_level: usize,
) -> Result<CovTerm, Error> {
// If the BCB already has a counter, return it. // If the BCB already has a counter, return it.
if let Some(counter_kind) = &self.coverage_counters.bcb_counters[bcb] { if let Some(counter_kind) = &self.coverage_counters.bcb_counters[bcb] {
debug!( debug!("{bcb:?} already has a counter: {counter_kind:?}");
"{}{:?} already has a counter: {:?}",
NESTED_INDENT.repeat(debug_indent_level),
bcb,
counter_kind,
);
return Ok(counter_kind.as_term()); return Ok(counter_kind.as_term());
} }
@ -373,20 +359,12 @@ impl<'a> MakeBcbCounters<'a> {
if one_path_to_target || self.bcb_predecessors(bcb).contains(&bcb) { if one_path_to_target || self.bcb_predecessors(bcb).contains(&bcb) {
let counter_kind = self.coverage_counters.make_counter(); let counter_kind = self.coverage_counters.make_counter();
if one_path_to_target { if one_path_to_target {
debug!( debug!("{bcb:?} gets a new counter: {counter_kind:?}");
"{}{:?} gets a new counter: {:?}",
NESTED_INDENT.repeat(debug_indent_level),
bcb,
counter_kind,
);
} else { } else {
debug!( debug!(
"{}{:?} has itself as its own predecessor. It can't be part of its own \ "{bcb:?} has itself as its own predecessor. It can't be part of its own \
Expression sum, so it will get its own new counter: {:?}. (Note, the compiled \ Expression sum, so it will get its own new counter: {counter_kind:?}. \
code will generate an infinite loop.)", (Note, the compiled code will generate an infinite loop.)",
NESTED_INDENT.repeat(debug_indent_level),
bcb,
counter_kind,
); );
} }
return self.coverage_counters.set_bcb_counter(bcb, counter_kind); return self.coverage_counters.set_bcb_counter(bcb, counter_kind);
@ -396,24 +374,14 @@ impl<'a> MakeBcbCounters<'a> {
// counters and/or expressions of its incoming edges. This will recursively get or create // counters and/or expressions of its incoming edges. This will recursively get or create
// counters for those incoming edges first, then call `make_expression()` to sum them up, // counters for those incoming edges first, then call `make_expression()` to sum them up,
// with additional intermediate expressions as needed. // with additional intermediate expressions as needed.
let _sumup_debug_span = debug_span!("(preparing sum-up expression)").entered();
let mut predecessors = self.bcb_predecessors(bcb).to_owned().into_iter(); let mut predecessors = self.bcb_predecessors(bcb).to_owned().into_iter();
debug!( let first_edge_counter_operand =
"{}{:?} has multiple incoming edges and will get an expression that sums them up...", self.get_or_make_edge_counter_operand(predecessors.next().unwrap(), bcb)?;
NESTED_INDENT.repeat(debug_indent_level),
bcb,
);
let first_edge_counter_operand = self.recursive_get_or_make_edge_counter_operand(
predecessors.next().unwrap(),
bcb,
debug_indent_level + 1,
)?;
let mut some_sumup_edge_counter_operand = None; let mut some_sumup_edge_counter_operand = None;
for predecessor in predecessors { for predecessor in predecessors {
let edge_counter_operand = self.recursive_get_or_make_edge_counter_operand( let edge_counter_operand = self.get_or_make_edge_counter_operand(predecessor, bcb)?;
predecessor,
bcb,
debug_indent_level + 1,
)?;
if let Some(sumup_edge_counter_operand) = if let Some(sumup_edge_counter_operand) =
some_sumup_edge_counter_operand.replace(edge_counter_operand) some_sumup_edge_counter_operand.replace(edge_counter_operand)
{ {
@ -422,11 +390,7 @@ impl<'a> MakeBcbCounters<'a> {
Op::Add, Op::Add,
edge_counter_operand, edge_counter_operand,
); );
debug!( debug!("new intermediate expression: {intermediate_expression:?}");
"{}new intermediate expression: {:?}",
NESTED_INDENT.repeat(debug_indent_level),
intermediate_expression
);
let intermediate_expression_operand = intermediate_expression.as_term(); let intermediate_expression_operand = intermediate_expression.as_term();
some_sumup_edge_counter_operand.replace(intermediate_expression_operand); some_sumup_edge_counter_operand.replace(intermediate_expression_operand);
} }
@ -436,59 +400,36 @@ impl<'a> MakeBcbCounters<'a> {
Op::Add, Op::Add,
some_sumup_edge_counter_operand.unwrap(), some_sumup_edge_counter_operand.unwrap(),
); );
debug!( drop(_sumup_debug_span);
"{}{:?} gets a new counter (sum of predecessor counters): {:?}",
NESTED_INDENT.repeat(debug_indent_level), debug!("{bcb:?} gets a new counter (sum of predecessor counters): {counter_kind:?}");
bcb,
counter_kind
);
self.coverage_counters.set_bcb_counter(bcb, counter_kind) self.coverage_counters.set_bcb_counter(bcb, counter_kind)
} }
#[instrument(level = "debug", skip(self))]
fn get_or_make_edge_counter_operand( fn get_or_make_edge_counter_operand(
&mut self, &mut self,
from_bcb: BasicCoverageBlock, from_bcb: BasicCoverageBlock,
to_bcb: BasicCoverageBlock, to_bcb: BasicCoverageBlock,
) -> Result<CovTerm, Error> {
self.recursive_get_or_make_edge_counter_operand(from_bcb, to_bcb, 1)
}
fn recursive_get_or_make_edge_counter_operand(
&mut self,
from_bcb: BasicCoverageBlock,
to_bcb: BasicCoverageBlock,
debug_indent_level: usize,
) -> Result<CovTerm, Error> { ) -> Result<CovTerm, Error> {
// If the source BCB has only one successor (assumed to be the given target), an edge // If the source BCB has only one successor (assumed to be the given target), an edge
// counter is unnecessary. Just get or make a counter for the source BCB. // counter is unnecessary. Just get or make a counter for the source BCB.
let successors = self.bcb_successors(from_bcb).iter(); let successors = self.bcb_successors(from_bcb).iter();
if successors.len() == 1 { if successors.len() == 1 {
return self.recursive_get_or_make_counter_operand(from_bcb, debug_indent_level + 1); return self.get_or_make_counter_operand(from_bcb);
} }
// If the edge already has a counter, return it. // If the edge already has a counter, return it.
if let Some(counter_kind) = if let Some(counter_kind) =
self.coverage_counters.bcb_edge_counters.get(&(from_bcb, to_bcb)) self.coverage_counters.bcb_edge_counters.get(&(from_bcb, to_bcb))
{ {
debug!( debug!("Edge {from_bcb:?}->{to_bcb:?} already has a counter: {counter_kind:?}");
"{}Edge {:?}->{:?} already has a counter: {:?}",
NESTED_INDENT.repeat(debug_indent_level),
from_bcb,
to_bcb,
counter_kind
);
return Ok(counter_kind.as_term()); return Ok(counter_kind.as_term());
} }
// Make a new counter to count this edge. // Make a new counter to count this edge.
let counter_kind = self.coverage_counters.make_counter(); let counter_kind = self.coverage_counters.make_counter();
debug!( debug!("Edge {from_bcb:?}->{to_bcb:?} gets a new counter: {counter_kind:?}");
"{}Edge {:?}->{:?} gets a new counter: {:?}",
NESTED_INDENT.repeat(debug_indent_level),
from_bcb,
to_bcb,
counter_kind
);
self.coverage_counters.set_bcb_edge_counter(from_bcb, to_bcb, counter_kind) self.coverage_counters.set_bcb_edge_counter(from_bcb, to_bcb, counter_kind)
} }