]> git.lizzy.rs Git - rust.git/commitdiff
Replace multiple calls to `predecessors_for`
authorDylan MacKenzie <ecstaticmorse@gmail.com>
Sun, 19 Apr 2020 20:56:49 +0000 (13:56 -0700)
committerDylan MacKenzie <ecstaticmorse@gmail.com>
Wed, 22 Apr 2020 16:57:43 +0000 (09:57 -0700)
...with a single one to `predecessors`. `predecessors_for` requires
taking the lock/incrementing the `RefCell` once each call.

src/librustc_middle/mir/mod.rs

index ea3e59666d67ae36b8aed616262e91cd03c72ce2..e476729c11b4d3f6013e9d0dc2090842d3dccb9c 100644 (file)
@@ -2716,14 +2716,16 @@ pub fn is_predecessor_of<'tcx>(&self, other: Location, body: &Body<'tcx>) -> boo
             return true;
         }
 
+        let predecessors = body.predecessors();
+
         // If we're in another block, then we want to check that block is a predecessor of `other`.
-        let mut queue: Vec<BasicBlock> = body.predecessors_for(other.block).to_vec();
+        let mut queue: Vec<BasicBlock> = predecessors[other.block].to_vec();
         let mut visited = FxHashSet::default();
 
         while let Some(block) = queue.pop() {
             // If we haven't visited this block before, then make sure we visit it's predecessors.
             if visited.insert(block) {
-                queue.extend(body.predecessors_for(block).iter().cloned());
+                queue.extend(predecessors[block].iter().cloned());
             } else {
                 continue;
             }