@@ -51,41 +51,34 @@ pub fn retain_basic_blocks(mir: &mut Mir, keep: &[bool]) {
51
51
update_basic_block_ids ( mir, & replacements) ;
52
52
}
53
53
54
- // A simple map to perform quick lookups of the predecessors of a BasicBlock.
55
- // Since BasicBlocks usually only have a small number of predecessors, we use a
56
- // simple vector. Also, if a block has the same target more than once, for
57
- // example in a switch, it will appear in the target's predecessor list multiple
58
- // times. This allows to update the map more easily when modifying the graph.
54
+ // A simple map to perform quick lookups of the number of predecessors of a
55
+ // BasicBlock. If a block has the same target more than once, for
56
+ // example in a switch, it will appear in the target's predecessor list
57
+ // multiple times. This makes updating the map easier when modifying the graph.
59
58
pub struct PredecessorMap {
60
- map : Vec < Vec < BasicBlock > > ,
59
+ map : Vec < usize > ,
61
60
}
62
61
63
62
impl PredecessorMap {
64
63
pub fn new ( num_blocks : usize ) -> PredecessorMap {
65
64
PredecessorMap {
66
- map : vec ! [ Vec :: new ( ) ; num_blocks] ,
65
+ map : vec ! [ 0 ; num_blocks] ,
67
66
}
68
67
}
69
68
70
- pub fn predecessors ( & self , block : BasicBlock ) -> & [ BasicBlock ] {
71
- & self . map [ block. index ( ) ]
69
+ pub fn num_predecessors ( & self , block : BasicBlock ) -> usize {
70
+ self . map [ block. index ( ) ]
72
71
}
73
72
74
- pub fn add_predecessor ( & mut self , block : BasicBlock , predecessor : BasicBlock ) {
75
- self . map [ block. index ( ) ] . push ( predecessor ) ;
73
+ pub fn add_predecessor ( & mut self , block : BasicBlock , _predecessor : BasicBlock ) {
74
+ self . map [ block. index ( ) ] += 1 ;
76
75
}
77
76
78
- pub fn remove_predecessor ( & mut self , block : BasicBlock , predecessor : BasicBlock ) {
79
- let pos = self . map [ block. index ( ) ] . iter ( ) . position ( |& p| p == predecessor) . expect (
80
- & format ! ( "{:?} is not registered as a predecessor of {:?}" , predecessor, block) ) ;
81
-
82
- self . map [ block. index ( ) ] . swap_remove ( pos) ;
77
+ pub fn remove_predecessor ( & mut self , block : BasicBlock , _predecessor : BasicBlock ) {
78
+ self . map [ block. index ( ) ] -= 1 ;
83
79
}
84
80
85
- pub fn replace_predecessor ( & mut self , block : BasicBlock , old : BasicBlock , new : BasicBlock ) {
86
- self . remove_predecessor ( block, old) ;
87
- self . add_predecessor ( block, new) ;
88
- }
81
+ pub fn replace_predecessor ( & mut self , _block : BasicBlock , _old : BasicBlock , _new : BasicBlock ) { }
89
82
}
90
83
91
84
struct PredecessorVisitor {
0 commit comments