@@ -17,7 +17,7 @@ pub fn dominators<G: ControlFlowGraph>(graph: &G) -> Dominators<G::Node> {
17
17
dominators_given_rpo ( graph, & rpo)
18
18
}
19
19
20
- pub fn dominators_given_rpo < G : ControlFlowGraph > (
20
+ fn dominators_given_rpo < G : ControlFlowGraph > (
21
21
graph : & G ,
22
22
rpo : & [ G :: Node ] ,
23
23
) -> Dominators < G :: Node > {
@@ -43,14 +43,12 @@ pub fn dominators_given_rpo<G: ControlFlowGraph>(
43
43
let mut new_idom = None ;
44
44
for pred in graph. predecessors ( node) {
45
45
if immediate_dominators[ pred] . is_some ( ) {
46
- // (*)
47
46
// (*) dominators for `pred` have been calculated
48
- new_idom = intersect_opt (
49
- & post_order_rank,
50
- & immediate_dominators,
51
- new_idom,
52
- Some ( pred) ,
53
- ) ;
47
+ new_idom = Some ( if let Some ( new_idom) = new_idom {
48
+ intersect ( & post_order_rank, & immediate_dominators, new_idom, pred)
49
+ } else {
50
+ pred
51
+ } ) ;
54
52
}
55
53
}
56
54
@@ -67,19 +65,6 @@ pub fn dominators_given_rpo<G: ControlFlowGraph>(
67
65
}
68
66
}
69
67
70
- fn intersect_opt < Node : Idx > (
71
- post_order_rank : & IndexVec < Node , usize > ,
72
- immediate_dominators : & IndexVec < Node , Option < Node > > ,
73
- node1 : Option < Node > ,
74
- node2 : Option < Node > ,
75
- ) -> Option < Node > {
76
- match ( node1, node2) {
77
- ( None , None ) => None ,
78
- ( Some ( n) , None ) | ( None , Some ( n) ) => Some ( n) ,
79
- ( Some ( n1) , Some ( n2) ) => Some ( intersect ( post_order_rank, immediate_dominators, n1, n2) ) ,
80
- }
81
- }
82
-
83
68
fn intersect < Node : Idx > (
84
69
post_order_rank : & IndexVec < Node , usize > ,
85
70
immediate_dominators : & IndexVec < Node , Option < Node > > ,
0 commit comments