coverage: Remove the Site
enum now that we only instrument nodes
This commit is contained in:
parent
8e59cf95d5
commit
a14c35c507
2 changed files with 16 additions and 35 deletions
|
@ -53,21 +53,12 @@ struct BcbExpression {
|
||||||
rhs: BcbCounter,
|
rhs: BcbCounter,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Enum representing either a node or an edge in the coverage graph.
|
|
||||||
///
|
|
||||||
/// FIXME(#135481): This enum is no longer needed now that we only instrument
|
|
||||||
/// nodes and not edges. It can be removed in a subsequent PR.
|
|
||||||
#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
|
||||||
pub(super) enum Site {
|
|
||||||
Node { bcb: BasicCoverageBlock },
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Generates and stores coverage counter and coverage expression information
|
/// Generates and stores coverage counter and coverage expression information
|
||||||
/// associated with nodes/edges in the BCB graph.
|
/// associated with nodes in the coverage graph.
|
||||||
pub(super) struct CoverageCounters {
|
pub(super) struct CoverageCounters {
|
||||||
/// List of places where a counter-increment statement should be injected
|
/// List of places where a counter-increment statement should be injected
|
||||||
/// into MIR, each with its corresponding counter ID.
|
/// into MIR, each with its corresponding counter ID.
|
||||||
counter_increment_sites: IndexVec<CounterId, Site>,
|
counter_increment_sites: IndexVec<CounterId, BasicCoverageBlock>,
|
||||||
|
|
||||||
/// Coverage counters/expressions that are associated with individual BCBs.
|
/// Coverage counters/expressions that are associated with individual BCBs.
|
||||||
node_counters: IndexVec<BasicCoverageBlock, Option<BcbCounter>>,
|
node_counters: IndexVec<BasicCoverageBlock, Option<BcbCounter>>,
|
||||||
|
@ -130,9 +121,9 @@ impl CoverageCounters {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Creates a new physical counter for a BCB node or edge.
|
/// Creates a new physical counter for a BCB node.
|
||||||
fn make_phys_counter(&mut self, site: Site) -> BcbCounter {
|
fn make_phys_counter(&mut self, bcb: BasicCoverageBlock) -> BcbCounter {
|
||||||
let id = self.counter_increment_sites.push(site);
|
let id = self.counter_increment_sites.push(bcb);
|
||||||
BcbCounter::Counter { id }
|
BcbCounter::Counter { id }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -177,12 +168,12 @@ impl CoverageCounters {
|
||||||
self.node_counters[bcb].map(|counter| counter.as_term())
|
self.node_counters[bcb].map(|counter| counter.as_term())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns an iterator over all the nodes/edges in the coverage graph that
|
/// Returns an iterator over all the nodes in the coverage graph that
|
||||||
/// should have a counter-increment statement injected into MIR, along with
|
/// should have a counter-increment statement injected into MIR, along with
|
||||||
/// each site's corresponding counter ID.
|
/// each site's corresponding counter ID.
|
||||||
pub(super) fn counter_increment_sites(
|
pub(super) fn counter_increment_sites(
|
||||||
&self,
|
&self,
|
||||||
) -> impl Iterator<Item = (CounterId, Site)> + Captures<'_> {
|
) -> impl Iterator<Item = (CounterId, BasicCoverageBlock)> + Captures<'_> {
|
||||||
self.counter_increment_sites.iter_enumerated().map(|(id, &site)| (id, site))
|
self.counter_increment_sites.iter_enumerated().map(|(id, &site)| (id, site))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -221,7 +212,7 @@ impl CoverageCounters {
|
||||||
struct Transcriber {
|
struct Transcriber {
|
||||||
old: NodeCounters<BasicCoverageBlock>,
|
old: NodeCounters<BasicCoverageBlock>,
|
||||||
new: CoverageCounters,
|
new: CoverageCounters,
|
||||||
phys_counter_for_site: FxHashMap<Site, BcbCounter>,
|
phys_counter_for_node: FxHashMap<BasicCoverageBlock, BcbCounter>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Transcriber {
|
impl Transcriber {
|
||||||
|
@ -229,7 +220,7 @@ impl Transcriber {
|
||||||
Self {
|
Self {
|
||||||
old,
|
old,
|
||||||
new: CoverageCounters::with_num_bcbs(num_nodes),
|
new: CoverageCounters::with_num_bcbs(num_nodes),
|
||||||
phys_counter_for_site: FxHashMap::default(),
|
phys_counter_for_node: FxHashMap::default(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -238,7 +229,6 @@ impl Transcriber {
|
||||||
bcb_needs_counter: &DenseBitSet<BasicCoverageBlock>,
|
bcb_needs_counter: &DenseBitSet<BasicCoverageBlock>,
|
||||||
) -> CoverageCounters {
|
) -> CoverageCounters {
|
||||||
for bcb in bcb_needs_counter.iter() {
|
for bcb in bcb_needs_counter.iter() {
|
||||||
let site = Site::Node { bcb };
|
|
||||||
let (mut pos, mut neg): (Vec<_>, Vec<_>) =
|
let (mut pos, mut neg): (Vec<_>, Vec<_>) =
|
||||||
self.old.counter_expr(bcb).iter().partition_map(
|
self.old.counter_expr(bcb).iter().partition_map(
|
||||||
|&CounterTerm { node, op }| match op {
|
|&CounterTerm { node, op }| match op {
|
||||||
|
@ -251,7 +241,7 @@ impl Transcriber {
|
||||||
// If we somehow end up with no positive terms, fall back to
|
// If we somehow end up with no positive terms, fall back to
|
||||||
// creating a physical counter. There's no known way for this
|
// creating a physical counter. There's no known way for this
|
||||||
// to happen, but we can avoid an ICE if it does.
|
// to happen, but we can avoid an ICE if it does.
|
||||||
debug_assert!(false, "{site:?} has no positive counter terms");
|
debug_assert!(false, "{bcb:?} has no positive counter terms");
|
||||||
pos = vec![bcb];
|
pos = vec![bcb];
|
||||||
neg = vec![];
|
neg = vec![];
|
||||||
}
|
}
|
||||||
|
@ -260,10 +250,7 @@ impl Transcriber {
|
||||||
neg.sort();
|
neg.sort();
|
||||||
|
|
||||||
let mut new_counters_for_sites = |sites: Vec<BasicCoverageBlock>| {
|
let mut new_counters_for_sites = |sites: Vec<BasicCoverageBlock>| {
|
||||||
sites
|
sites.into_iter().map(|node| self.ensure_phys_counter(node)).collect::<Vec<_>>()
|
||||||
.into_iter()
|
|
||||||
.map(|node| self.ensure_phys_counter(Site::Node { bcb: node }))
|
|
||||||
.collect::<Vec<_>>()
|
|
||||||
};
|
};
|
||||||
let mut pos = new_counters_for_sites(pos);
|
let mut pos = new_counters_for_sites(pos);
|
||||||
let mut neg = new_counters_for_sites(neg);
|
let mut neg = new_counters_for_sites(neg);
|
||||||
|
@ -279,7 +266,7 @@ impl Transcriber {
|
||||||
self.new
|
self.new
|
||||||
}
|
}
|
||||||
|
|
||||||
fn ensure_phys_counter(&mut self, site: Site) -> BcbCounter {
|
fn ensure_phys_counter(&mut self, bcb: BasicCoverageBlock) -> BcbCounter {
|
||||||
*self.phys_counter_for_site.entry(site).or_insert_with(|| self.new.make_phys_counter(site))
|
*self.phys_counter_for_node.entry(bcb).or_insert_with(|| self.new.make_phys_counter(bcb))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,7 +21,7 @@ use rustc_span::Span;
|
||||||
use rustc_span::def_id::LocalDefId;
|
use rustc_span::def_id::LocalDefId;
|
||||||
use tracing::{debug, debug_span, trace};
|
use tracing::{debug, debug_span, trace};
|
||||||
|
|
||||||
use crate::coverage::counters::{CoverageCounters, Site};
|
use crate::coverage::counters::CoverageCounters;
|
||||||
use crate::coverage::graph::CoverageGraph;
|
use crate::coverage::graph::CoverageGraph;
|
||||||
use crate::coverage::mappings::ExtractedMappings;
|
use crate::coverage::mappings::ExtractedMappings;
|
||||||
|
|
||||||
|
@ -239,14 +239,8 @@ fn inject_coverage_statements<'tcx>(
|
||||||
coverage_counters: &CoverageCounters,
|
coverage_counters: &CoverageCounters,
|
||||||
) {
|
) {
|
||||||
// Inject counter-increment statements into MIR.
|
// Inject counter-increment statements into MIR.
|
||||||
for (id, site) in coverage_counters.counter_increment_sites() {
|
for (id, bcb) in coverage_counters.counter_increment_sites() {
|
||||||
// Determine the block to inject a counter-increment statement into.
|
let target_bb = graph[bcb].leader_bb();
|
||||||
// For BCB nodes this is just their first block, but for edges we need
|
|
||||||
// to create a new block between the two BCBs, and inject into that.
|
|
||||||
let target_bb = match site {
|
|
||||||
Site::Node { bcb } => graph[bcb].leader_bb(),
|
|
||||||
};
|
|
||||||
|
|
||||||
inject_statement(mir_body, CoverageKind::CounterIncrement { id }, target_bb);
|
inject_statement(mir_body, CoverageKind::CounterIncrement { id }, target_bb);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue