Skip to content

Commit 2344133

Browse files
committed
coverage: Simplify creation of sum counters
1 parent a7a3595 commit 2344133

File tree

1 file changed

+13
-17
lines changed

1 file changed

+13
-17
lines changed

compiler/rustc_mir_transform/src/coverage/counters.rs

+13-17
Original file line numberDiff line numberDiff line change
@@ -155,12 +155,14 @@ impl CoverageCounters {
155155
BcbCounter::Expression { id }
156156
}
157157

158-
/// Variant of `make_expression` that makes `lhs` optional and assumes [`Op::Add`].
158+
/// Creates a counter that is the sum of the given counters.
159159
///
160-
/// This is useful when using [`Iterator::fold`] to build an arbitrary-length sum.
161-
fn make_sum_expression(&mut self, lhs: Option<BcbCounter>, rhs: BcbCounter) -> BcbCounter {
162-
let Some(lhs) = lhs else { return rhs };
163-
self.make_expression(lhs, Op::Add, rhs)
160+
/// Returns `None` if the given list of counters was empty.
161+
fn make_sum(&mut self, counters: &[BcbCounter]) -> Option<BcbCounter> {
162+
counters
163+
.iter()
164+
.copied()
165+
.reduce(|accum, counter| self.make_expression(accum, Op::Add, counter))
164166
}
165167

166168
pub(super) fn num_counters(&self) -> usize {
@@ -322,12 +324,9 @@ impl<'a> MakeBcbCounters<'a> {
322324
.filter(|&to_bcb| to_bcb != expression_to_bcb)
323325
.map(|to_bcb| self.get_or_make_edge_counter(from_bcb, to_bcb))
324326
.collect::<Vec<_>>();
325-
let sum_of_all_other_out_edges: BcbCounter = other_out_edge_counters
326-
.iter()
327-
.copied()
328-
.fold(None, |accum, edge_counter| {
329-
Some(self.coverage_counters.make_sum_expression(accum, edge_counter))
330-
})
327+
let sum_of_all_other_out_edges: BcbCounter = self
328+
.coverage_counters
329+
.make_sum(&other_out_edge_counters)
331330
.expect("there must be at least one other out-edge");
332331

333332
// Now create an expression for the chosen edge, by taking the counter
@@ -380,12 +379,9 @@ impl<'a> MakeBcbCounters<'a> {
380379
.copied()
381380
.map(|from_bcb| self.get_or_make_edge_counter(from_bcb, bcb))
382381
.collect::<Vec<_>>();
383-
let sum_of_in_edges: BcbCounter = in_edge_counters
384-
.iter()
385-
.copied()
386-
.fold(None, |accum, edge_counter| {
387-
Some(self.coverage_counters.make_sum_expression(accum, edge_counter))
388-
})
382+
let sum_of_in_edges: BcbCounter = self
383+
.coverage_counters
384+
.make_sum(&in_edge_counters)
389385
.expect("there must be at least one in-edge");
390386

391387
debug!("{bcb:?} gets a new counter (sum of predecessor counters): {sum_of_in_edges:?}");

0 commit comments

Comments
 (0)