8
8
use super :: iterate:: reverse_post_order;
9
9
use super :: ControlFlowGraph ;
10
10
use rustc_index:: vec:: { Idx , IndexVec } ;
11
- use std:: borrow:: BorrowMut ;
12
11
use std:: cmp:: Ordering ;
13
12
14
13
#[ cfg( test) ]
@@ -20,22 +19,17 @@ pub fn dominators<G: ControlFlowGraph>(graph: G) -> Dominators<G::Node> {
20
19
dominators_given_rpo ( graph, & rpo)
21
20
}
22
21
23
- fn dominators_given_rpo < G : ControlFlowGraph + BorrowMut < G > > (
24
- mut graph : G ,
25
- rpo : & [ G :: Node ] ,
26
- ) -> Dominators < G :: Node > {
27
- let start_node = graph. borrow ( ) . start_node ( ) ;
22
+ fn dominators_given_rpo < G : ControlFlowGraph > ( graph : G , rpo : & [ G :: Node ] ) -> Dominators < G :: Node > {
23
+ let start_node = graph. start_node ( ) ;
28
24
assert_eq ! ( rpo[ 0 ] , start_node) ;
29
25
30
26
// compute the post order index (rank) for each node
31
- let mut post_order_rank: IndexVec < G :: Node , usize > =
32
- ( 0 ..graph. borrow ( ) . num_nodes ( ) ) . map ( |_| 0 ) . collect ( ) ;
27
+ let mut post_order_rank = IndexVec :: from_elem_n ( 0 , graph. num_nodes ( ) ) ;
33
28
for ( index, node) in rpo. iter ( ) . rev ( ) . cloned ( ) . enumerate ( ) {
34
29
post_order_rank[ node] = index;
35
30
}
36
31
37
- let mut immediate_dominators: IndexVec < G :: Node , Option < G :: Node > > =
38
- ( 0 ..graph. borrow ( ) . num_nodes ( ) ) . map ( |_| None ) . collect ( ) ;
32
+ let mut immediate_dominators = IndexVec :: from_elem_n ( None , graph. num_nodes ( ) ) ;
39
33
immediate_dominators[ start_node] = Some ( start_node) ;
40
34
41
35
let mut changed = true ;
@@ -44,7 +38,7 @@ fn dominators_given_rpo<G: ControlFlowGraph + BorrowMut<G>>(
44
38
45
39
for & node in & rpo[ 1 ..] {
46
40
let mut new_idom = None ;
47
- for pred in graph. borrow_mut ( ) . predecessors ( node) {
41
+ for pred in graph. predecessors ( node) {
48
42
if immediate_dominators[ pred] . is_some ( ) {
49
43
// (*) dominators for `pred` have been calculated
50
44
new_idom = Some ( if let Some ( new_idom) = new_idom {
0 commit comments