diff options
| author | bors <bors@rust-lang.org> | 2025-06-25 14:34:08 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2025-06-25 14:34:08 +0000 |
| commit | 8cf5fad73d4e8f41863ecc3bcfa114eabc951faa (patch) | |
| tree | 863e228134a7a77c769cb7520365cd31f913a4a2 | |
| parent | 2801f9aaf9b7580d9b230b532b0700709857cc88 (diff) | |
| parent | c35353910918eb40c814291996c585aababe0ea9 (diff) | |
| download | rust-8cf5fad73d4e8f41863ecc3bcfa114eabc951faa.tar.gz rust-8cf5fad73d4e8f41863ecc3bcfa114eabc951faa.zip | |
Auto merge of #142870 - tmiasko:copy-prop-early-exit, r=cjgillot
Leave from CopyProp early when there are no replacements r? cjgillot
| -rw-r--r-- | compiler/rustc_mir_transform/src/copy_prop.rs | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/compiler/rustc_mir_transform/src/copy_prop.rs b/compiler/rustc_mir_transform/src/copy_prop.rs index fe78a104fa0..cddeefca681 100644 --- a/compiler/rustc_mir_transform/src/copy_prop.rs +++ b/compiler/rustc_mir_transform/src/copy_prop.rs @@ -33,24 +33,26 @@ impl<'tcx> crate::MirPass<'tcx> for CopyProp { debug!(borrowed_locals = ?ssa.borrowed_locals()); debug!(copy_classes = ?ssa.copy_classes()); - let fully_moved = fully_moved_locals(&ssa, body); - debug!(?fully_moved); - - let mut storage_to_remove = DenseBitSet::new_empty(fully_moved.domain_size()); + let mut any_replacement = false; + let mut storage_to_remove = DenseBitSet::new_empty(body.local_decls.len()); for (local, &head) in ssa.copy_classes().iter_enumerated() { if local != head { + any_replacement = true; storage_to_remove.insert(head); } } - let any_replacement = ssa.copy_classes().iter_enumerated().any(|(l, &h)| l != h); + if !any_replacement { + return; + } + + let fully_moved = fully_moved_locals(&ssa, body); + debug!(?fully_moved); Replacer { tcx, copy_classes: ssa.copy_classes(), fully_moved, storage_to_remove } .visit_body_preserves_cfg(body); - if any_replacement { - crate::simplify::remove_unused_definitions(body); - } + crate::simplify::remove_unused_definitions(body); } fn is_required(&self) -> bool { |
