about summary refs log tree commit diff
diff options
context:
space:
mode:
authorCamille GILLOT <gillot.camille@gmail.com>2023-03-11 15:27:44 +0000
committerCamille GILLOT <gillot.camille@gmail.com>2023-07-10 16:01:18 +0000
commitb74a144a5fcee833cdcc7ae6c5937f8dbe7f2e80 (patch)
treed1539478bcb76bfe8d421da22a6c95993485aaca
parent341e0f78d1a59e8c9e92016e2ae4ebaabd291d0f (diff)
downloadrust-b74a144a5fcee833cdcc7ae6c5937f8dbe7f2e80.tar.gz
rust-b74a144a5fcee833cdcc7ae6c5937f8dbe7f2e80.zip
Enable by default.
-rw-r--r--compiler/rustc_mir_transform/src/ref_prop.rs2
-rw-r--r--tests/mir-opt/inline/unwrap_unchecked.unwrap_unchecked.Inline.panic-abort.diff11
-rw-r--r--tests/mir-opt/inline/unwrap_unchecked.unwrap_unchecked.Inline.panic-unwind.diff11
-rw-r--r--tests/mir-opt/inline/unwrap_unchecked.unwrap_unchecked.PreCodegen.after.panic-abort.mir5
-rw-r--r--tests/mir-opt/inline/unwrap_unchecked.unwrap_unchecked.PreCodegen.after.panic-unwind.mir5
-rw-r--r--tests/mir-opt/issues/issue_59352.num_to_digit.PreCodegen.after.panic-abort.mir34
-rw-r--r--tests/mir-opt/issues/issue_59352.num_to_digit.PreCodegen.after.panic-unwind.mir34
-rw-r--r--tests/mir-opt/pre-codegen/checked_ops.step_forward.PreCodegen.after.mir40
-rw-r--r--tests/mir-opt/pre-codegen/loops.filter_mapped.PreCodegen.after.mir42
-rw-r--r--tests/mir-opt/pre-codegen/loops.int_range.PreCodegen.after.mir87
-rw-r--r--tests/mir-opt/pre-codegen/mem_replace.mem_replace.PreCodegen.after.mir20
-rw-r--r--tests/mir-opt/pre-codegen/range_iter.forward_loop.PreCodegen.after.panic-abort.mir103
-rw-r--r--tests/mir-opt/pre-codegen/range_iter.forward_loop.PreCodegen.after.panic-unwind.mir103
-rw-r--r--tests/mir-opt/pre-codegen/range_iter.range_iter_next.PreCodegen.after.panic-abort.mir52
-rw-r--r--tests/mir-opt/pre-codegen/range_iter.range_iter_next.PreCodegen.after.panic-unwind.mir52
-rw-r--r--tests/mir-opt/pre-codegen/slice_filter.variant_a-{closure#0}.PreCodegen.after.mir248
-rw-r--r--tests/mir-opt/pre-codegen/slice_index.slice_get_mut_usize.PreCodegen.after.panic-abort.mir64
-rw-r--r--tests/mir-opt/pre-codegen/slice_index.slice_get_mut_usize.PreCodegen.after.panic-unwind.mir64
-rw-r--r--tests/mir-opt/pre-codegen/slice_iter.range_loop.PreCodegen.after.panic-abort.mir119
-rw-r--r--tests/mir-opt/pre-codegen/slice_iter.range_loop.PreCodegen.after.panic-unwind.mir119
-rw-r--r--tests/mir-opt/pre-codegen/slice_iter.reverse_loop.PreCodegen.after.panic-abort.mir60
-rw-r--r--tests/mir-opt/pre-codegen/slice_iter.reverse_loop.PreCodegen.after.panic-unwind.mir60
22 files changed, 574 insertions, 761 deletions
diff --git a/compiler/rustc_mir_transform/src/ref_prop.rs b/compiler/rustc_mir_transform/src/ref_prop.rs
index bbd9f76ba5c..cfbc22edf53 100644
--- a/compiler/rustc_mir_transform/src/ref_prop.rs
+++ b/compiler/rustc_mir_transform/src/ref_prop.rs
@@ -71,7 +71,7 @@ pub struct ReferencePropagation;
 
 impl<'tcx> MirPass<'tcx> for ReferencePropagation {
     fn is_enabled(&self, sess: &rustc_session::Session) -> bool {
-        sess.mir_opt_level() >= 4
+        sess.mir_opt_level() >= 2
     }
 
     #[instrument(level = "trace", skip(self, tcx, body))]
diff --git a/tests/mir-opt/inline/unwrap_unchecked.unwrap_unchecked.Inline.panic-abort.diff b/tests/mir-opt/inline/unwrap_unchecked.unwrap_unchecked.Inline.panic-abort.diff
index e3c57347392..486f276b21c 100644
--- a/tests/mir-opt/inline/unwrap_unchecked.unwrap_unchecked.Inline.panic-abort.diff
+++ b/tests/mir-opt/inline/unwrap_unchecked.unwrap_unchecked.Inline.panic-abort.diff
@@ -7,8 +7,7 @@
       let mut _2: std::option::Option<T>;
 +     scope 1 (inlined #[track_caller] Option::<T>::unwrap_unchecked) {
 +         debug self => _2;
-+         let mut _3: &std::option::Option<T>;
-+         let mut _4: isize;
++         let mut _3: isize;
 +         scope 2 {
 +             debug val => _0;
 +         }
@@ -21,7 +20,7 @@
 +             }
 +         }
 +         scope 4 (inlined Option::<T>::is_some) {
-+             debug self => _3;
++             debug self => &_2;
 +         }
 +     }
   
@@ -29,9 +28,8 @@
           StorageLive(_2);
           _2 = move _1;
 -         _0 = Option::<T>::unwrap_unchecked(move _2) -> [return: bb1, unwind unreachable];
-+         StorageLive(_3);
-+         _4 = discriminant(_2);
-+         switchInt(move _4) -> [1: bb2, otherwise: bb1];
++         _3 = discriminant(_2);
++         switchInt(move _3) -> [1: bb2, otherwise: bb1];
       }
   
       bb1: {
@@ -40,7 +38,6 @@
 + 
 +     bb2: {
 +         _0 = move ((_2 as Some).0: T);
-+         StorageDead(_3);
           StorageDead(_2);
           return;
       }
diff --git a/tests/mir-opt/inline/unwrap_unchecked.unwrap_unchecked.Inline.panic-unwind.diff b/tests/mir-opt/inline/unwrap_unchecked.unwrap_unchecked.Inline.panic-unwind.diff
index fc638cb3ace..1c3aa537946 100644
--- a/tests/mir-opt/inline/unwrap_unchecked.unwrap_unchecked.Inline.panic-unwind.diff
+++ b/tests/mir-opt/inline/unwrap_unchecked.unwrap_unchecked.Inline.panic-unwind.diff
@@ -7,8 +7,7 @@
       let mut _2: std::option::Option<T>;
 +     scope 1 (inlined #[track_caller] Option::<T>::unwrap_unchecked) {
 +         debug self => _2;
-+         let mut _3: &std::option::Option<T>;
-+         let mut _4: isize;
++         let mut _3: isize;
 +         scope 2 {
 +             debug val => _0;
 +         }
@@ -21,7 +20,7 @@
 +             }
 +         }
 +         scope 4 (inlined Option::<T>::is_some) {
-+             debug self => _3;
++             debug self => &_2;
 +         }
 +     }
   
@@ -29,9 +28,8 @@
           StorageLive(_2);
           _2 = move _1;
 -         _0 = Option::<T>::unwrap_unchecked(move _2) -> [return: bb1, unwind: bb2];
-+         StorageLive(_3);
-+         _4 = discriminant(_2);
-+         switchInt(move _4) -> [1: bb2, otherwise: bb1];
++         _3 = discriminant(_2);
++         switchInt(move _3) -> [1: bb2, otherwise: bb1];
       }
   
       bb1: {
@@ -44,7 +42,6 @@
 -         resume;
 +     bb2: {
 +         _0 = move ((_2 as Some).0: T);
-+         StorageDead(_3);
 +         StorageDead(_2);
 +         return;
       }
diff --git a/tests/mir-opt/inline/unwrap_unchecked.unwrap_unchecked.PreCodegen.after.panic-abort.mir b/tests/mir-opt/inline/unwrap_unchecked.unwrap_unchecked.PreCodegen.after.panic-abort.mir
index fcc4d43ced6..82238626798 100644
--- a/tests/mir-opt/inline/unwrap_unchecked.unwrap_unchecked.PreCodegen.after.panic-abort.mir
+++ b/tests/mir-opt/inline/unwrap_unchecked.unwrap_unchecked.PreCodegen.after.panic-abort.mir
@@ -6,7 +6,6 @@ fn unwrap_unchecked(_1: Option<T>) -> T {
     scope 1 (inlined #[track_caller] Option::<T>::unwrap_unchecked) {
         debug self => _1;
         let mut _2: isize;
-        let mut _3: &std::option::Option<T>;
         scope 2 {
             debug val => _0;
         }
@@ -19,19 +18,17 @@ fn unwrap_unchecked(_1: Option<T>) -> T {
             }
         }
         scope 4 (inlined Option::<T>::is_some) {
-            debug self => _3;
+            debug self => &_1;
         }
     }
 
     bb0: {
-        StorageLive(_3);
         _2 = discriminant(_1);
         switchInt(move _2) -> [1: bb1, otherwise: bb2];
     }
 
     bb1: {
         _0 = move ((_1 as Some).0: T);
-        StorageDead(_3);
         return;
     }
 
diff --git a/tests/mir-opt/inline/unwrap_unchecked.unwrap_unchecked.PreCodegen.after.panic-unwind.mir b/tests/mir-opt/inline/unwrap_unchecked.unwrap_unchecked.PreCodegen.after.panic-unwind.mir
index fcc4d43ced6..82238626798 100644
--- a/tests/mir-opt/inline/unwrap_unchecked.unwrap_unchecked.PreCodegen.after.panic-unwind.mir
+++ b/tests/mir-opt/inline/unwrap_unchecked.unwrap_unchecked.PreCodegen.after.panic-unwind.mir
@@ -6,7 +6,6 @@ fn unwrap_unchecked(_1: Option<T>) -> T {
     scope 1 (inlined #[track_caller] Option::<T>::unwrap_unchecked) {
         debug self => _1;
         let mut _2: isize;
-        let mut _3: &std::option::Option<T>;
         scope 2 {
             debug val => _0;
         }
@@ -19,19 +18,17 @@ fn unwrap_unchecked(_1: Option<T>) -> T {
             }
         }
         scope 4 (inlined Option::<T>::is_some) {
-            debug self => _3;
+            debug self => &_1;
         }
     }
 
     bb0: {
-        StorageLive(_3);
         _2 = discriminant(_1);
         switchInt(move _2) -> [1: bb1, otherwise: bb2];
     }
 
     bb1: {
         _0 = move ((_1 as Some).0: T);
-        StorageDead(_3);
         return;
     }
 
diff --git a/tests/mir-opt/issues/issue_59352.num_to_digit.PreCodegen.after.panic-abort.mir b/tests/mir-opt/issues/issue_59352.num_to_digit.PreCodegen.after.panic-abort.mir
index 787f9ee095f..9743e192462 100644
--- a/tests/mir-opt/issues/issue_59352.num_to_digit.PreCodegen.after.panic-abort.mir
+++ b/tests/mir-opt/issues/issue_59352.num_to_digit.PreCodegen.after.panic-abort.mir
@@ -3,57 +3,53 @@
 fn num_to_digit(_1: char) -> u32 {
     debug num => _1;
     let mut _0: u32;
-    let mut _5: std::option::Option<u32>;
+    let mut _4: std::option::Option<u32>;
     scope 1 (inlined char::methods::<impl char>::is_digit) {
         debug self => _1;
         debug radix => const 8_u32;
         let _2: std::option::Option<u32>;
-        let mut _3: &std::option::Option<u32>;
         scope 2 (inlined Option::<u32>::is_some) {
-            debug self => _3;
-            let mut _4: isize;
+            debug self => &_2;
+            let mut _3: isize;
         }
     }
     scope 3 (inlined #[track_caller] Option::<u32>::unwrap) {
-        debug self => _5;
-        let mut _6: isize;
-        let mut _7: !;
+        debug self => _4;
+        let mut _5: isize;
+        let mut _6: !;
         scope 4 {
             debug val => _0;
         }
     }
 
     bb0: {
-        StorageLive(_3);
         StorageLive(_2);
         _2 = char::methods::<impl char>::to_digit(_1, const 8_u32) -> [return: bb1, unwind unreachable];
     }
 
     bb1: {
-        _3 = &_2;
-        _4 = discriminant((*_3));
-        StorageDead(_3);
+        _3 = discriminant(_2);
         StorageDead(_2);
-        switchInt(move _4) -> [1: bb2, otherwise: bb7];
+        switchInt(move _3) -> [1: bb2, otherwise: bb7];
     }
 
     bb2: {
-        StorageLive(_5);
-        _5 = char::methods::<impl char>::to_digit(_1, const 8_u32) -> [return: bb3, unwind unreachable];
+        StorageLive(_4);
+        _4 = char::methods::<impl char>::to_digit(_1, const 8_u32) -> [return: bb3, unwind unreachable];
     }
 
     bb3: {
-        _6 = discriminant(_5);
-        switchInt(move _6) -> [0: bb4, 1: bb5, otherwise: bb6];
+        _5 = discriminant(_4);
+        switchInt(move _5) -> [0: bb4, 1: bb5, otherwise: bb6];
     }
 
     bb4: {
-        _7 = core::panicking::panic(const "called `Option::unwrap()` on a `None` value") -> unwind unreachable;
+        _6 = core::panicking::panic(const "called `Option::unwrap()` on a `None` value") -> unwind unreachable;
     }
 
     bb5: {
-        _0 = move ((_5 as Some).0: u32);
-        StorageDead(_5);
+        _0 = move ((_4 as Some).0: u32);
+        StorageDead(_4);
         goto -> bb8;
     }
 
diff --git a/tests/mir-opt/issues/issue_59352.num_to_digit.PreCodegen.after.panic-unwind.mir b/tests/mir-opt/issues/issue_59352.num_to_digit.PreCodegen.after.panic-unwind.mir
index 43a1a1eed20..e89d6eb4d50 100644
--- a/tests/mir-opt/issues/issue_59352.num_to_digit.PreCodegen.after.panic-unwind.mir
+++ b/tests/mir-opt/issues/issue_59352.num_to_digit.PreCodegen.after.panic-unwind.mir
@@ -3,57 +3,53 @@
 fn num_to_digit(_1: char) -> u32 {
     debug num => _1;
     let mut _0: u32;
-    let mut _5: std::option::Option<u32>;
+    let mut _4: std::option::Option<u32>;
     scope 1 (inlined char::methods::<impl char>::is_digit) {
         debug self => _1;
         debug radix => const 8_u32;
         let _2: std::option::Option<u32>;
-        let mut _3: &std::option::Option<u32>;
         scope 2 (inlined Option::<u32>::is_some) {
-            debug self => _3;
-            let mut _4: isize;
+            debug self => &_2;
+            let mut _3: isize;
         }
     }
     scope 3 (inlined #[track_caller] Option::<u32>::unwrap) {
-        debug self => _5;
-        let mut _6: isize;
-        let mut _7: !;
+        debug self => _4;
+        let mut _5: isize;
+        let mut _6: !;
         scope 4 {
             debug val => _0;
         }
     }
 
     bb0: {
-        StorageLive(_3);
         StorageLive(_2);
         _2 = char::methods::<impl char>::to_digit(_1, const 8_u32) -> [return: bb1, unwind continue];
     }
 
     bb1: {
-        _3 = &_2;
-        _4 = discriminant((*_3));
-        StorageDead(_3);
+        _3 = discriminant(_2);
         StorageDead(_2);
-        switchInt(move _4) -> [1: bb2, otherwise: bb7];
+        switchInt(move _3) -> [1: bb2, otherwise: bb7];
     }
 
     bb2: {
-        StorageLive(_5);
-        _5 = char::methods::<impl char>::to_digit(_1, const 8_u32) -> [return: bb3, unwind continue];
+        StorageLive(_4);
+        _4 = char::methods::<impl char>::to_digit(_1, const 8_u32) -> [return: bb3, unwind continue];
     }
 
     bb3: {
-        _6 = discriminant(_5);
-        switchInt(move _6) -> [0: bb4, 1: bb5, otherwise: bb6];
+        _5 = discriminant(_4);
+        switchInt(move _5) -> [0: bb4, 1: bb5, otherwise: bb6];
     }
 
     bb4: {
-        _7 = core::panicking::panic(const "called `Option::unwrap()` on a `None` value") -> unwind continue;
+        _6 = core::panicking::panic(const "called `Option::unwrap()` on a `None` value") -> unwind continue;
     }
 
     bb5: {
-        _0 = move ((_5 as Some).0: u32);
-        StorageDead(_5);
+        _0 = move ((_4 as Some).0: u32);
+        StorageDead(_4);
         goto -> bb8;
     }
 
diff --git a/tests/mir-opt/pre-codegen/checked_ops.step_forward.PreCodegen.after.mir b/tests/mir-opt/pre-codegen/checked_ops.step_forward.PreCodegen.after.mir
index 98c267e8e71..9be41bff3ca 100644
--- a/tests/mir-opt/pre-codegen/checked_ops.step_forward.PreCodegen.after.mir
+++ b/tests/mir-opt/pre-codegen/checked_ops.step_forward.PreCodegen.after.mir
@@ -8,42 +8,38 @@ fn step_forward(_1: u32, _2: usize) -> u32 {
         debug start => _1;
         debug n => _2;
         let _3: std::option::Option<u32>;
-        let mut _4: &std::option::Option<u32>;
-        let mut _7: bool;
-        let mut _8: u32;
+        let mut _6: bool;
+        let mut _7: u32;
         scope 2 {
         }
         scope 3 (inlined Option::<u32>::is_none) {
-            debug self => _4;
-            let mut _6: bool;
+            debug self => &_3;
+            let mut _5: bool;
             scope 4 (inlined Option::<u32>::is_some) {
-                debug self => _4;
-                let mut _5: isize;
+                debug self => &_3;
+                let mut _4: isize;
             }
         }
         scope 5 (inlined core::num::<impl u32>::wrapping_add) {
             debug self => _1;
-            debug rhs => _8;
+            debug rhs => _7;
         }
     }
 
     bb0: {
-        StorageLive(_7);
-        StorageLive(_4);
+        StorageLive(_6);
         StorageLive(_3);
         _3 = <u32 as Step>::forward_checked(_1, _2) -> [return: bb1, unwind continue];
     }
 
     bb1: {
-        _4 = &_3;
-        StorageLive(_6);
-        _5 = discriminant((*_4));
-        _6 = Eq(_5, const 1_isize);
-        _7 = Not(move _6);
-        StorageDead(_6);
+        StorageLive(_5);
+        _4 = discriminant(_3);
+        _5 = Eq(_4, const 1_isize);
+        _6 = Not(move _5);
+        StorageDead(_5);
         StorageDead(_3);
-        StorageDead(_4);
-        switchInt(move _7) -> [0: bb3, otherwise: bb2];
+        switchInt(move _6) -> [0: bb3, otherwise: bb2];
     }
 
     bb2: {
@@ -51,11 +47,11 @@ fn step_forward(_1: u32, _2: usize) -> u32 {
     }
 
     bb3: {
+        StorageDead(_6);
+        StorageLive(_7);
+        _7 = _2 as u32 (IntToInt);
+        _0 = Add(_1, _7);
         StorageDead(_7);
-        StorageLive(_8);
-        _8 = _2 as u32 (IntToInt);
-        _0 = Add(_1, _8);
-        StorageDead(_8);
         return;
     }
 }
diff --git a/tests/mir-opt/pre-codegen/loops.filter_mapped.PreCodegen.after.mir b/tests/mir-opt/pre-codegen/loops.filter_mapped.PreCodegen.after.mir
index 3b49cb711b7..07a57a7b578 100644
--- a/tests/mir-opt/pre-codegen/loops.filter_mapped.PreCodegen.after.mir
+++ b/tests/mir-opt/pre-codegen/loops.filter_mapped.PreCodegen.after.mir
@@ -7,20 +7,19 @@ fn filter_mapped(_1: impl Iterator<Item = T>, _2: impl Fn(T) -> Option<U>) -> ()
     let mut _3: std::iter::FilterMap<impl Iterator<Item = T>, impl Fn(T) -> Option<U>>;
     let mut _4: std::iter::FilterMap<impl Iterator<Item = T>, impl Fn(T) -> Option<U>>;
     let mut _5: std::iter::FilterMap<impl Iterator<Item = T>, impl Fn(T) -> Option<U>>;
-    let mut _6: &mut std::iter::FilterMap<impl Iterator<Item = T>, impl Fn(T) -> Option<U>>;
-    let mut _9: std::option::Option<U>;
-    let mut _10: isize;
-    let _12: ();
+    let mut _8: std::option::Option<U>;
+    let mut _9: isize;
+    let _11: ();
     scope 1 {
         debug iter => _5;
-        let _11: U;
+        let _10: U;
         scope 2 {
-            debug x => _11;
+            debug x => _10;
         }
         scope 4 (inlined <FilterMap<impl Iterator<Item = T>, impl Fn(T) -> Option<U>> as Iterator>::next) {
-            debug self => _6;
-            let mut _7: &mut impl Iterator<Item = T>;
-            let mut _8: &mut impl Fn(T) -> Option<U>;
+            debug self => &_5;
+            let mut _6: &mut impl Iterator<Item = T>;
+            let mut _7: &mut impl Fn(T) -> Option<U>;
         }
     }
     scope 3 (inlined <FilterMap<impl Iterator<Item = T>, impl Fn(T) -> Option<U>> as IntoIterator>::into_iter) {
@@ -42,24 +41,23 @@ fn filter_mapped(_1: impl Iterator<Item = T>, _2: impl Fn(T) -> Option<U>) -> ()
     }
 
     bb2: {
-        StorageLive(_9);
-        _6 = &mut _5;
-        StorageLive(_7);
-        _7 = &mut ((*_6).0: impl Iterator<Item = T>);
         StorageLive(_8);
-        _8 = &mut ((*_6).1: impl Fn(T) -> Option<U>);
-        _9 = <impl Iterator<Item = T> as Iterator>::find_map::<U, &mut impl Fn(T) -> Option<U>>(move _7, move _8) -> [return: bb3, unwind: bb9];
+        StorageLive(_6);
+        _6 = &mut (_5.0: impl Iterator<Item = T>);
+        StorageLive(_7);
+        _7 = &mut (_5.1: impl Fn(T) -> Option<U>);
+        _8 = <impl Iterator<Item = T> as Iterator>::find_map::<U, &mut impl Fn(T) -> Option<U>>(move _6, move _7) -> [return: bb3, unwind: bb9];
     }
 
     bb3: {
-        StorageDead(_8);
         StorageDead(_7);
-        _10 = discriminant(_9);
-        switchInt(move _10) -> [0: bb4, 1: bb6, otherwise: bb8];
+        StorageDead(_6);
+        _9 = discriminant(_8);
+        switchInt(move _9) -> [0: bb4, 1: bb6, otherwise: bb8];
     }
 
     bb4: {
-        StorageDead(_9);
+        StorageDead(_8);
         drop(_5) -> [return: bb5, unwind continue];
     }
 
@@ -70,12 +68,12 @@ fn filter_mapped(_1: impl Iterator<Item = T>, _2: impl Fn(T) -> Option<U>) -> ()
     }
 
     bb6: {
-        _11 = move ((_9 as Some).0: U);
-        _12 = opaque::<U>(move _11) -> [return: bb7, unwind: bb9];
+        _10 = move ((_8 as Some).0: U);
+        _11 = opaque::<U>(move _10) -> [return: bb7, unwind: bb9];
     }
 
     bb7: {
-        StorageDead(_9);
+        StorageDead(_8);
         goto -> bb2;
     }
 
diff --git a/tests/mir-opt/pre-codegen/loops.int_range.PreCodegen.after.mir b/tests/mir-opt/pre-codegen/loops.int_range.PreCodegen.after.mir
index 40bb3a37c58..b696585b233 100644
--- a/tests/mir-opt/pre-codegen/loops.int_range.PreCodegen.after.mir
+++ b/tests/mir-opt/pre-codegen/loops.int_range.PreCodegen.after.mir
@@ -6,35 +6,33 @@ fn int_range(_1: usize, _2: usize) -> () {
     let mut _0: ();
     let mut _3: std::ops::Range<usize>;
     let mut _4: std::ops::Range<usize>;
-    let mut _5: &mut std::ops::Range<usize>;
-    let mut _11: std::option::Option<usize>;
-    let mut _14: isize;
-    let _16: ();
+    let mut _8: std::option::Option<usize>;
+    let mut _11: isize;
+    let _13: ();
+    let mut _14: &mut std::ops::Range<usize>;
     scope 1 {
         debug iter => _4;
-        let _15: usize;
+        let _12: usize;
         scope 2 {
-            debug i => _15;
+            debug i => _12;
         }
         scope 4 (inlined iter::range::<impl Iterator for std::ops::Range<usize>>::next) {
-            debug self => _5;
+            debug self => &_4;
             scope 5 (inlined <std::ops::Range<usize> as iter::range::RangeIteratorImpl>::spec_next) {
-                debug self => _5;
-                let mut _6: &usize;
-                let mut _7: &usize;
-                let mut _10: bool;
-                let _12: usize;
-                let mut _13: usize;
+                debug self => &_4;
+                let mut _7: bool;
+                let _9: usize;
+                let mut _10: usize;
                 scope 6 {
-                    debug old => _12;
+                    debug old => _9;
                     scope 7 {
                     }
                 }
                 scope 8 (inlined cmp::impls::<impl PartialOrd for usize>::lt) {
-                    debug self => _6;
-                    debug other => _7;
-                    let mut _8: usize;
-                    let mut _9: usize;
+                    debug self => &((*_14).0: usize);
+                    debug other => &((*_14).1: usize);
+                    let mut _5: usize;
+                    let mut _6: usize;
                 }
             }
         }
@@ -51,64 +49,57 @@ fn int_range(_1: usize, _2: usize) -> () {
     }
 
     bb1: {
-        StorageLive(_11);
-        _5 = &mut _4;
-        StorageLive(_12);
-        StorageLive(_10);
-        StorageLive(_6);
-        _6 = &((*_5).0: usize);
-        StorageLive(_7);
-        _7 = &((*_5).1: usize);
         StorageLive(_8);
-        _8 = (*_6);
         StorageLive(_9);
-        _9 = (*_7);
-        _10 = Lt(move _8, move _9);
-        StorageDead(_9);
-        StorageDead(_8);
-        StorageDead(_7);
+        StorageLive(_7);
+        StorageLive(_5);
+        _5 = (_4.0: usize);
+        StorageLive(_6);
+        _6 = (_4.1: usize);
+        _7 = Lt(move _5, move _6);
         StorageDead(_6);
-        switchInt(move _10) -> [0: bb2, otherwise: bb3];
+        StorageDead(_5);
+        switchInt(move _7) -> [0: bb2, otherwise: bb3];
     }
 
     bb2: {
-        _11 = Option::<usize>::None;
+        _8 = Option::<usize>::None;
         goto -> bb5;
     }
 
     bb3: {
-        _12 = ((*_5).0: usize);
-        StorageLive(_13);
-        _13 = <usize as Step>::forward_unchecked(_12, const 1_usize) -> [return: bb4, unwind continue];
+        _9 = (_4.0: usize);
+        StorageLive(_10);
+        _10 = <usize as Step>::forward_unchecked(_9, const 1_usize) -> [return: bb4, unwind continue];
     }
 
     bb4: {
-        ((*_5).0: usize) = move _13;
-        StorageDead(_13);
-        _11 = Option::<usize>::Some(_12);
+        (_4.0: usize) = move _10;
+        StorageDead(_10);
+        _8 = Option::<usize>::Some(_9);
         goto -> bb5;
     }
 
     bb5: {
-        StorageDead(_10);
-        StorageDead(_12);
-        _14 = discriminant(_11);
-        switchInt(move _14) -> [0: bb6, 1: bb7, otherwise: bb9];
+        StorageDead(_7);
+        StorageDead(_9);
+        _11 = discriminant(_8);
+        switchInt(move _11) -> [0: bb6, 1: bb7, otherwise: bb9];
     }
 
     bb6: {
-        StorageDead(_11);
+        StorageDead(_8);
         StorageDead(_4);
         return;
     }
 
     bb7: {
-        _15 = ((_11 as Some).0: usize);
-        _16 = opaque::<usize>(_15) -> [return: bb8, unwind continue];
+        _12 = ((_8 as Some).0: usize);
+        _13 = opaque::<usize>(_12) -> [return: bb8, unwind continue];
     }
 
     bb8: {
-        StorageDead(_11);
+        StorageDead(_8);
         goto -> bb1;
     }
 
diff --git a/tests/mir-opt/pre-codegen/mem_replace.mem_replace.PreCodegen.after.mir b/tests/mir-opt/pre-codegen/mem_replace.mem_replace.PreCodegen.after.mir
index dde7a618881..eeb2e3a1b03 100644
--- a/tests/mir-opt/pre-codegen/mem_replace.mem_replace.PreCodegen.after.mir
+++ b/tests/mir-opt/pre-codegen/mem_replace.mem_replace.PreCodegen.after.mir
@@ -7,26 +7,24 @@ fn mem_replace(_1: &mut u32, _2: u32) -> u32 {
     scope 1 (inlined std::mem::replace::<u32>) {
         debug dest => _1;
         debug src => _2;
-        let mut _3: *const u32;
-        let mut _4: *mut u32;
         scope 2 {
             scope 3 {
                 debug result => _0;
                 scope 7 (inlined std::ptr::write::<u32>) {
-                    debug dst => _4;
+                    debug dst => _1;
                     debug src => _2;
                     scope 8 {
                         scope 9 (inlined std::ptr::write::runtime::<u32>) {
-                            debug dst => _4;
+                            debug dst => _1;
                         }
                     }
                 }
             }
             scope 4 (inlined std::ptr::read::<u32>) {
-                debug src => _3;
+                debug src => _1;
                 scope 5 {
                     scope 6 (inlined std::ptr::read::runtime::<u32>) {
-                        debug src => _3;
+                        debug src => _1;
                     }
                 }
             }
@@ -34,14 +32,8 @@ fn mem_replace(_1: &mut u32, _2: u32) -> u32 {
     }
 
     bb0: {
-        StorageLive(_3);
-        _3 = &raw const (*_1);
-        _0 = (*_3);
-        StorageDead(_3);
-        StorageLive(_4);
-        _4 = &raw mut (*_1);
-        (*_4) = _2;
-        StorageDead(_4);
+        _0 = (*_1);
+        (*_1) = _2;
         return;
     }
 }
diff --git a/tests/mir-opt/pre-codegen/range_iter.forward_loop.PreCodegen.after.panic-abort.mir b/tests/mir-opt/pre-codegen/range_iter.forward_loop.PreCodegen.after.panic-abort.mir
index 2344a3c0f83..4c109544d22 100644
--- a/tests/mir-opt/pre-codegen/range_iter.forward_loop.PreCodegen.after.panic-abort.mir
+++ b/tests/mir-opt/pre-codegen/range_iter.forward_loop.PreCodegen.after.panic-abort.mir
@@ -7,37 +7,35 @@ fn forward_loop(_1: u32, _2: u32, _3: impl Fn(u32)) -> () {
     let mut _0: ();
     let mut _4: std::ops::Range<u32>;
     let mut _5: std::ops::Range<u32>;
-    let mut _6: &mut std::ops::Range<u32>;
-    let mut _12: std::option::Option<u32>;
-    let mut _15: isize;
-    let mut _17: &impl Fn(u32);
-    let mut _18: (u32,);
-    let _19: ();
+    let mut _9: std::option::Option<u32>;
+    let mut _12: isize;
+    let mut _14: &impl Fn(u32);
+    let mut _15: (u32,);
+    let _16: ();
+    let mut _17: &mut std::ops::Range<u32>;
     scope 1 {
         debug iter => _5;
-        let _16: u32;
+        let _13: u32;
         scope 2 {
-            debug x => _16;
+            debug x => _13;
         }
         scope 4 (inlined iter::range::<impl Iterator for std::ops::Range<u32>>::next) {
-            debug self => _6;
+            debug self => &_5;
             scope 5 (inlined <std::ops::Range<u32> as iter::range::RangeIteratorImpl>::spec_next) {
-                debug self => _6;
-                let mut _7: &u32;
-                let mut _8: &u32;
-                let mut _11: bool;
-                let _13: u32;
-                let mut _14: u32;
+                debug self => &_5;
+                let mut _8: bool;
+                let _10: u32;
+                let mut _11: u32;
                 scope 6 {
-                    debug old => _13;
+                    debug old => _10;
                     scope 7 {
                     }
                 }
                 scope 8 (inlined cmp::impls::<impl PartialOrd for u32>::lt) {
-                    debug self => _7;
-                    debug other => _8;
-                    let mut _9: u32;
-                    let mut _10: u32;
+                    debug self => &((*_17).0: u32);
+                    debug other => &((*_17).1: u32);
+                    let mut _6: u32;
+                    let mut _7: u32;
                 }
             }
         }
@@ -54,53 +52,46 @@ fn forward_loop(_1: u32, _2: u32, _3: impl Fn(u32)) -> () {
     }
 
     bb1: {
-        StorageLive(_12);
-        _6 = &mut _5;
-        StorageLive(_13);
-        StorageLive(_11);
-        StorageLive(_7);
-        _7 = &((*_6).0: u32);
-        StorageLive(_8);
-        _8 = &((*_6).1: u32);
         StorageLive(_9);
-        _9 = (*_7);
         StorageLive(_10);
-        _10 = (*_8);
-        _11 = Lt(move _9, move _10);
-        StorageDead(_10);
-        StorageDead(_9);
-        StorageDead(_8);
+        StorageLive(_8);
+        StorageLive(_6);
+        _6 = (_5.0: u32);
+        StorageLive(_7);
+        _7 = (_5.1: u32);
+        _8 = Lt(move _6, move _7);
         StorageDead(_7);
-        switchInt(move _11) -> [0: bb2, otherwise: bb3];
+        StorageDead(_6);
+        switchInt(move _8) -> [0: bb2, otherwise: bb3];
     }
 
     bb2: {
-        _12 = Option::<u32>::None;
+        _9 = Option::<u32>::None;
         goto -> bb5;
     }
 
     bb3: {
-        _13 = ((*_6).0: u32);
-        StorageLive(_14);
-        _14 = <u32 as Step>::forward_unchecked(_13, const 1_usize) -> [return: bb4, unwind unreachable];
+        _10 = (_5.0: u32);
+        StorageLive(_11);
+        _11 = <u32 as Step>::forward_unchecked(_10, const 1_usize) -> [return: bb4, unwind unreachable];
     }
 
     bb4: {
-        ((*_6).0: u32) = move _14;
-        StorageDead(_14);
-        _12 = Option::<u32>::Some(_13);
+        (_5.0: u32) = move _11;
+        StorageDead(_11);
+        _9 = Option::<u32>::Some(_10);
         goto -> bb5;
     }
 
     bb5: {
-        StorageDead(_11);
-        StorageDead(_13);
-        _15 = discriminant(_12);
-        switchInt(move _15) -> [0: bb6, 1: bb8, otherwise: bb10];
+        StorageDead(_8);
+        StorageDead(_10);
+        _12 = discriminant(_9);
+        switchInt(move _12) -> [0: bb6, 1: bb8, otherwise: bb10];
     }
 
     bb6: {
-        StorageDead(_12);
+        StorageDead(_9);
         StorageDead(_5);
         drop(_3) -> [return: bb7, unwind unreachable];
     }
@@ -110,18 +101,18 @@ fn forward_loop(_1: u32, _2: u32, _3: impl Fn(u32)) -> () {
     }
 
     bb8: {
-        _16 = ((_12 as Some).0: u32);
-        StorageLive(_17);
-        _17 = &_3;
-        StorageLive(_18);
-        _18 = (_16,);
-        _19 = <impl Fn(u32) as Fn<(u32,)>>::call(move _17, move _18) -> [return: bb9, unwind unreachable];
+        _13 = ((_9 as Some).0: u32);
+        StorageLive(_14);
+        _14 = &_3;
+        StorageLive(_15);
+        _15 = (_13,);
+        _16 = <impl Fn(u32) as Fn<(u32,)>>::call(move _14, move _15) -> [return: bb9, unwind unreachable];
     }
 
     bb9: {
-        StorageDead(_18);
-        StorageDead(_17);
-        StorageDead(_12);
+        StorageDead(_15);
+        StorageDead(_14);
+        StorageDead(_9);
         goto -> bb1;
     }
 
diff --git a/tests/mir-opt/pre-codegen/range_iter.forward_loop.PreCodegen.after.panic-unwind.mir b/tests/mir-opt/pre-codegen/range_iter.forward_loop.PreCodegen.after.panic-unwind.mir
index fbe16dc3cd4..d81c8487812 100644
--- a/tests/mir-opt/pre-codegen/range_iter.forward_loop.PreCodegen.after.panic-unwind.mir
+++ b/tests/mir-opt/pre-codegen/range_iter.forward_loop.PreCodegen.after.panic-unwind.mir
@@ -7,37 +7,35 @@ fn forward_loop(_1: u32, _2: u32, _3: impl Fn(u32)) -> () {
     let mut _0: ();
     let mut _4: std::ops::Range<u32>;
     let mut _5: std::ops::Range<u32>;
-    let mut _6: &mut std::ops::Range<u32>;
-    let mut _12: std::option::Option<u32>;
-    let mut _15: isize;
-    let mut _17: &impl Fn(u32);
-    let mut _18: (u32,);
-    let _19: ();
+    let mut _9: std::option::Option<u32>;
+    let mut _12: isize;
+    let mut _14: &impl Fn(u32);
+    let mut _15: (u32,);
+    let _16: ();
+    let mut _17: &mut std::ops::Range<u32>;
     scope 1 {
         debug iter => _5;
-        let _16: u32;
+        let _13: u32;
         scope 2 {
-            debug x => _16;
+            debug x => _13;
         }
         scope 4 (inlined iter::range::<impl Iterator for std::ops::Range<u32>>::next) {
-            debug self => _6;
+            debug self => &_5;
             scope 5 (inlined <std::ops::Range<u32> as iter::range::RangeIteratorImpl>::spec_next) {
-                debug self => _6;
-                let mut _7: &u32;
-                let mut _8: &u32;
-                let mut _11: bool;
-                let _13: u32;
-                let mut _14: u32;
+                debug self => &_5;
+                let mut _8: bool;
+                let _10: u32;
+                let mut _11: u32;
                 scope 6 {
-                    debug old => _13;
+                    debug old => _10;
                     scope 7 {
                     }
                 }
                 scope 8 (inlined cmp::impls::<impl PartialOrd for u32>::lt) {
-                    debug self => _7;
-                    debug other => _8;
-                    let mut _9: u32;
-                    let mut _10: u32;
+                    debug self => &((*_17).0: u32);
+                    debug other => &((*_17).1: u32);
+                    let mut _6: u32;
+                    let mut _7: u32;
                 }
             }
         }
@@ -54,53 +52,46 @@ fn forward_loop(_1: u32, _2: u32, _3: impl Fn(u32)) -> () {
     }
 
     bb1: {
-        StorageLive(_12);
-        _6 = &mut _5;
-        StorageLive(_13);
-        StorageLive(_11);
-        StorageLive(_7);
-        _7 = &((*_6).0: u32);
-        StorageLive(_8);
-        _8 = &((*_6).1: u32);
         StorageLive(_9);
-        _9 = (*_7);
         StorageLive(_10);
-        _10 = (*_8);
-        _11 = Lt(move _9, move _10);
-        StorageDead(_10);
-        StorageDead(_9);
-        StorageDead(_8);
+        StorageLive(_8);
+        StorageLive(_6);
+        _6 = (_5.0: u32);
+        StorageLive(_7);
+        _7 = (_5.1: u32);
+        _8 = Lt(move _6, move _7);
         StorageDead(_7);
-        switchInt(move _11) -> [0: bb2, otherwise: bb3];
+        StorageDead(_6);
+        switchInt(move _8) -> [0: bb2, otherwise: bb3];
     }
 
     bb2: {
-        _12 = Option::<u32>::None;
+        _9 = Option::<u32>::None;
         goto -> bb5;
     }
 
     bb3: {
-        _13 = ((*_6).0: u32);
-        StorageLive(_14);
-        _14 = <u32 as Step>::forward_unchecked(_13, const 1_usize) -> [return: bb4, unwind: bb11];
+        _10 = (_5.0: u32);
+        StorageLive(_11);
+        _11 = <u32 as Step>::forward_unchecked(_10, const 1_usize) -> [return: bb4, unwind: bb11];
     }
 
     bb4: {
-        ((*_6).0: u32) = move _14;
-        StorageDead(_14);
-        _12 = Option::<u32>::Some(_13);
+        (_5.0: u32) = move _11;
+        StorageDead(_11);
+        _9 = Option::<u32>::Some(_10);
         goto -> bb5;
     }
 
     bb5: {
-        StorageDead(_11);
-        StorageDead(_13);
-        _15 = discriminant(_12);
-        switchInt(move _15) -> [0: bb6, 1: bb8, otherwise: bb10];
+        StorageDead(_8);
+        StorageDead(_10);
+        _12 = discriminant(_9);
+        switchInt(move _12) -> [0: bb6, 1: bb8, otherwise: bb10];
     }
 
     bb6: {
-        StorageDead(_12);
+        StorageDead(_9);
         StorageDead(_5);
         drop(_3) -> [return: bb7, unwind continue];
     }
@@ -110,18 +101,18 @@ fn forward_loop(_1: u32, _2: u32, _3: impl Fn(u32)) -> () {
     }
 
     bb8: {
-        _16 = ((_12 as Some).0: u32);
-        StorageLive(_17);
-        _17 = &_3;
-        StorageLive(_18);
-        _18 = (_16,);
-        _19 = <impl Fn(u32) as Fn<(u32,)>>::call(move _17, move _18) -> [return: bb9, unwind: bb11];
+        _13 = ((_9 as Some).0: u32);
+        StorageLive(_14);
+        _14 = &_3;
+        StorageLive(_15);
+        _15 = (_13,);
+        _16 = <impl Fn(u32) as Fn<(u32,)>>::call(move _14, move _15) -> [return: bb9, unwind: bb11];
     }
 
     bb9: {
-        StorageDead(_18);
-        StorageDead(_17);
-        StorageDead(_12);
+        StorageDead(_15);
+        StorageDead(_14);
+        StorageDead(_9);
         goto -> bb1;
     }
 
diff --git a/tests/mir-opt/pre-codegen/range_iter.range_iter_next.PreCodegen.after.panic-abort.mir b/tests/mir-opt/pre-codegen/range_iter.range_iter_next.PreCodegen.after.panic-abort.mir
index 1dfd00bf314..14fd049ede8 100644
--- a/tests/mir-opt/pre-codegen/range_iter.range_iter_next.PreCodegen.after.panic-abort.mir
+++ b/tests/mir-opt/pre-codegen/range_iter.range_iter_next.PreCodegen.after.panic-abort.mir
@@ -7,42 +7,34 @@ fn range_iter_next(_1: &mut std::ops::Range<u32>) -> Option<u32> {
         debug self => _1;
         scope 2 (inlined <std::ops::Range<u32> as iter::range::RangeIteratorImpl>::spec_next) {
             debug self => _1;
-            let mut _2: &u32;
-            let mut _3: &u32;
-            let mut _6: bool;
-            let _7: u32;
-            let mut _8: u32;
+            let mut _4: bool;
+            let _5: u32;
+            let mut _6: u32;
             scope 3 {
-                debug old => _7;
+                debug old => _5;
                 scope 4 {
                 }
             }
             scope 5 (inlined cmp::impls::<impl PartialOrd for u32>::lt) {
-                debug self => _2;
-                debug other => _3;
-                let mut _4: u32;
-                let mut _5: u32;
+                debug self => &((*_1).0: u32);
+                debug other => &((*_1).1: u32);
+                let mut _2: u32;
+                let mut _3: u32;
             }
         }
     }
 
     bb0: {
-        StorageLive(_7);
-        StorageLive(_6);
+        StorageLive(_5);
+        StorageLive(_4);
         StorageLive(_2);
-        _2 = &((*_1).0: u32);
+        _2 = ((*_1).0: u32);
         StorageLive(_3);
-        _3 = &((*_1).1: u32);
-        StorageLive(_4);
-        _4 = (*_2);
-        StorageLive(_5);
-        _5 = (*_3);
-        _6 = Lt(move _4, move _5);
-        StorageDead(_5);
-        StorageDead(_4);
+        _3 = ((*_1).1: u32);
+        _4 = Lt(move _2, move _3);
         StorageDead(_3);
         StorageDead(_2);
-        switchInt(move _6) -> [0: bb1, otherwise: bb2];
+        switchInt(move _4) -> [0: bb1, otherwise: bb2];
     }
 
     bb1: {
@@ -51,21 +43,21 @@ fn range_iter_next(_1: &mut std::ops::Range<u32>) -> Option<u32> {
     }
 
     bb2: {
-        _7 = ((*_1).0: u32);
-        StorageLive(_8);
-        _8 = <u32 as Step>::forward_unchecked(_7, const 1_usize) -> [return: bb3, unwind unreachable];
+        _5 = ((*_1).0: u32);
+        StorageLive(_6);
+        _6 = <u32 as Step>::forward_unchecked(_5, const 1_usize) -> [return: bb3, unwind unreachable];
     }
 
     bb3: {
-        ((*_1).0: u32) = move _8;
-        StorageDead(_8);
-        _0 = Option::<u32>::Some(_7);
+        ((*_1).0: u32) = move _6;
+        StorageDead(_6);
+        _0 = Option::<u32>::Some(_5);
         goto -> bb4;
     }
 
     bb4: {
-        StorageDead(_6);
-        StorageDead(_7);
+        StorageDead(_4);
+        StorageDead(_5);
         return;
     }
 }
diff --git a/tests/mir-opt/pre-codegen/range_iter.range_iter_next.PreCodegen.after.panic-unwind.mir b/tests/mir-opt/pre-codegen/range_iter.range_iter_next.PreCodegen.after.panic-unwind.mir
index 65870f693c0..668a2ac1e20 100644
--- a/tests/mir-opt/pre-codegen/range_iter.range_iter_next.PreCodegen.after.panic-unwind.mir
+++ b/tests/mir-opt/pre-codegen/range_iter.range_iter_next.PreCodegen.after.panic-unwind.mir
@@ -7,42 +7,34 @@ fn range_iter_next(_1: &mut std::ops::Range<u32>) -> Option<u32> {
         debug self => _1;
         scope 2 (inlined <std::ops::Range<u32> as iter::range::RangeIteratorImpl>::spec_next) {
             debug self => _1;
-            let mut _2: &u32;
-            let mut _3: &u32;
-            let mut _6: bool;
-            let _7: u32;
-            let mut _8: u32;
+            let mut _4: bool;
+            let _5: u32;
+            let mut _6: u32;
             scope 3 {
-                debug old => _7;
+                debug old => _5;
                 scope 4 {
                 }
             }
             scope 5 (inlined cmp::impls::<impl PartialOrd for u32>::lt) {
-                debug self => _2;
-                debug other => _3;
-                let mut _4: u32;
-                let mut _5: u32;
+                debug self => &((*_1).0: u32);
+                debug other => &((*_1).1: u32);
+                let mut _2: u32;
+                let mut _3: u32;
             }
         }
     }
 
     bb0: {
-        StorageLive(_7);
-        StorageLive(_6);
+        StorageLive(_5);
+        StorageLive(_4);
         StorageLive(_2);
-        _2 = &((*_1).0: u32);
+        _2 = ((*_1).0: u32);
         StorageLive(_3);
-        _3 = &((*_1).1: u32);
-        StorageLive(_4);
-        _4 = (*_2);
-        StorageLive(_5);
-        _5 = (*_3);
-        _6 = Lt(move _4, move _5);
-        StorageDead(_5);
-        StorageDead(_4);
+        _3 = ((*_1).1: u32);
+        _4 = Lt(move _2, move _3);
         StorageDead(_3);
         StorageDead(_2);
-        switchInt(move _6) -> [0: bb1, otherwise: bb2];
+        switchInt(move _4) -> [0: bb1, otherwise: bb2];
     }
 
     bb1: {
@@ -51,21 +43,21 @@ fn range_iter_next(_1: &mut std::ops::Range<u32>) -> Option<u32> {
     }
 
     bb2: {
-        _7 = ((*_1).0: u32);
-        StorageLive(_8);
-        _8 = <u32 as Step>::forward_unchecked(_7, const 1_usize) -> [return: bb3, unwind continue];
+        _5 = ((*_1).0: u32);
+        StorageLive(_6);
+        _6 = <u32 as Step>::forward_unchecked(_5, const 1_usize) -> [return: bb3, unwind continue];
     }
 
     bb3: {
-        ((*_1).0: u32) = move _8;
-        StorageDead(_8);
-        _0 = Option::<u32>::Some(_7);
+        ((*_1).0: u32) = move _6;
+        StorageDead(_6);
+        _0 = Option::<u32>::Some(_5);
         goto -> bb4;
     }
 
     bb4: {
-        StorageDead(_6);
-        StorageDead(_7);
+        StorageDead(_4);
+        StorageDead(_5);
         return;
     }
 }
diff --git a/tests/mir-opt/pre-codegen/slice_filter.variant_a-{closure#0}.PreCodegen.after.mir b/tests/mir-opt/pre-codegen/slice_filter.variant_a-{closure#0}.PreCodegen.after.mir
index 499bee2ae40..f9b0c85c852 100644
--- a/tests/mir-opt/pre-codegen/slice_filter.variant_a-{closure#0}.PreCodegen.after.mir
+++ b/tests/mir-opt/pre-codegen/slice_filter.variant_a-{closure#0}.PreCodegen.after.mir
@@ -3,214 +3,138 @@
 fn variant_a::{closure#0}(_1: &mut [closure@$DIR/slice_filter.rs:7:25: 7:39], _2: &&(usize, usize, usize, usize)) -> bool {
     let mut _0: bool;
     let mut _3: &(usize, usize, usize, usize);
-    let _4: &usize;
+    let mut _4: &(usize, usize, usize, usize);
     let mut _5: &(usize, usize, usize, usize);
-    let _6: &usize;
-    let mut _7: &(usize, usize, usize, usize);
-    let _8: &usize;
-    let mut _9: &(usize, usize, usize, usize);
-    let _10: &usize;
-    let mut _11: &&usize;
-    let _12: &usize;
-    let mut _13: &&usize;
-    let mut _18: bool;
-    let mut _19: bool;
-    let mut _20: &&usize;
-    let _21: &usize;
-    let mut _22: &&usize;
-    let mut _27: bool;
-    let mut _28: &&usize;
-    let _29: &usize;
-    let mut _30: &&usize;
-    let mut _35: bool;
-    let mut _36: bool;
-    let mut _37: &&usize;
-    let _38: &usize;
-    let mut _39: &&usize;
-    let mut _44: bool;
+    let mut _6: &(usize, usize, usize, usize);
+    let mut _9: bool;
+    let mut _10: bool;
+    let mut _13: bool;
+    let mut _16: bool;
+    let mut _17: bool;
+    let mut _20: bool;
     scope 1 {
-        debug a => _4;
-        debug b => _6;
-        debug c => _8;
-        debug d => _10;
+        debug a => &((*_3).0: usize);
+        debug b => &((*_4).1: usize);
+        debug c => &((*_5).2: usize);
+        debug d => &((*_6).3: usize);
         scope 2 (inlined cmp::impls::<impl PartialOrd for &usize>::le) {
-            debug self => _11;
-            debug other => _13;
-            let mut _14: &usize;
-            let mut _15: &usize;
+            debug self => &&((*_3).0: usize);
+            debug other => &&((*_5).2: usize);
             scope 3 (inlined cmp::impls::<impl PartialOrd for usize>::le) {
-                debug self => _14;
-                debug other => _15;
-                let mut _16: usize;
-                let mut _17: usize;
+                debug self => &((*_3).0: usize);
+                debug other => &((*_5).2: usize);
+                let mut _7: usize;
+                let mut _8: usize;
             }
         }
         scope 4 (inlined cmp::impls::<impl PartialOrd for &usize>::le) {
-            debug self => _28;
-            debug other => _30;
-            let mut _31: &usize;
-            let mut _32: &usize;
+            debug self => &&((*_5).2: usize);
+            debug other => &&((*_3).0: usize);
             scope 5 (inlined cmp::impls::<impl PartialOrd for usize>::le) {
-                debug self => _31;
-                debug other => _32;
-                let mut _33: usize;
-                let mut _34: usize;
+                debug self => &((*_5).2: usize);
+                debug other => &((*_3).0: usize);
+                let mut _14: usize;
+                let mut _15: usize;
             }
         }
         scope 6 (inlined cmp::impls::<impl PartialOrd for &usize>::le) {
-            debug self => _20;
-            debug other => _22;
-            let mut _23: &usize;
-            let mut _24: &usize;
+            debug self => &&((*_6).3: usize);
+            debug other => &&((*_4).1: usize);
             scope 7 (inlined cmp::impls::<impl PartialOrd for usize>::le) {
-                debug self => _23;
-                debug other => _24;
-                let mut _25: usize;
-                let mut _26: usize;
+                debug self => &((*_6).3: usize);
+                debug other => &((*_4).1: usize);
+                let mut _11: usize;
+                let mut _12: usize;
             }
         }
         scope 8 (inlined cmp::impls::<impl PartialOrd for &usize>::le) {
-            debug self => _37;
-            debug other => _39;
-            let mut _40: &usize;
-            let mut _41: &usize;
+            debug self => &&((*_4).1: usize);
+            debug other => &&((*_6).3: usize);
             scope 9 (inlined cmp::impls::<impl PartialOrd for usize>::le) {
-                debug self => _40;
-                debug other => _41;
-                let mut _42: usize;
-                let mut _43: usize;
+                debug self => &((*_4).1: usize);
+                debug other => &((*_6).3: usize);
+                let mut _18: usize;
+                let mut _19: usize;
             }
         }
     }
 
     bb0: {
-        StorageLive(_4);
         _3 = deref_copy (*_2);
-        _4 = &((*_3).0: usize);
-        StorageLive(_6);
+        _4 = deref_copy (*_2);
         _5 = deref_copy (*_2);
-        _6 = &((*_5).1: usize);
-        StorageLive(_8);
-        _7 = deref_copy (*_2);
-        _8 = &((*_7).2: usize);
+        _6 = deref_copy (*_2);
         StorageLive(_10);
-        _9 = deref_copy (*_2);
-        _10 = &((*_9).3: usize);
-        StorageLive(_19);
-        StorageLive(_18);
-        StorageLive(_11);
-        _11 = &_4;
-        StorageLive(_13);
-        StorageLive(_12);
-        _12 = _8;
-        _13 = &_12;
-        _14 = deref_copy (*_11);
-        _15 = deref_copy (*_13);
-        StorageLive(_16);
-        _16 = (*_14);
-        StorageLive(_17);
-        _17 = (*_15);
-        _18 = Le(move _16, move _17);
-        StorageDead(_17);
-        StorageDead(_16);
-        StorageDead(_12);
-        StorageDead(_13);
-        StorageDead(_11);
-        switchInt(move _18) -> [0: bb1, otherwise: bb2];
+        StorageLive(_9);
+        StorageLive(_7);
+        _7 = ((*_3).0: usize);
+        StorageLive(_8);
+        _8 = ((*_5).2: usize);
+        _9 = Le(move _7, move _8);
+        StorageDead(_8);
+        StorageDead(_7);
+        switchInt(move _9) -> [0: bb1, otherwise: bb2];
     }
 
     bb1: {
-        _19 = const false;
+        _10 = const false;
         goto -> bb3;
     }
 
     bb2: {
-        StorageLive(_27);
-        StorageLive(_20);
-        _20 = &_10;
-        StorageLive(_22);
-        StorageLive(_21);
-        _21 = _6;
-        _22 = &_21;
-        _23 = deref_copy (*_20);
-        _24 = deref_copy (*_22);
-        StorageLive(_25);
-        _25 = (*_23);
-        StorageLive(_26);
-        _26 = (*_24);
-        _27 = Le(move _25, move _26);
-        StorageDead(_26);
-        StorageDead(_25);
-        StorageDead(_21);
-        StorageDead(_22);
-        StorageDead(_20);
-        _19 = move _27;
+        StorageLive(_13);
+        StorageLive(_11);
+        _11 = ((*_6).3: usize);
+        StorageLive(_12);
+        _12 = ((*_4).1: usize);
+        _13 = Le(move _11, move _12);
+        StorageDead(_12);
+        StorageDead(_11);
+        _10 = move _13;
         goto -> bb3;
     }
 
     bb3: {
-        StorageDead(_27);
-        StorageDead(_18);
-        switchInt(move _19) -> [0: bb4, otherwise: bb8];
+        StorageDead(_13);
+        StorageDead(_9);
+        switchInt(move _10) -> [0: bb4, otherwise: bb8];
     }
 
     bb4: {
-        StorageLive(_36);
-        StorageLive(_35);
-        StorageLive(_28);
-        _28 = &_8;
-        StorageLive(_30);
-        StorageLive(_29);
-        _29 = _4;
-        _30 = &_29;
-        _31 = deref_copy (*_28);
-        _32 = deref_copy (*_30);
-        StorageLive(_33);
-        _33 = (*_31);
-        StorageLive(_34);
-        _34 = (*_32);
-        _35 = Le(move _33, move _34);
-        StorageDead(_34);
-        StorageDead(_33);
-        StorageDead(_29);
-        StorageDead(_30);
-        StorageDead(_28);
-        switchInt(move _35) -> [0: bb5, otherwise: bb6];
+        StorageLive(_17);
+        StorageLive(_16);
+        StorageLive(_14);
+        _14 = ((*_5).2: usize);
+        StorageLive(_15);
+        _15 = ((*_3).0: usize);
+        _16 = Le(move _14, move _15);
+        StorageDead(_15);
+        StorageDead(_14);
+        switchInt(move _16) -> [0: bb5, otherwise: bb6];
     }
 
     bb5: {
-        _36 = const false;
+        _17 = const false;
         goto -> bb7;
     }
 
     bb6: {
-        StorageLive(_44);
-        StorageLive(_37);
-        _37 = &_6;
-        StorageLive(_39);
-        StorageLive(_38);
-        _38 = _10;
-        _39 = &_38;
-        _40 = deref_copy (*_37);
-        _41 = deref_copy (*_39);
-        StorageLive(_42);
-        _42 = (*_40);
-        StorageLive(_43);
-        _43 = (*_41);
-        _44 = Le(move _42, move _43);
-        StorageDead(_43);
-        StorageDead(_42);
-        StorageDead(_38);
-        StorageDead(_39);
-        StorageDead(_37);
-        _36 = move _44;
+        StorageLive(_20);
+        StorageLive(_18);
+        _18 = ((*_4).1: usize);
+        StorageLive(_19);
+        _19 = ((*_6).3: usize);
+        _20 = Le(move _18, move _19);
+        StorageDead(_19);
+        StorageDead(_18);
+        _17 = move _20;
         goto -> bb7;
     }
 
     bb7: {
-        StorageDead(_44);
-        StorageDead(_35);
-        _0 = move _36;
+        StorageDead(_20);
+        StorageDead(_16);
+        _0 = move _17;
         goto -> bb9;
     }
 
@@ -220,12 +144,8 @@ fn variant_a::{closure#0}(_1: &mut [closure@$DIR/slice_filter.rs:7:25: 7:39], _2
     }
 
     bb9: {
-        StorageDead(_36);
-        StorageDead(_19);
+        StorageDead(_17);
         StorageDead(_10);
-        StorageDead(_8);
-        StorageDead(_6);
-        StorageDead(_4);
         return;
     }
 }
diff --git a/tests/mir-opt/pre-codegen/slice_index.slice_get_mut_usize.PreCodegen.after.panic-abort.mir b/tests/mir-opt/pre-codegen/slice_index.slice_get_mut_usize.PreCodegen.after.panic-abort.mir
index 65416d09053..602f8652949 100644
--- a/tests/mir-opt/pre-codegen/slice_index.slice_get_mut_usize.PreCodegen.after.panic-abort.mir
+++ b/tests/mir-opt/pre-codegen/slice_index.slice_get_mut_usize.PreCodegen.after.panic-abort.mir
@@ -10,38 +10,37 @@ fn slice_get_mut_usize(_1: &mut [u32], _2: usize) -> Option<&mut u32> {
         scope 2 (inlined <usize as SliceIndex<[u32]>>::get_mut) {
             debug self => _2;
             debug slice => _1;
-            let mut _3: &[u32];
-            let mut _4: usize;
-            let mut _5: bool;
-            let mut _6: *mut [u32];
-            let mut _8: *mut u32;
-            let mut _9: &mut u32;
+            let mut _3: usize;
+            let mut _4: bool;
+            let mut _5: *mut [u32];
+            let mut _7: *mut u32;
+            let mut _8: &mut u32;
             scope 3 {
                 scope 4 (inlined <usize as SliceIndex<[u32]>>::get_unchecked_mut) {
                     debug self => _2;
-                    debug slice => _6;
-                    let mut _7: *mut u32;
+                    debug slice => _5;
+                    let mut _6: *mut u32;
                     scope 5 {
                         debug this => _2;
                         scope 6 {
                             scope 7 (inlined <usize as SliceIndex<[T]>>::get_unchecked_mut::runtime::<u32>) {
                                 debug this => _2;
-                                debug slice => _6;
+                                debug slice => _5;
                                 scope 8 (inlined ptr::mut_ptr::<impl *mut [u32]>::len) {
-                                    debug self => _6;
-                                    let mut _10: *const [u32];
+                                    debug self => _5;
+                                    let mut _9: *const [u32];
                                     scope 9 (inlined std::ptr::metadata::<[u32]>) {
-                                        debug ptr => _10;
+                                        debug ptr => _9;
                                         scope 10 {
                                         }
                                     }
                                 }
                             }
                             scope 11 (inlined ptr::mut_ptr::<impl *mut [u32]>::as_mut_ptr) {
-                                debug self => _6;
+                                debug self => _5;
                             }
                             scope 12 (inlined ptr::mut_ptr::<impl *mut u32>::add) {
-                                debug self => _7;
+                                debug self => _6;
                                 debug count => _2;
                                 scope 13 {
                                 }
@@ -54,16 +53,13 @@ fn slice_get_mut_usize(_1: &mut [u32], _2: usize) -> Option<&mut u32> {
     }
 
     bb0: {
-        StorageLive(_9);
-        StorageLive(_5);
+        StorageLive(_8);
         StorageLive(_4);
         StorageLive(_3);
-        _3 = &(*_1);
-        _4 = Len((*_3));
+        _3 = Len((*_1));
+        _4 = Lt(_2, move _3);
         StorageDead(_3);
-        _5 = Lt(_2, move _4);
-        StorageDead(_4);
-        switchInt(move _5) -> [0: bb1, otherwise: bb2];
+        switchInt(move _4) -> [0: bb1, otherwise: bb2];
     }
 
     bb1: {
@@ -72,25 +68,25 @@ fn slice_get_mut_usize(_1: &mut [u32], _2: usize) -> Option<&mut u32> {
     }
 
     bb2: {
-        StorageLive(_8);
-        StorageLive(_6);
-        _6 = &raw mut (*_1);
-        StorageLive(_10);
         StorageLive(_7);
-        _7 = _6 as *mut u32 (PtrToPtr);
-        _8 = Offset(_7, _2);
-        StorageDead(_7);
-        StorageDead(_10);
+        StorageLive(_5);
+        _5 = &raw mut (*_1);
+        StorageLive(_9);
+        StorageLive(_6);
+        _6 = _5 as *mut u32 (PtrToPtr);
+        _7 = Offset(_6, _2);
         StorageDead(_6);
-        _9 = &mut (*_8);
-        _0 = Option::<&mut u32>::Some(_9);
-        StorageDead(_8);
+        StorageDead(_9);
+        StorageDead(_5);
+        _8 = &mut (*_7);
+        _0 = Option::<&mut u32>::Some(_8);
+        StorageDead(_7);
         goto -> bb3;
     }
 
     bb3: {
-        StorageDead(_5);
-        StorageDead(_9);
+        StorageDead(_4);
+        StorageDead(_8);
         return;
     }
 }
diff --git a/tests/mir-opt/pre-codegen/slice_index.slice_get_mut_usize.PreCodegen.after.panic-unwind.mir b/tests/mir-opt/pre-codegen/slice_index.slice_get_mut_usize.PreCodegen.after.panic-unwind.mir
index 65416d09053..602f8652949 100644
--- a/tests/mir-opt/pre-codegen/slice_index.slice_get_mut_usize.PreCodegen.after.panic-unwind.mir
+++ b/tests/mir-opt/pre-codegen/slice_index.slice_get_mut_usize.PreCodegen.after.panic-unwind.mir
@@ -10,38 +10,37 @@ fn slice_get_mut_usize(_1: &mut [u32], _2: usize) -> Option<&mut u32> {
         scope 2 (inlined <usize as SliceIndex<[u32]>>::get_mut) {
             debug self => _2;
             debug slice => _1;
-            let mut _3: &[u32];
-            let mut _4: usize;
-            let mut _5: bool;
-            let mut _6: *mut [u32];
-            let mut _8: *mut u32;
-            let mut _9: &mut u32;
+            let mut _3: usize;
+            let mut _4: bool;
+            let mut _5: *mut [u32];
+            let mut _7: *mut u32;
+            let mut _8: &mut u32;
             scope 3 {
                 scope 4 (inlined <usize as SliceIndex<[u32]>>::get_unchecked_mut) {
                     debug self => _2;
-                    debug slice => _6;
-                    let mut _7: *mut u32;
+                    debug slice => _5;
+                    let mut _6: *mut u32;
                     scope 5 {
                         debug this => _2;
                         scope 6 {
                             scope 7 (inlined <usize as SliceIndex<[T]>>::get_unchecked_mut::runtime::<u32>) {
                                 debug this => _2;
-                                debug slice => _6;
+                                debug slice => _5;
                                 scope 8 (inlined ptr::mut_ptr::<impl *mut [u32]>::len) {
-                                    debug self => _6;
-                                    let mut _10: *const [u32];
+                                    debug self => _5;
+                                    let mut _9: *const [u32];
                                     scope 9 (inlined std::ptr::metadata::<[u32]>) {
-                                        debug ptr => _10;
+                                        debug ptr => _9;
                                         scope 10 {
                                         }
                                     }
                                 }
                             }
                             scope 11 (inlined ptr::mut_ptr::<impl *mut [u32]>::as_mut_ptr) {
-                                debug self => _6;
+                                debug self => _5;
                             }
                             scope 12 (inlined ptr::mut_ptr::<impl *mut u32>::add) {
-                                debug self => _7;
+                                debug self => _6;
                                 debug count => _2;
                                 scope 13 {
                                 }
@@ -54,16 +53,13 @@ fn slice_get_mut_usize(_1: &mut [u32], _2: usize) -> Option<&mut u32> {
     }
 
     bb0: {
-        StorageLive(_9);
-        StorageLive(_5);
+        StorageLive(_8);
         StorageLive(_4);
         StorageLive(_3);
-        _3 = &(*_1);
-        _4 = Len((*_3));
+        _3 = Len((*_1));
+        _4 = Lt(_2, move _3);
         StorageDead(_3);
-        _5 = Lt(_2, move _4);
-        StorageDead(_4);
-        switchInt(move _5) -> [0: bb1, otherwise: bb2];
+        switchInt(move _4) -> [0: bb1, otherwise: bb2];
     }
 
     bb1: {
@@ -72,25 +68,25 @@ fn slice_get_mut_usize(_1: &mut [u32], _2: usize) -> Option<&mut u32> {
     }
 
     bb2: {
-        StorageLive(_8);
-        StorageLive(_6);
-        _6 = &raw mut (*_1);
-        StorageLive(_10);
         StorageLive(_7);
-        _7 = _6 as *mut u32 (PtrToPtr);
-        _8 = Offset(_7, _2);
-        StorageDead(_7);
-        StorageDead(_10);
+        StorageLive(_5);
+        _5 = &raw mut (*_1);
+        StorageLive(_9);
+        StorageLive(_6);
+        _6 = _5 as *mut u32 (PtrToPtr);
+        _7 = Offset(_6, _2);
         StorageDead(_6);
-        _9 = &mut (*_8);
-        _0 = Option::<&mut u32>::Some(_9);
-        StorageDead(_8);
+        StorageDead(_9);
+        StorageDead(_5);
+        _8 = &mut (*_7);
+        _0 = Option::<&mut u32>::Some(_8);
+        StorageDead(_7);
         goto -> bb3;
     }
 
     bb3: {
-        StorageDead(_5);
-        StorageDead(_9);
+        StorageDead(_4);
+        StorageDead(_8);
         return;
     }
 }
diff --git a/tests/mir-opt/pre-codegen/slice_iter.range_loop.PreCodegen.after.panic-abort.mir b/tests/mir-opt/pre-codegen/slice_iter.range_loop.PreCodegen.after.panic-abort.mir
index 00177033bbf..8ae6452d133 100644
--- a/tests/mir-opt/pre-codegen/slice_iter.range_loop.PreCodegen.after.panic-abort.mir
+++ b/tests/mir-opt/pre-codegen/slice_iter.range_loop.PreCodegen.after.panic-abort.mir
@@ -7,43 +7,41 @@ fn range_loop(_1: &[T], _2: impl Fn(usize, &T)) -> () {
     let mut _3: usize;
     let mut _4: std::ops::Range<usize>;
     let mut _5: std::ops::Range<usize>;
-    let mut _6: &mut std::ops::Range<usize>;
-    let mut _12: std::option::Option<usize>;
-    let mut _15: isize;
-    let mut _17: usize;
-    let mut _18: bool;
-    let mut _20: &impl Fn(usize, &T);
-    let mut _21: (usize, &T);
-    let _22: ();
+    let mut _9: std::option::Option<usize>;
+    let mut _12: isize;
+    let mut _14: usize;
+    let mut _15: bool;
+    let mut _17: &impl Fn(usize, &T);
+    let mut _18: (usize, &T);
+    let _19: ();
+    let mut _20: &mut std::ops::Range<usize>;
     scope 1 {
         debug iter => _5;
-        let _16: usize;
+        let _13: usize;
         scope 2 {
-            debug i => _16;
-            let _19: &T;
+            debug i => _13;
+            let _16: &T;
             scope 3 {
-                debug x => _19;
+                debug x => _16;
             }
         }
         scope 5 (inlined iter::range::<impl Iterator for std::ops::Range<usize>>::next) {
-            debug self => _6;
+            debug self => &_5;
             scope 6 (inlined <std::ops::Range<usize> as iter::range::RangeIteratorImpl>::spec_next) {
-                debug self => _6;
-                let mut _7: &usize;
-                let mut _8: &usize;
-                let mut _11: bool;
-                let _13: usize;
-                let mut _14: usize;
+                debug self => &_5;
+                let mut _8: bool;
+                let _10: usize;
+                let mut _11: usize;
                 scope 7 {
-                    debug old => _13;
+                    debug old => _10;
                     scope 8 {
                     }
                 }
                 scope 9 (inlined cmp::impls::<impl PartialOrd for usize>::lt) {
-                    debug self => _7;
-                    debug other => _8;
-                    let mut _9: usize;
-                    let mut _10: usize;
+                    debug self => &((*_20).0: usize);
+                    debug other => &((*_20).1: usize);
+                    let mut _6: usize;
+                    let mut _7: usize;
                 }
             }
         }
@@ -63,53 +61,46 @@ fn range_loop(_1: &[T], _2: impl Fn(usize, &T)) -> () {
     }
 
     bb1: {
-        StorageLive(_12);
-        _6 = &mut _5;
-        StorageLive(_13);
-        StorageLive(_11);
-        StorageLive(_7);
-        _7 = &((*_6).0: usize);
-        StorageLive(_8);
-        _8 = &((*_6).1: usize);
         StorageLive(_9);
-        _9 = (*_7);
         StorageLive(_10);
-        _10 = (*_8);
-        _11 = Lt(move _9, move _10);
-        StorageDead(_10);
-        StorageDead(_9);
-        StorageDead(_8);
+        StorageLive(_8);
+        StorageLive(_6);
+        _6 = (_5.0: usize);
+        StorageLive(_7);
+        _7 = (_5.1: usize);
+        _8 = Lt(move _6, move _7);
         StorageDead(_7);
-        switchInt(move _11) -> [0: bb2, otherwise: bb3];
+        StorageDead(_6);
+        switchInt(move _8) -> [0: bb2, otherwise: bb3];
     }
 
     bb2: {
-        _12 = Option::<usize>::None;
+        _9 = Option::<usize>::None;
         goto -> bb5;
     }
 
     bb3: {
-        _13 = ((*_6).0: usize);
-        StorageLive(_14);
-        _14 = <usize as Step>::forward_unchecked(_13, const 1_usize) -> [return: bb4, unwind unreachable];
+        _10 = (_5.0: usize);
+        StorageLive(_11);
+        _11 = <usize as Step>::forward_unchecked(_10, const 1_usize) -> [return: bb4, unwind unreachable];
     }
 
     bb4: {
-        ((*_6).0: usize) = move _14;
-        StorageDead(_14);
-        _12 = Option::<usize>::Some(_13);
+        (_5.0: usize) = move _11;
+        StorageDead(_11);
+        _9 = Option::<usize>::Some(_10);
         goto -> bb5;
     }
 
     bb5: {
-        StorageDead(_11);
-        StorageDead(_13);
-        _15 = discriminant(_12);
-        switchInt(move _15) -> [0: bb6, 1: bb8, otherwise: bb11];
+        StorageDead(_8);
+        StorageDead(_10);
+        _12 = discriminant(_9);
+        switchInt(move _12) -> [0: bb6, 1: bb8, otherwise: bb11];
     }
 
     bb6: {
-        StorageDead(_12);
+        StorageDead(_9);
         StorageDead(_5);
         drop(_2) -> [return: bb7, unwind unreachable];
     }
@@ -119,25 +110,25 @@ fn range_loop(_1: &[T], _2: impl Fn(usize, &T)) -> () {
     }
 
     bb8: {
-        _16 = ((_12 as Some).0: usize);
-        _17 = Len((*_1));
-        _18 = Lt(_16, _17);
-        assert(move _18, "index out of bounds: the length is {} but the index is {}", move _17, _16) -> [success: bb9, unwind unreachable];
+        _13 = ((_9 as Some).0: usize);
+        _14 = Len((*_1));
+        _15 = Lt(_13, _14);
+        assert(move _15, "index out of bounds: the length is {} but the index is {}", move _14, _13) -> [success: bb9, unwind unreachable];
     }
 
     bb9: {
-        _19 = &(*_1)[_16];
-        StorageLive(_20);
-        _20 = &_2;
-        StorageLive(_21);
-        _21 = (_16, _19);
-        _22 = <impl Fn(usize, &T) as Fn<(usize, &T)>>::call(move _20, move _21) -> [return: bb10, unwind unreachable];
+        _16 = &(*_1)[_13];
+        StorageLive(_17);
+        _17 = &_2;
+        StorageLive(_18);
+        _18 = (_13, _16);
+        _19 = <impl Fn(usize, &T) as Fn<(usize, &T)>>::call(move _17, move _18) -> [return: bb10, unwind unreachable];
     }
 
     bb10: {
-        StorageDead(_21);
-        StorageDead(_20);
-        StorageDead(_12);
+        StorageDead(_18);
+        StorageDead(_17);
+        StorageDead(_9);
         goto -> bb1;
     }
 
diff --git a/tests/mir-opt/pre-codegen/slice_iter.range_loop.PreCodegen.after.panic-unwind.mir b/tests/mir-opt/pre-codegen/slice_iter.range_loop.PreCodegen.after.panic-unwind.mir
index 3423c5d865d..cb07a2be169 100644
--- a/tests/mir-opt/pre-codegen/slice_iter.range_loop.PreCodegen.after.panic-unwind.mir
+++ b/tests/mir-opt/pre-codegen/slice_iter.range_loop.PreCodegen.after.panic-unwind.mir
@@ -7,43 +7,41 @@ fn range_loop(_1: &[T], _2: impl Fn(usize, &T)) -> () {
     let mut _3: usize;
     let mut _4: std::ops::Range<usize>;
     let mut _5: std::ops::Range<usize>;
-    let mut _6: &mut std::ops::Range<usize>;
-    let mut _12: std::option::Option<usize>;
-    let mut _15: isize;
-    let mut _17: usize;
-    let mut _18: bool;
-    let mut _20: &impl Fn(usize, &T);
-    let mut _21: (usize, &T);
-    let _22: ();
+    let mut _9: std::option::Option<usize>;
+    let mut _12: isize;
+    let mut _14: usize;
+    let mut _15: bool;
+    let mut _17: &impl Fn(usize, &T);
+    let mut _18: (usize, &T);
+    let _19: ();
+    let mut _20: &mut std::ops::Range<usize>;
     scope 1 {
         debug iter => _5;
-        let _16: usize;
+        let _13: usize;
         scope 2 {
-            debug i => _16;
-            let _19: &T;
+            debug i => _13;
+            let _16: &T;
             scope 3 {
-                debug x => _19;
+                debug x => _16;
             }
         }
         scope 5 (inlined iter::range::<impl Iterator for std::ops::Range<usize>>::next) {
-            debug self => _6;
+            debug self => &_5;
             scope 6 (inlined <std::ops::Range<usize> as iter::range::RangeIteratorImpl>::spec_next) {
-                debug self => _6;
-                let mut _7: &usize;
-                let mut _8: &usize;
-                let mut _11: bool;
-                let _13: usize;
-                let mut _14: usize;
+                debug self => &_5;
+                let mut _8: bool;
+                let _10: usize;
+                let mut _11: usize;
                 scope 7 {
-                    debug old => _13;
+                    debug old => _10;
                     scope 8 {
                     }
                 }
                 scope 9 (inlined cmp::impls::<impl PartialOrd for usize>::lt) {
-                    debug self => _7;
-                    debug other => _8;
-                    let mut _9: usize;
-                    let mut _10: usize;
+                    debug self => &((*_20).0: usize);
+                    debug other => &((*_20).1: usize);
+                    let mut _6: usize;
+                    let mut _7: usize;
                 }
             }
         }
@@ -63,53 +61,46 @@ fn range_loop(_1: &[T], _2: impl Fn(usize, &T)) -> () {
     }
 
     bb1: {
-        StorageLive(_12);
-        _6 = &mut _5;
-        StorageLive(_13);
-        StorageLive(_11);
-        StorageLive(_7);
-        _7 = &((*_6).0: usize);
-        StorageLive(_8);
-        _8 = &((*_6).1: usize);
         StorageLive(_9);
-        _9 = (*_7);
         StorageLive(_10);
-        _10 = (*_8);
-        _11 = Lt(move _9, move _10);
-        StorageDead(_10);
-        StorageDead(_9);
-        StorageDead(_8);
+        StorageLive(_8);
+        StorageLive(_6);
+        _6 = (_5.0: usize);
+        StorageLive(_7);
+        _7 = (_5.1: usize);
+        _8 = Lt(move _6, move _7);
         StorageDead(_7);
-        switchInt(move _11) -> [0: bb2, otherwise: bb3];
+        StorageDead(_6);
+        switchInt(move _8) -> [0: bb2, otherwise: bb3];
     }
 
     bb2: {
-        _12 = Option::<usize>::None;
+        _9 = Option::<usize>::None;
         goto -> bb5;
     }
 
     bb3: {
-        _13 = ((*_6).0: usize);
-        StorageLive(_14);
-        _14 = <usize as Step>::forward_unchecked(_13, const 1_usize) -> [return: bb4, unwind: bb12];
+        _10 = (_5.0: usize);
+        StorageLive(_11);
+        _11 = <usize as Step>::forward_unchecked(_10, const 1_usize) -> [return: bb4, unwind: bb12];
     }
 
     bb4: {
-        ((*_6).0: usize) = move _14;
-        StorageDead(_14);
-        _12 = Option::<usize>::Some(_13);
+        (_5.0: usize) = move _11;
+        StorageDead(_11);
+        _9 = Option::<usize>::Some(_10);
         goto -> bb5;
     }
 
     bb5: {
-        StorageDead(_11);
-        StorageDead(_13);
-        _15 = discriminant(_12);
-        switchInt(move _15) -> [0: bb6, 1: bb8, otherwise: bb11];
+        StorageDead(_8);
+        StorageDead(_10);
+        _12 = discriminant(_9);
+        switchInt(move _12) -> [0: bb6, 1: bb8, otherwise: bb11];
     }
 
     bb6: {
-        StorageDead(_12);
+        StorageDead(_9);
         StorageDead(_5);
         drop(_2) -> [return: bb7, unwind continue];
     }
@@ -119,25 +110,25 @@ fn range_loop(_1: &[T], _2: impl Fn(usize, &T)) -> () {
     }
 
     bb8: {
-        _16 = ((_12 as Some).0: usize);
-        _17 = Len((*_1));
-        _18 = Lt(_16, _17);
-        assert(move _18, "index out of bounds: the length is {} but the index is {}", move _17, _16) -> [success: bb9, unwind: bb12];
+        _13 = ((_9 as Some).0: usize);
+        _14 = Len((*_1));
+        _15 = Lt(_13, _14);
+        assert(move _15, "index out of bounds: the length is {} but the index is {}", move _14, _13) -> [success: bb9, unwind: bb12];
     }
 
     bb9: {
-        _19 = &(*_1)[_16];
-        StorageLive(_20);
-        _20 = &_2;
-        StorageLive(_21);
-        _21 = (_16, _19);
-        _22 = <impl Fn(usize, &T) as Fn<(usize, &T)>>::call(move _20, move _21) -> [return: bb10, unwind: bb12];
+        _16 = &(*_1)[_13];
+        StorageLive(_17);
+        _17 = &_2;
+        StorageLive(_18);
+        _18 = (_13, _16);
+        _19 = <impl Fn(usize, &T) as Fn<(usize, &T)>>::call(move _17, move _18) -> [return: bb10, unwind: bb12];
     }
 
     bb10: {
-        StorageDead(_21);
-        StorageDead(_20);
-        StorageDead(_12);
+        StorageDead(_18);
+        StorageDead(_17);
+        StorageDead(_9);
         goto -> bb1;
     }
 
diff --git a/tests/mir-opt/pre-codegen/slice_iter.reverse_loop.PreCodegen.after.panic-abort.mir b/tests/mir-opt/pre-codegen/slice_iter.reverse_loop.PreCodegen.after.panic-abort.mir
index e546140e0c1..b550711aa41 100644
--- a/tests/mir-opt/pre-codegen/slice_iter.reverse_loop.PreCodegen.after.panic-abort.mir
+++ b/tests/mir-opt/pre-codegen/slice_iter.reverse_loop.PreCodegen.after.panic-abort.mir
@@ -7,21 +7,20 @@ fn reverse_loop(_1: &[T], _2: impl Fn(&T)) -> () {
     let mut _13: std::slice::Iter<'_, T>;
     let mut _14: std::iter::Rev<std::slice::Iter<'_, T>>;
     let mut _15: std::iter::Rev<std::slice::Iter<'_, T>>;
-    let mut _16: &mut std::iter::Rev<std::slice::Iter<'_, T>>;
-    let mut _18: std::option::Option<&T>;
-    let mut _19: isize;
-    let mut _21: &impl Fn(&T);
-    let mut _22: (&T,);
-    let _23: ();
+    let mut _17: std::option::Option<&T>;
+    let mut _18: isize;
+    let mut _20: &impl Fn(&T);
+    let mut _21: (&T,);
+    let _22: ();
     scope 1 {
         debug iter => _15;
-        let _20: &T;
+        let _19: &T;
         scope 2 {
-            debug x => _20;
+            debug x => _19;
         }
         scope 25 (inlined <Rev<std::slice::Iter<'_, T>> as Iterator>::next) {
-            debug self => _16;
-            let mut _17: &mut std::slice::Iter<'_, T>;
+            debug self => &_15;
+            let mut _16: &mut std::slice::Iter<'_, T>;
         }
     }
     scope 3 (inlined core::slice::<impl [T]>::iter) {
@@ -49,15 +48,15 @@ fn reverse_loop(_1: &[T], _2: impl Fn(&T)) -> () {
                                     debug ptr => _9;
                                     scope 16 (inlined ptr::mut_ptr::<impl *mut T>::is_null) {
                                         debug self => _9;
-                                        let mut _24: *mut u8;
+                                        let mut _23: *mut u8;
                                         scope 17 {
                                             scope 18 (inlined ptr::mut_ptr::<impl *mut T>::is_null::runtime_impl) {
-                                                debug ptr => _24;
+                                                debug ptr => _23;
                                                 scope 19 (inlined ptr::mut_ptr::<impl *mut u8>::addr) {
-                                                    debug self => _24;
+                                                    debug self => _23;
                                                     scope 20 {
                                                         scope 21 (inlined ptr::mut_ptr::<impl *mut u8>::cast::<()>) {
-                                                            debug self => _24;
+                                                            debug self => _23;
                                                         }
                                                     }
                                                 }
@@ -132,10 +131,10 @@ fn reverse_loop(_1: &[T], _2: impl Fn(&T)) -> () {
         StorageLive(_9);
         _9 = _4 as *mut T (PtrToPtr);
         StorageLive(_10);
-        StorageLive(_24);
+        StorageLive(_23);
         _10 = _9 as *const T (PointerCoercion(MutToConstPointer));
         _11 = NonNull::<T> { pointer: _10 };
-        StorageDead(_24);
+        StorageDead(_23);
         StorageDead(_10);
         StorageDead(_9);
         StorageLive(_12);
@@ -153,21 +152,20 @@ fn reverse_loop(_1: &[T], _2: impl Fn(&T)) -> () {
     }
 
     bb4: {
-        StorageLive(_18);
-        _16 = &mut _15;
         StorageLive(_17);
-        _17 = &mut ((*_16).0: std::slice::Iter<'_, T>);
-        _18 = <std::slice::Iter<'_, T> as DoubleEndedIterator>::next_back(move _17) -> [return: bb5, unwind unreachable];
+        StorageLive(_16);
+        _16 = &mut (_15.0: std::slice::Iter<'_, T>);
+        _17 = <std::slice::Iter<'_, T> as DoubleEndedIterator>::next_back(move _16) -> [return: bb5, unwind unreachable];
     }
 
     bb5: {
-        StorageDead(_17);
-        _19 = discriminant(_18);
-        switchInt(move _19) -> [0: bb6, 1: bb8, otherwise: bb10];
+        StorageDead(_16);
+        _18 = discriminant(_17);
+        switchInt(move _18) -> [0: bb6, 1: bb8, otherwise: bb10];
     }
 
     bb6: {
-        StorageDead(_18);
+        StorageDead(_17);
         StorageDead(_15);
         drop(_2) -> [return: bb7, unwind unreachable];
     }
@@ -177,18 +175,18 @@ fn reverse_loop(_1: &[T], _2: impl Fn(&T)) -> () {
     }
 
     bb8: {
-        _20 = ((_18 as Some).0: &T);
+        _19 = ((_17 as Some).0: &T);
+        StorageLive(_20);
+        _20 = &_2;
         StorageLive(_21);
-        _21 = &_2;
-        StorageLive(_22);
-        _22 = (_20,);
-        _23 = <impl Fn(&T) as Fn<(&T,)>>::call(move _21, move _22) -> [return: bb9, unwind unreachable];
+        _21 = (_19,);
+        _22 = <impl Fn(&T) as Fn<(&T,)>>::call(move _20, move _21) -> [return: bb9, unwind unreachable];
     }
 
     bb9: {
-        StorageDead(_22);
         StorageDead(_21);
-        StorageDead(_18);
+        StorageDead(_20);
+        StorageDead(_17);
         goto -> bb4;
     }
 
diff --git a/tests/mir-opt/pre-codegen/slice_iter.reverse_loop.PreCodegen.after.panic-unwind.mir b/tests/mir-opt/pre-codegen/slice_iter.reverse_loop.PreCodegen.after.panic-unwind.mir
index 551cac46bdf..23444241cd2 100644
--- a/tests/mir-opt/pre-codegen/slice_iter.reverse_loop.PreCodegen.after.panic-unwind.mir
+++ b/tests/mir-opt/pre-codegen/slice_iter.reverse_loop.PreCodegen.after.panic-unwind.mir
@@ -7,21 +7,20 @@ fn reverse_loop(_1: &[T], _2: impl Fn(&T)) -> () {
     let mut _13: std::slice::Iter<'_, T>;
     let mut _14: std::iter::Rev<std::slice::Iter<'_, T>>;
     let mut _15: std::iter::Rev<std::slice::Iter<'_, T>>;
-    let mut _16: &mut std::iter::Rev<std::slice::Iter<'_, T>>;
-    let mut _18: std::option::Option<&T>;
-    let mut _19: isize;
-    let mut _21: &impl Fn(&T);
-    let mut _22: (&T,);
-    let _23: ();
+    let mut _17: std::option::Option<&T>;
+    let mut _18: isize;
+    let mut _20: &impl Fn(&T);
+    let mut _21: (&T,);
+    let _22: ();
     scope 1 {
         debug iter => _15;
-        let _20: &T;
+        let _19: &T;
         scope 2 {
-            debug x => _20;
+            debug x => _19;
         }
         scope 25 (inlined <Rev<std::slice::Iter<'_, T>> as Iterator>::next) {
-            debug self => _16;
-            let mut _17: &mut std::slice::Iter<'_, T>;
+            debug self => &_15;
+            let mut _16: &mut std::slice::Iter<'_, T>;
         }
     }
     scope 3 (inlined core::slice::<impl [T]>::iter) {
@@ -49,15 +48,15 @@ fn reverse_loop(_1: &[T], _2: impl Fn(&T)) -> () {
                                     debug ptr => _9;
                                     scope 16 (inlined ptr::mut_ptr::<impl *mut T>::is_null) {
                                         debug self => _9;
-                                        let mut _24: *mut u8;
+                                        let mut _23: *mut u8;
                                         scope 17 {
                                             scope 18 (inlined ptr::mut_ptr::<impl *mut T>::is_null::runtime_impl) {
-                                                debug ptr => _24;
+                                                debug ptr => _23;
                                                 scope 19 (inlined ptr::mut_ptr::<impl *mut u8>::addr) {
-                                                    debug self => _24;
+                                                    debug self => _23;
                                                     scope 20 {
                                                         scope 21 (inlined ptr::mut_ptr::<impl *mut u8>::cast::<()>) {
-                                                            debug self => _24;
+                                                            debug self => _23;
                                                         }
                                                     }
                                                 }
@@ -132,10 +131,10 @@ fn reverse_loop(_1: &[T], _2: impl Fn(&T)) -> () {
         StorageLive(_9);
         _9 = _4 as *mut T (PtrToPtr);
         StorageLive(_10);
-        StorageLive(_24);
+        StorageLive(_23);
         _10 = _9 as *const T (PointerCoercion(MutToConstPointer));
         _11 = NonNull::<T> { pointer: _10 };
-        StorageDead(_24);
+        StorageDead(_23);
         StorageDead(_10);
         StorageDead(_9);
         StorageLive(_12);
@@ -153,21 +152,20 @@ fn reverse_loop(_1: &[T], _2: impl Fn(&T)) -> () {
     }
 
     bb4: {
-        StorageLive(_18);
-        _16 = &mut _15;
         StorageLive(_17);
-        _17 = &mut ((*_16).0: std::slice::Iter<'_, T>);
-        _18 = <std::slice::Iter<'_, T> as DoubleEndedIterator>::next_back(move _17) -> [return: bb5, unwind: bb11];
+        StorageLive(_16);
+        _16 = &mut (_15.0: std::slice::Iter<'_, T>);
+        _17 = <std::slice::Iter<'_, T> as DoubleEndedIterator>::next_back(move _16) -> [return: bb5, unwind: bb11];
     }
 
     bb5: {
-        StorageDead(_17);
-        _19 = discriminant(_18);
-        switchInt(move _19) -> [0: bb6, 1: bb8, otherwise: bb10];
+        StorageDead(_16);
+        _18 = discriminant(_17);
+        switchInt(move _18) -> [0: bb6, 1: bb8, otherwise: bb10];
     }
 
     bb6: {
-        StorageDead(_18);
+        StorageDead(_17);
         StorageDead(_15);
         drop(_2) -> [return: bb7, unwind continue];
     }
@@ -177,18 +175,18 @@ fn reverse_loop(_1: &[T], _2: impl Fn(&T)) -> () {
     }
 
     bb8: {
-        _20 = ((_18 as Some).0: &T);
+        _19 = ((_17 as Some).0: &T);
+        StorageLive(_20);
+        _20 = &_2;
         StorageLive(_21);
-        _21 = &_2;
-        StorageLive(_22);
-        _22 = (_20,);
-        _23 = <impl Fn(&T) as Fn<(&T,)>>::call(move _21, move _22) -> [return: bb9, unwind: bb11];
+        _21 = (_19,);
+        _22 = <impl Fn(&T) as Fn<(&T,)>>::call(move _20, move _21) -> [return: bb9, unwind: bb11];
     }
 
     bb9: {
-        StorageDead(_22);
         StorageDead(_21);
-        StorageDead(_18);
+        StorageDead(_20);
+        StorageDead(_17);
         goto -> bb4;
     }