88use super :: iterate:: reverse_post_order;
99use super :: ControlFlowGraph ;
1010use rustc_index:: vec:: { Idx , IndexVec } ;
11- use std:: borrow:: BorrowMut ;
1211use std:: cmp:: Ordering ;
1312
1413#[ cfg( test) ]
@@ -20,22 +19,17 @@ pub fn dominators<G: ControlFlowGraph>(graph: G) -> Dominators<G::Node> {
2019 dominators_given_rpo ( graph, & rpo)
2120}
2221
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 ( ) ;
2824 assert_eq ! ( rpo[ 0 ] , start_node) ;
2925
3026 // 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 ( ) ) ;
3328 for ( index, node) in rpo. iter ( ) . rev ( ) . cloned ( ) . enumerate ( ) {
3429 post_order_rank[ node] = index;
3530 }
3631
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 ( ) ) ;
3933 immediate_dominators[ start_node] = Some ( start_node) ;
4034
4135 let mut changed = true ;
@@ -44,7 +38,7 @@ fn dominators_given_rpo<G: ControlFlowGraph + BorrowMut<G>>(
4438
4539 for & node in & rpo[ 1 ..] {
4640 let mut new_idom = None ;
47- for pred in graph. borrow_mut ( ) . predecessors ( node) {
41+ for pred in graph. predecessors ( node) {
4842 if immediate_dominators[ pred] . is_some ( ) {
4943 // (*) dominators for `pred` have been calculated
5044 new_idom = Some ( if let Some ( new_idom) = new_idom {
0 commit comments