coverage: Prefer to visit nodes whose predecessors have been visited
This commit is contained in:
@@ -9,7 +9,7 @@ use rustc_index::bit_set::BitSet;
|
||||
use rustc_middle::mir::coverage::{CounterId, CovTerm, Expression, ExpressionId, Op};
|
||||
use tracing::{debug, debug_span, instrument};
|
||||
|
||||
use crate::coverage::graph::{BasicCoverageBlock, CoverageGraph, TraverseCoverageGraphWithLoops};
|
||||
use crate::coverage::graph::{BasicCoverageBlock, CoverageGraph, ReadyFirstTraversal};
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests;
|
||||
@@ -236,23 +236,12 @@ impl<'a> CountersBuilder<'a> {
|
||||
|
||||
// Traverse the coverage graph, ensuring that every node that needs a
|
||||
// coverage counter has one.
|
||||
//
|
||||
// The traversal tries to ensure that, when a loop is encountered, all
|
||||
// nodes within the loop are visited before visiting any nodes outside
|
||||
// the loop.
|
||||
let mut traversal = TraverseCoverageGraphWithLoops::new(self.graph);
|
||||
while let Some(bcb) = traversal.next() {
|
||||
for bcb in ReadyFirstTraversal::new(self.graph) {
|
||||
let _span = debug_span!("traversal", ?bcb).entered();
|
||||
if self.bcb_needs_counter.contains(bcb) {
|
||||
self.make_node_counter_and_out_edge_counters(bcb);
|
||||
}
|
||||
}
|
||||
|
||||
assert!(
|
||||
traversal.is_complete(),
|
||||
"`TraverseCoverageGraphWithLoops` missed some `BasicCoverageBlock`s: {:?}",
|
||||
traversal.unvisited(),
|
||||
);
|
||||
}
|
||||
|
||||
/// Make sure the given node has a node counter, and then make sure each of
|
||||
|
||||
Reference in New Issue
Block a user