Skip to content

Commit baa2d07

Browse files
Calculate predecessors from successors
1 parent 0295b0f commit baa2d07

File tree

1 file changed

+12
-20
lines changed

1 file changed

+12
-20
lines changed

src/librustc/mir/cache.rs

+12-20
Original file line numberDiff line numberDiff line change
@@ -51,38 +51,30 @@ impl Cache {
5151

5252
pub fn predecessors(&self, mir: &Mir) -> Ref<IndexVec<Block, Vec<Block>>> {
5353
if self.predecessors.borrow().is_none() {
54-
*self.predecessors.borrow_mut() = Some(calculate_predecessors(mir));
54+
*self.predecessors.borrow_mut() = Some(self.calculate_predecessors(mir));
5555
}
5656

5757
Ref::map(self.predecessors.borrow(), |p| p.as_ref().unwrap())
5858
}
5959

60-
pub fn successors(&self, mir: &Mir) -> Ref<IndexVec<Block, Vec<Block>>> {
61-
if self.successors.borrow().is_none() {
62-
*self.successors.borrow_mut() = Some(calculate_successors(mir));
60+
fn calculate_predecessors(&self, mir: &Mir) -> IndexVec<Block, Vec<Block>> {
61+
let mut result = IndexVec::from_elem(vec![], mir.basic_blocks());
62+
for (bb, bbs) in self.successors(mir).iter_enumerated() {
63+
for &tgt in bbs {
64+
result[tgt].push(bb);
65+
}
6366
}
6467

65-
Ref::map(self.successors.borrow(), |p| p.as_ref().unwrap())
68+
result
6669
}
67-
}
6870

69-
fn calculate_predecessors(mir: &Mir) -> IndexVec<Block, Vec<Block>> {
70-
let mut result = IndexVec::from_elem(vec![], mir.basic_blocks());
71-
for (bb, data) in mir.basic_blocks().iter_enumerated() {
72-
for stmt in &data.statements {
73-
for &tgt in stmt.successors().iter() {
74-
result[tgt].push(bb);
75-
}
71+
pub fn successors(&self, mir: &Mir) -> Ref<IndexVec<Block, Vec<Block>>> {
72+
if self.successors.borrow().is_none() {
73+
*self.successors.borrow_mut() = Some(calculate_successors(mir));
7674
}
7775

78-
if let Some(ref term) = data.terminator {
79-
for &tgt in term.successors().iter() {
80-
result[tgt].push(bb);
81-
}
82-
}
76+
Ref::map(self.successors.borrow(), |p| p.as_ref().unwrap())
8377
}
84-
85-
result
8678
}
8779

8880
fn calculate_successors(mir: &Mir) -> IndexVec<Block, Vec<Block>> {

0 commit comments

Comments
 (0)