- // MIR for `references` before GVN
+ // MIR for `references` after GVN
  
  fn references(_1: impl Sized) -> () {
      debug x => _1;
      let mut _0: ();
      let _2: ();
      let mut _3: &impl Sized;
      let _4: ();
      let mut _5: &impl Sized;
      let _6: ();
      let mut _7: &mut impl Sized;
      let _8: ();
      let mut _9: &mut impl Sized;
      let _10: ();
      let mut _11: *const impl Sized;
      let _12: ();
      let mut _13: *const impl Sized;
      let _14: ();
      let mut _15: *mut impl Sized;
      let _16: ();
      let mut _17: *mut impl Sized;
      let _18: &mut impl Sized;
      let mut _20: S<&mut impl Sized>;
      let mut _21: &mut impl Sized;
      let _22: ();
      let mut _23: &impl Sized;
      let _24: ();
      let mut _25: &mut impl Sized;
      let _26: ();
      let mut _27: *const impl Sized;
      let _28: ();
      let mut _29: *mut impl Sized;
      scope 1 {
          debug r => _18;
          let _19: &mut impl Sized;
          scope 2 {
              debug s => _19;
          }
      }
  
      bb0: {
          StorageLive(_2);
          StorageLive(_3);
          _3 = &_1;
          _2 = opaque::<&impl Sized>(move _3) -> [return: bb1, unwind: bb14];
      }
  
      bb1: {
          StorageDead(_3);
          StorageDead(_2);
          StorageLive(_4);
          StorageLive(_5);
          _5 = &_1;
          _4 = opaque::<&impl Sized>(move _5) -> [return: bb2, unwind: bb14];
      }
  
      bb2: {
          StorageDead(_5);
          StorageDead(_4);
          StorageLive(_6);
          StorageLive(_7);
          _7 = &mut _1;
          _6 = opaque::<&mut impl Sized>(move _7) -> [return: bb3, unwind: bb14];
      }
  
      bb3: {
          StorageDead(_7);
          StorageDead(_6);
          StorageLive(_8);
          StorageLive(_9);
          _9 = &mut _1;
          _8 = opaque::<&mut impl Sized>(move _9) -> [return: bb4, unwind: bb14];
      }
  
      bb4: {
          StorageDead(_9);
          StorageDead(_8);
          StorageLive(_10);
          StorageLive(_11);
          _11 = &raw const _1;
          _10 = opaque::<*const impl Sized>(move _11) -> [return: bb5, unwind: bb14];
      }
  
      bb5: {
          StorageDead(_11);
          StorageDead(_10);
          StorageLive(_12);
          StorageLive(_13);
          _13 = &raw const _1;
          _12 = opaque::<*const impl Sized>(move _13) -> [return: bb6, unwind: bb14];
      }
  
      bb6: {
          StorageDead(_13);
          StorageDead(_12);
          StorageLive(_14);
          StorageLive(_15);
          _15 = &raw mut _1;
          _14 = opaque::<*mut impl Sized>(move _15) -> [return: bb7, unwind: bb14];
      }
  
      bb7: {
          StorageDead(_15);
          StorageDead(_14);
          StorageLive(_16);
          StorageLive(_17);
          _17 = &raw mut _1;
          _16 = opaque::<*mut impl Sized>(move _17) -> [return: bb8, unwind: bb14];
      }
  
      bb8: {
          StorageDead(_17);
          StorageDead(_16);
-         StorageLive(_18);
+         nop;
          _18 = &mut _1;
          StorageLive(_19);
          StorageLive(_20);
          StorageLive(_21);
-         _21 = move _18;
-         _20 = S::<&mut impl Sized>(move _21);
+         _21 = copy _18;
+         _20 = S::<&mut impl Sized>(copy _18);
          StorageDead(_21);
-         _19 = move (_20.0: &mut impl Sized);
+         _19 = copy _18;
          StorageDead(_20);
          StorageLive(_22);
          StorageLive(_23);
-         _23 = &(*_19);
+         _23 = &(*_18);
          _22 = opaque::<&impl Sized>(move _23) -> [return: bb9, unwind: bb14];
      }
  
      bb9: {
          StorageDead(_23);
          StorageDead(_22);
          StorageLive(_24);
          StorageLive(_25);
-         _25 = &mut (*_19);
+         _25 = &mut (*_18);
          _24 = opaque::<&mut impl Sized>(move _25) -> [return: bb10, unwind: bb14];
      }
  
      bb10: {
          StorageDead(_25);
          StorageDead(_24);
          StorageLive(_26);
          StorageLive(_27);
-         _27 = &raw const (*_19);
+         _27 = &raw const (*_18);
          _26 = opaque::<*const impl Sized>(move _27) -> [return: bb11, unwind: bb14];
      }
  
      bb11: {
          StorageDead(_27);
          StorageDead(_26);
          StorageLive(_28);
          StorageLive(_29);
-         _29 = &raw mut (*_19);
+         _29 = &raw mut (*_18);
          _28 = opaque::<*mut impl Sized>(move _29) -> [return: bb12, unwind: bb14];
      }
  
      bb12: {
          StorageDead(_29);
          StorageDead(_28);
          _0 = const ();
          StorageDead(_19);
-         StorageDead(_18);
+         nop;
          drop(_1) -> [return: bb13, unwind: bb15];
      }
  
      bb13: {
          return;
      }
  
      bb14 (cleanup): {
          drop(_1) -> [return: bb15, unwind terminate(cleanup)];
      }
  
      bb15 (cleanup): {
          resume;
      }
  }
  
