about summary refs log tree commit diff
path: root/src/librustc_mir/transform
diff options
context:
space:
mode:
authorAriel Ben-Yehuda <ariel.byd@gmail.com>2016-06-07 22:02:08 +0300
committerAriel Ben-Yehuda <arielb1@mail.tau.ac.il>2016-06-09 15:01:45 +0300
commit6405527ded784289b4e77d531b57e010cd5fae52 (patch)
tree8f10a6ed5cf73041204d6acb1466fef42258efad /src/librustc_mir/transform
parente3af9fa4906594ba22015e549cf8bfc3201dec1b (diff)
downloadrust-6405527ded784289b4e77d531b57e010cd5fae52.tar.gz
rust-6405527ded784289b4e77d531b57e010cd5fae52.zip
add a cache for MIR predecessors
Diffstat (limited to 'src/librustc_mir/transform')
-rw-r--r--src/librustc_mir/transform/add_call_guards.rs13
-rw-r--r--src/librustc_mir/transform/simplify_cfg.rs11
2 files changed, 4 insertions, 20 deletions
diff --git a/src/librustc_mir/transform/add_call_guards.rs b/src/librustc_mir/transform/add_call_guards.rs
index dee9227fd9b..63e975128c7 100644
--- a/src/librustc_mir/transform/add_call_guards.rs
+++ b/src/librustc_mir/transform/add_call_guards.rs
@@ -11,7 +11,6 @@
 use rustc::ty::TyCtxt;
 use rustc::mir::repr::*;
 use rustc::mir::transform::{MirPass, MirSource, Pass};
-use rustc::mir::traversal;
 use rustc_data_structures::indexed_vec::{Idx, IndexVec};
 
 use pretty;
@@ -40,16 +39,8 @@ pub struct AddCallGuards;
 
 impl<'tcx> MirPass<'tcx> for AddCallGuards {
     fn run_pass<'a>(&mut self, tcx: TyCtxt<'a, 'tcx, 'tcx>, src: MirSource, mir: &mut Mir<'tcx>) {
-        let mut pred_count = IndexVec::from_elem(0u32, mir.basic_blocks());
-
-        // Build the precedecessor map for the MIR
-        for (_, data) in traversal::preorder(mir) {
-            if let Some(ref term) = data.terminator {
-                for &tgt in term.successors().iter() {
-                    pred_count[tgt] += 1;
-                }
-            }
-        }
+        let pred_count: IndexVec<_, _> =
+            mir.predecessors().iter().map(|ps| ps.len()).collect();
 
         // We need a place to store the new blocks generated
         let mut new_blocks = Vec::new();
diff --git a/src/librustc_mir/transform/simplify_cfg.rs b/src/librustc_mir/transform/simplify_cfg.rs
index fcc82249953..9cee6b11c07 100644
--- a/src/librustc_mir/transform/simplify_cfg.rs
+++ b/src/librustc_mir/transform/simplify_cfg.rs
@@ -67,15 +67,8 @@ impl<'l, 'tcx> MirPass<'tcx> for SimplifyCfg<'l> {
 impl<'l> Pass for SimplifyCfg<'l> {}
 
 fn merge_consecutive_blocks(mir: &mut Mir) {
-    // Build the precedecessor map for the MIR
-    let mut pred_count = IndexVec::from_elem(0u32, mir.basic_blocks());
-    for (_, data) in traversal::preorder(mir) {
-        if let Some(ref term) = data.terminator {
-            for &tgt in term.successors().iter() {
-                pred_count[tgt] += 1;
-            }
-        }
-    }
+    let mut pred_count: IndexVec<_, _> =
+        mir.predecessors().iter().map(|ps| ps.len()).collect();
 
     loop {
         let mut changed = false;