coverage: Extract subtracted_sum
in counter creation
This commit is contained in:
parent
3b382642ab
commit
2a3b4a0afd
2 changed files with 14 additions and 12 deletions
|
@ -182,6 +182,12 @@ impl CoverageCounters {
|
||||||
.reduce(|accum, counter| self.make_expression(accum, Op::Add, counter))
|
.reduce(|accum, counter| self.make_expression(accum, Op::Add, counter))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Creates a counter whose value is `lhs - SUM(rhs)`.
|
||||||
|
fn make_subtracted_sum(&mut self, lhs: BcbCounter, rhs: &[BcbCounter]) -> BcbCounter {
|
||||||
|
let Some(rhs_sum) = self.make_sum(rhs) else { return lhs };
|
||||||
|
self.make_expression(lhs, Op::Subtract, rhs_sum)
|
||||||
|
}
|
||||||
|
|
||||||
pub(super) fn num_counters(&self) -> usize {
|
pub(super) fn num_counters(&self) -> usize {
|
||||||
self.counter_increment_sites.len()
|
self.counter_increment_sites.len()
|
||||||
}
|
}
|
||||||
|
@ -338,8 +344,7 @@ impl<'a> CountersBuilder<'a> {
|
||||||
};
|
};
|
||||||
|
|
||||||
// For each out-edge other than the one that was chosen to get an expression,
|
// For each out-edge other than the one that was chosen to get an expression,
|
||||||
// ensure that it has a counter (existing counter/expression or a new counter),
|
// ensure that it has a counter (existing counter/expression or a new counter).
|
||||||
// and accumulate the corresponding counters into a single sum expression.
|
|
||||||
let other_out_edge_counters = successors
|
let other_out_edge_counters = successors
|
||||||
.iter()
|
.iter()
|
||||||
.copied()
|
.copied()
|
||||||
|
@ -347,15 +352,10 @@ impl<'a> CountersBuilder<'a> {
|
||||||
.filter(|&edge_target_bcb| edge_target_bcb != target_bcb)
|
.filter(|&edge_target_bcb| edge_target_bcb != target_bcb)
|
||||||
.map(|to_bcb| self.get_or_make_edge_counter(from_bcb, to_bcb))
|
.map(|to_bcb| self.get_or_make_edge_counter(from_bcb, to_bcb))
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
let Some(sum_of_all_other_out_edges) = self.counters.make_sum(&other_out_edge_counters)
|
|
||||||
else {
|
|
||||||
return;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Now create an expression for the chosen edge, by taking the counter
|
// Now create an expression for the chosen edge, by taking the counter
|
||||||
// for its source node and subtracting the sum of its sibling out-edges.
|
// for its source node and subtracting the sum of its sibling out-edges.
|
||||||
let expression =
|
let expression = self.counters.make_subtracted_sum(node_counter, &other_out_edge_counters);
|
||||||
self.counters.make_expression(node_counter, Op::Subtract, sum_of_all_other_out_edges);
|
|
||||||
|
|
||||||
debug!("{target_bcb:?} gets an expression: {expression:?}");
|
debug!("{target_bcb:?} gets an expression: {expression:?}");
|
||||||
self.counters.set_edge_counter(from_bcb, target_bcb, expression);
|
self.counters.set_edge_counter(from_bcb, target_bcb, expression);
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
Function name: guard::branch_match_guard
|
Function name: guard::branch_match_guard
|
||||||
Raw bytes (85): 0x[01, 01, 06, 19, 0d, 05, 09, 0f, 15, 13, 11, 17, 0d, 05, 09, 0d, 01, 0c, 01, 01, 10, 1d, 03, 0b, 00, 0c, 15, 01, 14, 02, 0a, 0d, 03, 0e, 00, 0f, 19, 00, 14, 00, 19, 20, 0d, 02, 00, 14, 00, 1e, 0d, 00, 1d, 02, 0a, 11, 03, 0e, 00, 0f, 1d, 00, 14, 00, 19, 20, 11, 09, 00, 14, 00, 1e, 11, 00, 1d, 02, 0a, 17, 03, 0e, 02, 0a, 0b, 04, 01, 00, 02]
|
Raw bytes (85): 0x[01, 01, 06, 19, 0d, 05, 09, 0f, 15, 13, 11, 17, 0d, 05, 09, 0d, 01, 0c, 01, 01, 10, 02, 03, 0b, 00, 0c, 15, 01, 14, 02, 0a, 0d, 03, 0e, 00, 0f, 19, 00, 14, 00, 19, 20, 0d, 02, 00, 14, 00, 1e, 0d, 00, 1d, 02, 0a, 11, 03, 0e, 00, 0f, 02, 00, 14, 00, 19, 20, 11, 09, 00, 14, 00, 1e, 11, 00, 1d, 02, 0a, 17, 03, 0e, 02, 0a, 0b, 04, 01, 00, 02]
|
||||||
Number of files: 1
|
Number of files: 1
|
||||||
- file 0 => global file 1
|
- file 0 => global file 1
|
||||||
Number of expressions: 6
|
Number of expressions: 6
|
||||||
|
@ -11,7 +11,8 @@ Number of expressions: 6
|
||||||
- expression 5 operands: lhs = Counter(1), rhs = Counter(2)
|
- expression 5 operands: lhs = Counter(1), rhs = Counter(2)
|
||||||
Number of file 0 mappings: 13
|
Number of file 0 mappings: 13
|
||||||
- Code(Counter(0)) at (prev + 12, 1) to (start + 1, 16)
|
- Code(Counter(0)) at (prev + 12, 1) to (start + 1, 16)
|
||||||
- Code(Counter(7)) at (prev + 3, 11) to (start + 0, 12)
|
- Code(Expression(0, Sub)) at (prev + 3, 11) to (start + 0, 12)
|
||||||
|
= (c6 - c3)
|
||||||
- Code(Counter(5)) at (prev + 1, 20) to (start + 2, 10)
|
- Code(Counter(5)) at (prev + 1, 20) to (start + 2, 10)
|
||||||
- Code(Counter(3)) at (prev + 3, 14) to (start + 0, 15)
|
- Code(Counter(3)) at (prev + 3, 14) to (start + 0, 15)
|
||||||
- Code(Counter(6)) at (prev + 0, 20) to (start + 0, 25)
|
- Code(Counter(6)) at (prev + 0, 20) to (start + 0, 25)
|
||||||
|
@ -20,7 +21,8 @@ Number of file 0 mappings: 13
|
||||||
false = (c6 - c3)
|
false = (c6 - c3)
|
||||||
- Code(Counter(3)) at (prev + 0, 29) to (start + 2, 10)
|
- Code(Counter(3)) at (prev + 0, 29) to (start + 2, 10)
|
||||||
- Code(Counter(4)) at (prev + 3, 14) to (start + 0, 15)
|
- Code(Counter(4)) at (prev + 3, 14) to (start + 0, 15)
|
||||||
- Code(Counter(7)) at (prev + 0, 20) to (start + 0, 25)
|
- Code(Expression(0, Sub)) at (prev + 0, 20) to (start + 0, 25)
|
||||||
|
= (c6 - c3)
|
||||||
- Branch { true: Counter(4), false: Counter(2) } at (prev + 0, 20) to (start + 0, 30)
|
- Branch { true: Counter(4), false: Counter(2) } at (prev + 0, 20) to (start + 0, 30)
|
||||||
true = c4
|
true = c4
|
||||||
false = c2
|
false = c2
|
||||||
|
@ -29,5 +31,5 @@ Number of file 0 mappings: 13
|
||||||
= (c1 + c2)
|
= (c1 + c2)
|
||||||
- Code(Expression(2, Add)) at (prev + 4, 1) to (start + 0, 2)
|
- Code(Expression(2, Add)) at (prev + 4, 1) to (start + 0, 2)
|
||||||
= ((((c1 + c2) + c3) + c4) + c5)
|
= ((((c1 + c2) + c3) + c4) + c5)
|
||||||
Highest counter ID seen: c7
|
Highest counter ID seen: c6
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue