Skip to content

Commit 9d71120

Browse files
authored
Unrolled build for rust-lang#134551
Rollup merge of rust-lang#134551 - Zalathar:graph, r=lqd coverage: Rename `basic_coverage_blocks` to just `graph` During coverage instrumentation, this variable always holds the current function's coverage graph, which is a simplified view of its MIR control-flow graph. The new name is clearer in context, and also shorter. --- This is purely a rename, so there is no functional change.
2 parents 8a1f803 + 544809e commit 9d71120

File tree

5 files changed

+61
-93
lines changed

5 files changed

+61
-93
lines changed

compiler/rustc_mir_transform/src/coverage/mappings.rs

+9-11
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ pub(super) fn extract_all_mapping_info_from_mir<'tcx>(
8080
tcx: TyCtxt<'tcx>,
8181
mir_body: &mir::Body<'tcx>,
8282
hir_info: &ExtractedHirInfo,
83-
basic_coverage_blocks: &CoverageGraph,
83+
graph: &CoverageGraph,
8484
) -> ExtractedMappings {
8585
let mut code_mappings = vec![];
8686
let mut branch_pairs = vec![];
@@ -102,23 +102,23 @@ pub(super) fn extract_all_mapping_info_from_mir<'tcx>(
102102
}
103103
} else {
104104
// Extract coverage spans from MIR statements/terminators as normal.
105-
extract_refined_covspans(mir_body, hir_info, basic_coverage_blocks, &mut code_mappings);
105+
extract_refined_covspans(mir_body, hir_info, graph, &mut code_mappings);
106106
}
107107

108-
branch_pairs.extend(extract_branch_pairs(mir_body, hir_info, basic_coverage_blocks));
108+
branch_pairs.extend(extract_branch_pairs(mir_body, hir_info, graph));
109109

110110
extract_mcdc_mappings(
111111
mir_body,
112112
tcx,
113113
hir_info.body_span,
114-
basic_coverage_blocks,
114+
graph,
115115
&mut mcdc_bitmap_bits,
116116
&mut mcdc_degraded_branches,
117117
&mut mcdc_mappings,
118118
);
119119

120120
ExtractedMappings {
121-
num_bcbs: basic_coverage_blocks.num_nodes(),
121+
num_bcbs: graph.num_nodes(),
122122
code_mappings,
123123
branch_pairs,
124124
mcdc_bitmap_bits,
@@ -211,7 +211,7 @@ fn resolve_block_markers(
211211
pub(super) fn extract_branch_pairs(
212212
mir_body: &mir::Body<'_>,
213213
hir_info: &ExtractedHirInfo,
214-
basic_coverage_blocks: &CoverageGraph,
214+
graph: &CoverageGraph,
215215
) -> Vec<BranchPair> {
216216
let Some(coverage_info_hi) = mir_body.coverage_info_hi.as_deref() else { return vec![] };
217217

@@ -228,8 +228,7 @@ pub(super) fn extract_branch_pairs(
228228
}
229229
let span = unexpand_into_body_span(raw_span, hir_info.body_span)?;
230230

231-
let bcb_from_marker =
232-
|marker: BlockMarkerId| basic_coverage_blocks.bcb_from_bb(block_markers[marker]?);
231+
let bcb_from_marker = |marker: BlockMarkerId| graph.bcb_from_bb(block_markers[marker]?);
233232

234233
let true_bcb = bcb_from_marker(true_marker)?;
235234
let false_bcb = bcb_from_marker(false_marker)?;
@@ -243,7 +242,7 @@ pub(super) fn extract_mcdc_mappings(
243242
mir_body: &mir::Body<'_>,
244243
tcx: TyCtxt<'_>,
245244
body_span: Span,
246-
basic_coverage_blocks: &CoverageGraph,
245+
graph: &CoverageGraph,
247246
mcdc_bitmap_bits: &mut usize,
248247
mcdc_degraded_branches: &mut impl Extend<MCDCBranch>,
249248
mcdc_mappings: &mut impl Extend<(MCDCDecision, Vec<MCDCBranch>)>,
@@ -252,8 +251,7 @@ pub(super) fn extract_mcdc_mappings(
252251

253252
let block_markers = resolve_block_markers(coverage_info_hi, mir_body);
254253

255-
let bcb_from_marker =
256-
|marker: BlockMarkerId| basic_coverage_blocks.bcb_from_bb(block_markers[marker]?);
254+
let bcb_from_marker = |marker: BlockMarkerId| graph.bcb_from_bb(block_markers[marker]?);
257255

258256
let check_branch_bcb =
259257
|raw_span: Span, true_marker: BlockMarkerId, false_marker: BlockMarkerId| {

compiler/rustc_mir_transform/src/coverage/mod.rs

+17-23
Original file line numberDiff line numberDiff line change
@@ -71,16 +71,15 @@ fn instrument_function_for_coverage<'tcx>(tcx: TyCtxt<'tcx>, mir_body: &mut mir:
7171
let _span = debug_span!("instrument_function_for_coverage", ?def_id).entered();
7272

7373
let hir_info = extract_hir_info(tcx, def_id.expect_local());
74-
let basic_coverage_blocks = CoverageGraph::from_mir(mir_body);
74+
75+
// Build the coverage graph, which is a simplified view of the MIR control-flow
76+
// graph that ignores some details not relevant to coverage instrumentation.
77+
let graph = CoverageGraph::from_mir(mir_body);
7578

7679
////////////////////////////////////////////////////
7780
// Extract coverage spans and other mapping info from MIR.
78-
let extracted_mappings = mappings::extract_all_mapping_info_from_mir(
79-
tcx,
80-
mir_body,
81-
&hir_info,
82-
&basic_coverage_blocks,
83-
);
81+
let extracted_mappings =
82+
mappings::extract_all_mapping_info_from_mir(tcx, mir_body, &hir_info, &graph);
8483

8584
////////////////////////////////////////////////////
8685
// Create an optimized mix of `Counter`s and `Expression`s for the `CoverageGraph`. Ensure
@@ -94,7 +93,7 @@ fn instrument_function_for_coverage<'tcx>(tcx: TyCtxt<'tcx>, mir_body: &mut mir:
9493
}
9594

9695
let coverage_counters =
97-
CoverageCounters::make_bcb_counters(&basic_coverage_blocks, &bcbs_with_counter_mappings);
96+
CoverageCounters::make_bcb_counters(&graph, &bcbs_with_counter_mappings);
9897

9998
let mappings = create_mappings(&extracted_mappings, &coverage_counters);
10099
if mappings.is_empty() {
@@ -103,14 +102,9 @@ fn instrument_function_for_coverage<'tcx>(tcx: TyCtxt<'tcx>, mir_body: &mut mir:
103102
return;
104103
}
105104

106-
inject_coverage_statements(
107-
mir_body,
108-
&basic_coverage_blocks,
109-
&extracted_mappings,
110-
&coverage_counters,
111-
);
105+
inject_coverage_statements(mir_body, &graph, &extracted_mappings, &coverage_counters);
112106

113-
inject_mcdc_statements(mir_body, &basic_coverage_blocks, &extracted_mappings);
107+
inject_mcdc_statements(mir_body, &graph, &extracted_mappings);
114108

115109
let mcdc_num_condition_bitmaps = extracted_mappings
116110
.mcdc_mappings
@@ -243,7 +237,7 @@ fn create_mappings(
243237
/// inject any necessary coverage statements into MIR.
244238
fn inject_coverage_statements<'tcx>(
245239
mir_body: &mut mir::Body<'tcx>,
246-
basic_coverage_blocks: &CoverageGraph,
240+
graph: &CoverageGraph,
247241
extracted_mappings: &ExtractedMappings,
248242
coverage_counters: &CoverageCounters,
249243
) {
@@ -253,12 +247,12 @@ fn inject_coverage_statements<'tcx>(
253247
// For BCB nodes this is just their first block, but for edges we need
254248
// to create a new block between the two BCBs, and inject into that.
255249
let target_bb = match site {
256-
Site::Node { bcb } => basic_coverage_blocks[bcb].leader_bb(),
250+
Site::Node { bcb } => graph[bcb].leader_bb(),
257251
Site::Edge { from_bcb, to_bcb } => {
258252
// Create a new block between the last block of `from_bcb` and
259253
// the first block of `to_bcb`.
260-
let from_bb = basic_coverage_blocks[from_bcb].last_bb();
261-
let to_bb = basic_coverage_blocks[to_bcb].leader_bb();
254+
let from_bb = graph[from_bcb].last_bb();
255+
let to_bb = graph[to_bcb].leader_bb();
262256

263257
let new_bb = inject_edge_counter_basic_block(mir_body, from_bb, to_bb);
264258
debug!(
@@ -291,7 +285,7 @@ fn inject_coverage_statements<'tcx>(
291285
inject_statement(
292286
mir_body,
293287
CoverageKind::ExpressionUsed { id: expression_id },
294-
basic_coverage_blocks[bcb].leader_bb(),
288+
graph[bcb].leader_bb(),
295289
);
296290
}
297291
}
@@ -300,13 +294,13 @@ fn inject_coverage_statements<'tcx>(
300294
/// For each decision inject statements to update test vector bitmap after it has been evaluated.
301295
fn inject_mcdc_statements<'tcx>(
302296
mir_body: &mut mir::Body<'tcx>,
303-
basic_coverage_blocks: &CoverageGraph,
297+
graph: &CoverageGraph,
304298
extracted_mappings: &ExtractedMappings,
305299
) {
306300
for (decision, conditions) in &extracted_mappings.mcdc_mappings {
307301
// Inject test vector update first because `inject_statement` always insert new statement at head.
308302
for &end in &decision.end_bcbs {
309-
let end_bb = basic_coverage_blocks[end].leader_bb();
303+
let end_bb = graph[end].leader_bb();
310304
inject_statement(
311305
mir_body,
312306
CoverageKind::TestVectorBitmapUpdate {
@@ -327,7 +321,7 @@ fn inject_mcdc_statements<'tcx>(
327321
} in conditions
328322
{
329323
for (index, bcb) in [(false_index, false_bcb), (true_index, true_bcb)] {
330-
let bb = basic_coverage_blocks[bcb].leader_bb();
324+
let bb = graph[bcb].leader_bb();
331325
inject_statement(
332326
mir_body,
333327
CoverageKind::CondBitmapUpdate {

compiler/rustc_mir_transform/src/coverage/spans.rs

+4-5
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,13 @@ mod from_mir;
1717
pub(super) fn extract_refined_covspans(
1818
mir_body: &mir::Body<'_>,
1919
hir_info: &ExtractedHirInfo,
20-
basic_coverage_blocks: &CoverageGraph,
20+
graph: &CoverageGraph,
2121
code_mappings: &mut impl Extend<mappings::CodeMapping>,
2222
) {
23-
let ExtractedCovspans { mut covspans } =
24-
extract_covspans_from_mir(mir_body, hir_info, basic_coverage_blocks);
23+
let ExtractedCovspans { mut covspans } = extract_covspans_from_mir(mir_body, hir_info, graph);
2524

2625
// First, perform the passes that need macro information.
27-
covspans.sort_by(|a, b| basic_coverage_blocks.cmp_in_dominator_order(a.bcb, b.bcb));
26+
covspans.sort_by(|a, b| graph.cmp_in_dominator_order(a.bcb, b.bcb));
2827
remove_unwanted_expansion_spans(&mut covspans);
2928
split_visible_macro_spans(&mut covspans);
3029

@@ -34,7 +33,7 @@ pub(super) fn extract_refined_covspans(
3433
let compare_covspans = |a: &Covspan, b: &Covspan| {
3534
compare_spans(a.span, b.span)
3635
// After deduplication, we want to keep only the most-dominated BCB.
37-
.then_with(|| basic_coverage_blocks.cmp_in_dominator_order(a.bcb, b.bcb).reverse())
36+
.then_with(|| graph.cmp_in_dominator_order(a.bcb, b.bcb).reverse())
3837
};
3938
covspans.sort_by(compare_covspans);
4039

compiler/rustc_mir_transform/src/coverage/spans/from_mir.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,13 @@ pub(crate) struct ExtractedCovspans {
2222
pub(crate) fn extract_covspans_from_mir(
2323
mir_body: &mir::Body<'_>,
2424
hir_info: &ExtractedHirInfo,
25-
basic_coverage_blocks: &CoverageGraph,
25+
graph: &CoverageGraph,
2626
) -> ExtractedCovspans {
2727
let &ExtractedHirInfo { body_span, .. } = hir_info;
2828

2929
let mut covspans = vec![];
3030

31-
for (bcb, bcb_data) in basic_coverage_blocks.iter_enumerated() {
31+
for (bcb, bcb_data) in graph.iter_enumerated() {
3232
bcb_to_initial_coverage_spans(mir_body, body_span, bcb, bcb_data, &mut covspans);
3333
}
3434

compiler/rustc_mir_transform/src/coverage/tests.rs

+29-52
Original file line numberDiff line numberDiff line change
@@ -223,24 +223,20 @@ fn print_mir_graphviz(name: &str, mir_body: &Body<'_>) {
223223
}
224224
}
225225

226-
fn print_coverage_graphviz(
227-
name: &str,
228-
mir_body: &Body<'_>,
229-
basic_coverage_blocks: &graph::CoverageGraph,
230-
) {
226+
fn print_coverage_graphviz(name: &str, mir_body: &Body<'_>, graph: &graph::CoverageGraph) {
231227
if PRINT_GRAPHS {
232228
println!(
233229
"digraph {} {{\n{}\n}}",
234230
name,
235-
basic_coverage_blocks
231+
graph
236232
.iter_enumerated()
237233
.map(|(bcb, bcb_data)| {
238234
format!(
239235
" {:?} [label=\"{:?}: {}\"];\n{}",
240236
bcb,
241237
bcb,
242238
mir_body[bcb_data.last_bb()].terminator().kind.name(),
243-
basic_coverage_blocks
239+
graph
244240
.successors(bcb)
245241
.map(|successor| { format!(" {:?} -> {:?};", bcb, successor) })
246242
.join("\n")
@@ -300,11 +296,11 @@ fn goto_switchint<'a>() -> Body<'a> {
300296

301297
#[track_caller]
302298
fn assert_successors(
303-
basic_coverage_blocks: &graph::CoverageGraph,
299+
graph: &graph::CoverageGraph,
304300
bcb: BasicCoverageBlock,
305301
expected_successors: &[BasicCoverageBlock],
306302
) {
307-
let mut successors = basic_coverage_blocks.successors[bcb].clone();
303+
let mut successors = graph.successors[bcb].clone();
308304
successors.sort_unstable();
309305
assert_eq!(successors, expected_successors);
310306
}
@@ -315,8 +311,8 @@ fn test_covgraph_goto_switchint() {
315311
if false {
316312
eprintln!("basic_blocks = {}", debug_basic_blocks(&mir_body));
317313
}
318-
let basic_coverage_blocks = graph::CoverageGraph::from_mir(&mir_body);
319-
print_coverage_graphviz("covgraph_goto_switchint ", &mir_body, &basic_coverage_blocks);
314+
let graph = graph::CoverageGraph::from_mir(&mir_body);
315+
print_coverage_graphviz("covgraph_goto_switchint ", &mir_body, &graph);
320316
/*
321317
┌──────────────┐ ┌─────────────────┐
322318
│ bcb2: Return │ ◀── │ bcb0: SwitchInt │
@@ -328,16 +324,11 @@ fn test_covgraph_goto_switchint() {
328324
│ bcb1: Return │
329325
└─────────────────┘
330326
*/
331-
assert_eq!(
332-
basic_coverage_blocks.num_nodes(),
333-
3,
334-
"basic_coverage_blocks: {:?}",
335-
basic_coverage_blocks.iter_enumerated().collect::<Vec<_>>()
336-
);
327+
assert_eq!(graph.num_nodes(), 3, "graph: {:?}", graph.iter_enumerated().collect::<Vec<_>>());
337328

338-
assert_successors(&basic_coverage_blocks, bcb(0), &[bcb(1), bcb(2)]);
339-
assert_successors(&basic_coverage_blocks, bcb(1), &[]);
340-
assert_successors(&basic_coverage_blocks, bcb(2), &[]);
329+
assert_successors(&graph, bcb(0), &[bcb(1), bcb(2)]);
330+
assert_successors(&graph, bcb(1), &[]);
331+
assert_successors(&graph, bcb(2), &[]);
341332
}
342333

343334
/// Create a mock `Body` with a loop.
@@ -383,12 +374,8 @@ fn switchint_then_loop_else_return<'a>() -> Body<'a> {
383374
#[test]
384375
fn test_covgraph_switchint_then_loop_else_return() {
385376
let mir_body = switchint_then_loop_else_return();
386-
let basic_coverage_blocks = graph::CoverageGraph::from_mir(&mir_body);
387-
print_coverage_graphviz(
388-
"covgraph_switchint_then_loop_else_return",
389-
&mir_body,
390-
&basic_coverage_blocks,
391-
);
377+
let graph = graph::CoverageGraph::from_mir(&mir_body);
378+
print_coverage_graphviz("covgraph_switchint_then_loop_else_return", &mir_body, &graph);
392379
/*
393380
┌─────────────────┐
394381
│ bcb0: Call │
@@ -408,17 +395,12 @@ fn test_covgraph_switchint_then_loop_else_return() {
408395
│ │
409396
└─────────────────────────────────────┘
410397
*/
411-
assert_eq!(
412-
basic_coverage_blocks.num_nodes(),
413-
4,
414-
"basic_coverage_blocks: {:?}",
415-
basic_coverage_blocks.iter_enumerated().collect::<Vec<_>>()
416-
);
398+
assert_eq!(graph.num_nodes(), 4, "graph: {:?}", graph.iter_enumerated().collect::<Vec<_>>());
417399

418-
assert_successors(&basic_coverage_blocks, bcb(0), &[bcb(1)]);
419-
assert_successors(&basic_coverage_blocks, bcb(1), &[bcb(2), bcb(3)]);
420-
assert_successors(&basic_coverage_blocks, bcb(2), &[]);
421-
assert_successors(&basic_coverage_blocks, bcb(3), &[bcb(1)]);
400+
assert_successors(&graph, bcb(0), &[bcb(1)]);
401+
assert_successors(&graph, bcb(1), &[bcb(2), bcb(3)]);
402+
assert_successors(&graph, bcb(2), &[]);
403+
assert_successors(&graph, bcb(3), &[bcb(1)]);
422404
}
423405

424406
/// Create a mock `Body` with nested loops.
@@ -494,11 +476,11 @@ fn switchint_loop_then_inner_loop_else_break<'a>() -> Body<'a> {
494476
#[test]
495477
fn test_covgraph_switchint_loop_then_inner_loop_else_break() {
496478
let mir_body = switchint_loop_then_inner_loop_else_break();
497-
let basic_coverage_blocks = graph::CoverageGraph::from_mir(&mir_body);
479+
let graph = graph::CoverageGraph::from_mir(&mir_body);
498480
print_coverage_graphviz(
499481
"covgraph_switchint_loop_then_inner_loop_else_break",
500482
&mir_body,
501-
&basic_coverage_blocks,
483+
&graph,
502484
);
503485
/*
504486
┌─────────────────┐
@@ -531,18 +513,13 @@ fn test_covgraph_switchint_loop_then_inner_loop_else_break() {
531513
│ │
532514
└────────────────────────────────────────────┘
533515
*/
534-
assert_eq!(
535-
basic_coverage_blocks.num_nodes(),
536-
7,
537-
"basic_coverage_blocks: {:?}",
538-
basic_coverage_blocks.iter_enumerated().collect::<Vec<_>>()
539-
);
540-
541-
assert_successors(&basic_coverage_blocks, bcb(0), &[bcb(1)]);
542-
assert_successors(&basic_coverage_blocks, bcb(1), &[bcb(2), bcb(3)]);
543-
assert_successors(&basic_coverage_blocks, bcb(2), &[]);
544-
assert_successors(&basic_coverage_blocks, bcb(3), &[bcb(4)]);
545-
assert_successors(&basic_coverage_blocks, bcb(4), &[bcb(5), bcb(6)]);
546-
assert_successors(&basic_coverage_blocks, bcb(5), &[bcb(1)]);
547-
assert_successors(&basic_coverage_blocks, bcb(6), &[bcb(4)]);
516+
assert_eq!(graph.num_nodes(), 7, "graph: {:?}", graph.iter_enumerated().collect::<Vec<_>>());
517+
518+
assert_successors(&graph, bcb(0), &[bcb(1)]);
519+
assert_successors(&graph, bcb(1), &[bcb(2), bcb(3)]);
520+
assert_successors(&graph, bcb(2), &[]);
521+
assert_successors(&graph, bcb(3), &[bcb(4)]);
522+
assert_successors(&graph, bcb(4), &[bcb(5), bcb(6)]);
523+
assert_successors(&graph, bcb(5), &[bcb(1)]);
524+
assert_successors(&graph, bcb(6), &[bcb(4)]);
548525
}

0 commit comments

Comments
 (0)