diff options
| author | Eric Holk <ericholk@microsoft.com> | 2021-12-16 15:46:56 -0800 |
|---|---|---|
| committer | Eric Holk <ericholk@microsoft.com> | 2022-01-18 14:25:29 -0800 |
| commit | 7d11b336f3ee9d65ba82b86d73cf9bc9fb174269 (patch) | |
| tree | 57cd1c3c99f7cf318d57897ee8bb8bee9899457c | |
| parent | a7df4e8d2f89379fb0b620cb0267f97c05bc1598 (diff) | |
| download | rust-7d11b336f3ee9d65ba82b86d73cf9bc9fb174269.tar.gz rust-7d11b336f3ee9d65ba82b86d73cf9bc9fb174269.zip | |
Remove clones and most allocations from propagate_to_fixpoint
| -rw-r--r-- | compiler/rustc_typeck/src/check/generator_interior/drop_ranges/cfg_propagate.rs | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/compiler/rustc_typeck/src/check/generator_interior/drop_ranges/cfg_propagate.rs b/compiler/rustc_typeck/src/check/generator_interior/drop_ranges/cfg_propagate.rs index 22f7484abf3..a540812f4a3 100644 --- a/compiler/rustc_typeck/src/check/generator_interior/drop_ranges/cfg_propagate.rs +++ b/compiler/rustc_typeck/src/check/generator_interior/drop_ranges/cfg_propagate.rs @@ -9,16 +9,17 @@ impl DropRangesBuilder { trace!("predecessors: {:#?}", preds.iter_enumerated().collect::<BTreeMap<_, _>>()); + let mut new_state = BitSet::new_empty(self.num_values()); + let mut propagate = || { let mut changed = false; for id in self.nodes.indices() { - let old_state = self.nodes[id].drop_state.clone(); - let mut new_state = if id.index() == 0 { - BitSet::new_empty(self.num_values()) + if id.index() == 0 { + new_state.clear(); } else { // If we are not the start node and we have no predecessors, treat // everything as dropped because there's no way to get here anyway. - BitSet::new_filled(self.num_values()) + new_state.insert_all(); }; for pred in &preds[id] { @@ -34,8 +35,7 @@ impl DropRangesBuilder { new_state.remove(*reinit); } - changed |= old_state != new_state; - self.nodes[id].drop_state = new_state; + changed |= self.nodes[id].drop_state.intersect(&new_state); } changed |
