@@ -14,16 +14,16 @@ use std::ops::{Index, IndexMut};
14
14
/// A coverage-specific simplification of the MIR control flow graph (CFG). The `CoverageGraph`s
15
15
/// nodes are `BasicCoverageBlock`s, which encompass one or more MIR `BasicBlock`s.
16
16
#[ derive( Debug ) ]
17
- pub ( super ) struct CoverageGraph {
17
+ pub ( crate ) struct CoverageGraph {
18
18
bcbs : IndexVec < BasicCoverageBlock , BasicCoverageBlockData > ,
19
19
bb_to_bcb : IndexVec < BasicBlock , Option < BasicCoverageBlock > > ,
20
- pub successors : IndexVec < BasicCoverageBlock , Vec < BasicCoverageBlock > > ,
21
- pub predecessors : IndexVec < BasicCoverageBlock , Vec < BasicCoverageBlock > > ,
20
+ pub ( crate ) successors : IndexVec < BasicCoverageBlock , Vec < BasicCoverageBlock > > ,
21
+ pub ( crate ) predecessors : IndexVec < BasicCoverageBlock , Vec < BasicCoverageBlock > > ,
22
22
dominators : Option < Dominators < BasicCoverageBlock > > ,
23
23
}
24
24
25
25
impl CoverageGraph {
26
- pub fn from_mir ( mir_body : & mir:: Body < ' _ > ) -> Self {
26
+ pub ( crate ) fn from_mir ( mir_body : & mir:: Body < ' _ > ) -> Self {
27
27
let ( bcbs, bb_to_bcb) = Self :: compute_basic_coverage_blocks ( mir_body) ;
28
28
29
29
// Pre-transform MIR `BasicBlock` successors and predecessors into the BasicCoverageBlock
@@ -135,24 +135,28 @@ impl CoverageGraph {
135
135
}
136
136
137
137
#[ inline( always) ]
138
- pub fn iter_enumerated (
138
+ pub ( crate ) fn iter_enumerated (
139
139
& self ,
140
140
) -> impl Iterator < Item = ( BasicCoverageBlock , & BasicCoverageBlockData ) > {
141
141
self . bcbs . iter_enumerated ( )
142
142
}
143
143
144
144
#[ inline( always) ]
145
- pub fn bcb_from_bb ( & self , bb : BasicBlock ) -> Option < BasicCoverageBlock > {
145
+ pub ( crate ) fn bcb_from_bb ( & self , bb : BasicBlock ) -> Option < BasicCoverageBlock > {
146
146
if bb. index ( ) < self . bb_to_bcb . len ( ) { self . bb_to_bcb [ bb] } else { None }
147
147
}
148
148
149
149
#[ inline( always) ]
150
- pub fn dominates ( & self , dom : BasicCoverageBlock , node : BasicCoverageBlock ) -> bool {
150
+ pub ( crate ) fn dominates ( & self , dom : BasicCoverageBlock , node : BasicCoverageBlock ) -> bool {
151
151
self . dominators . as_ref ( ) . unwrap ( ) . dominates ( dom, node)
152
152
}
153
153
154
154
#[ inline( always) ]
155
- pub fn cmp_in_dominator_order ( & self , a : BasicCoverageBlock , b : BasicCoverageBlock ) -> Ordering {
155
+ pub ( crate ) fn cmp_in_dominator_order (
156
+ & self ,
157
+ a : BasicCoverageBlock ,
158
+ b : BasicCoverageBlock ,
159
+ ) -> Ordering {
156
160
self . dominators . as_ref ( ) . unwrap ( ) . cmp_in_dominator_order ( a, b)
157
161
}
158
162
@@ -166,7 +170,7 @@ impl CoverageGraph {
166
170
///
167
171
/// FIXME: That assumption might not be true for [`TerminatorKind::Yield`]?
168
172
#[ inline( always) ]
169
- pub ( super ) fn bcb_has_multiple_in_edges ( & self , bcb : BasicCoverageBlock ) -> bool {
173
+ pub ( crate ) fn bcb_has_multiple_in_edges ( & self , bcb : BasicCoverageBlock ) -> bool {
170
174
// Even though bcb0 conceptually has an extra virtual in-edge due to
171
175
// being the entry point, we've already asserted that it has no _other_
172
176
// in-edges, so there's no possibility of it having _multiple_ in-edges.
@@ -227,7 +231,7 @@ rustc_index::newtype_index! {
227
231
/// A node in the control-flow graph of CoverageGraph.
228
232
#[ orderable]
229
233
#[ debug_format = "bcb{}" ]
230
- pub ( super ) struct BasicCoverageBlock {
234
+ pub ( crate ) struct BasicCoverageBlock {
231
235
const START_BCB = 0 ;
232
236
}
233
237
}
@@ -259,23 +263,23 @@ rustc_index::newtype_index! {
259
263
/// queries (`dominates()`, `predecessors`, `successors`, etc.) have branch (control flow)
260
264
/// significance.
261
265
#[ derive( Debug , Clone ) ]
262
- pub ( super ) struct BasicCoverageBlockData {
263
- pub basic_blocks : Vec < BasicBlock > ,
266
+ pub ( crate ) struct BasicCoverageBlockData {
267
+ pub ( crate ) basic_blocks : Vec < BasicBlock > ,
264
268
}
265
269
266
270
impl BasicCoverageBlockData {
267
- pub fn from ( basic_blocks : Vec < BasicBlock > ) -> Self {
271
+ fn from ( basic_blocks : Vec < BasicBlock > ) -> Self {
268
272
assert ! ( basic_blocks. len( ) > 0 ) ;
269
273
Self { basic_blocks }
270
274
}
271
275
272
276
#[ inline( always) ]
273
- pub fn leader_bb ( & self ) -> BasicBlock {
277
+ pub ( crate ) fn leader_bb ( & self ) -> BasicBlock {
274
278
self . basic_blocks [ 0 ]
275
279
}
276
280
277
281
#[ inline( always) ]
278
- pub fn last_bb ( & self ) -> BasicBlock {
282
+ pub ( crate ) fn last_bb ( & self ) -> BasicBlock {
279
283
* self . basic_blocks . last ( ) . unwrap ( )
280
284
}
281
285
}
@@ -364,7 +368,7 @@ fn bcb_filtered_successors<'a, 'tcx>(terminator: &'a Terminator<'tcx>) -> Covera
364
368
/// CoverageGraph outside all loops. This supports traversing the BCB CFG in a way that
365
369
/// ensures a loop is completely traversed before processing Blocks after the end of the loop.
366
370
#[ derive( Debug ) ]
367
- pub ( super ) struct TraversalContext {
371
+ struct TraversalContext {
368
372
/// BCB with one or more incoming loop backedges, indicating which loop
369
373
/// this context is for.
370
374
///
@@ -375,7 +379,7 @@ pub(super) struct TraversalContext {
375
379
worklist : VecDeque < BasicCoverageBlock > ,
376
380
}
377
381
378
- pub ( super ) struct TraverseCoverageGraphWithLoops < ' a > {
382
+ pub ( crate ) struct TraverseCoverageGraphWithLoops < ' a > {
379
383
basic_coverage_blocks : & ' a CoverageGraph ,
380
384
381
385
backedges : IndexVec < BasicCoverageBlock , Vec < BasicCoverageBlock > > ,
@@ -384,7 +388,7 @@ pub(super) struct TraverseCoverageGraphWithLoops<'a> {
384
388
}
385
389
386
390
impl < ' a > TraverseCoverageGraphWithLoops < ' a > {
387
- pub ( super ) fn new ( basic_coverage_blocks : & ' a CoverageGraph ) -> Self {
391
+ pub ( crate ) fn new ( basic_coverage_blocks : & ' a CoverageGraph ) -> Self {
388
392
let backedges = find_loop_backedges ( basic_coverage_blocks) ;
389
393
390
394
let worklist = VecDeque :: from ( [ basic_coverage_blocks. start_node ( ) ] ) ;
@@ -400,15 +404,15 @@ impl<'a> TraverseCoverageGraphWithLoops<'a> {
400
404
401
405
/// For each loop on the loop context stack (top-down), yields a list of BCBs
402
406
/// within that loop that have an outgoing edge back to the loop header.
403
- pub ( super ) fn reloop_bcbs_per_loop ( & self ) -> impl Iterator < Item = & [ BasicCoverageBlock ] > {
407
+ pub ( crate ) fn reloop_bcbs_per_loop ( & self ) -> impl Iterator < Item = & [ BasicCoverageBlock ] > {
404
408
self . context_stack
405
409
. iter ( )
406
410
. rev ( )
407
411
. filter_map ( |context| context. loop_header )
408
412
. map ( |header_bcb| self . backedges [ header_bcb] . as_slice ( ) )
409
413
}
410
414
411
- pub ( super ) fn next ( & mut self ) -> Option < BasicCoverageBlock > {
415
+ pub ( crate ) fn next ( & mut self ) -> Option < BasicCoverageBlock > {
412
416
debug ! (
413
417
"TraverseCoverageGraphWithLoops::next - context_stack: {:?}" ,
414
418
self . context_stack. iter( ) . rev( ) . collect:: <Vec <_>>( )
@@ -440,7 +444,7 @@ impl<'a> TraverseCoverageGraphWithLoops<'a> {
440
444
None
441
445
}
442
446
443
- pub fn add_successors_to_worklists ( & mut self , bcb : BasicCoverageBlock ) {
447
+ fn add_successors_to_worklists ( & mut self , bcb : BasicCoverageBlock ) {
444
448
let successors = & self . basic_coverage_blocks . successors [ bcb] ;
445
449
debug ! ( "{:?} has {} successors:" , bcb, successors. len( ) ) ;
446
450
@@ -494,19 +498,19 @@ impl<'a> TraverseCoverageGraphWithLoops<'a> {
494
498
}
495
499
}
496
500
497
- pub fn is_complete ( & self ) -> bool {
501
+ pub ( crate ) fn is_complete ( & self ) -> bool {
498
502
self . visited . count ( ) == self . visited . domain_size ( )
499
503
}
500
504
501
- pub fn unvisited ( & self ) -> Vec < BasicCoverageBlock > {
505
+ pub ( crate ) fn unvisited ( & self ) -> Vec < BasicCoverageBlock > {
502
506
let mut unvisited_set: BitSet < BasicCoverageBlock > =
503
507
BitSet :: new_filled ( self . visited . domain_size ( ) ) ;
504
508
unvisited_set. subtract ( & self . visited ) ;
505
509
unvisited_set. iter ( ) . collect :: < Vec < _ > > ( )
506
510
}
507
511
}
508
512
509
- pub ( super ) fn find_loop_backedges (
513
+ fn find_loop_backedges (
510
514
basic_coverage_blocks : & CoverageGraph ,
511
515
) -> IndexVec < BasicCoverageBlock , Vec < BasicCoverageBlock > > {
512
516
let num_bcbs = basic_coverage_blocks. num_nodes ( ) ;
0 commit comments