- // MIR for `adt_transmutes` before InstSimplify
+ // MIR for `adt_transmutes` after InstSimplify
  
  fn adt_transmutes() -> () {
      let mut _0: ();
      let _1: u8;
      let mut _2: std::option::Option<std::num::NonZero<u8>>;
      let mut _4: std::num::Wrapping<i16>;
      let mut _6: std::num::Wrapping<i16>;
      let mut _8: Union32;
      let mut _10: Union32;
      let mut _12: std::mem::MaybeUninit<std::string::String>;
      scope 1 {
          debug _a => _1;
          let _3: i16;
          scope 2 {
              debug _a => _3;
              let _5: u16;
              scope 3 {
                  debug _a => _5;
                  let _7: u32;
                  scope 4 {
                      debug _a => _7;
                      let _9: i32;
                      scope 5 {
                          debug _a => _9;
                          let _11: std::mem::ManuallyDrop<std::string::String>;
                          scope 6 {
                              debug _a => _11;
                          }
                      }
                  }
              }
          }
      }
  
      bb0: {
          StorageLive(_1);
          StorageLive(_2);
          _2 = Option::<NonZero<u8>>::Some(const std::num::NonZero::<u8>::MAX);
          _1 = move _2 as u8 (Transmute);
          StorageDead(_2);
          StorageLive(_3);
          StorageLive(_4);
          _4 = Wrapping::<i16>(const 0_i16);
-         _3 = move _4 as i16 (Transmute);
+         _3 = move (_4.0: i16);
          StorageDead(_4);
          StorageLive(_5);
          StorageLive(_6);
          _6 = Wrapping::<i16>(const 0_i16);
          _5 = move _6 as u16 (Transmute);
          StorageDead(_6);
          StorageLive(_7);
          StorageLive(_8);
          _8 = Union32 { u32: const 0_i32 };
          _7 = move _8 as u32 (Transmute);
          StorageDead(_8);
          StorageLive(_9);
          StorageLive(_10);
          _10 = Union32 { u32: const 0_u32 };
          _9 = move _10 as i32 (Transmute);
          StorageDead(_10);
          StorageLive(_11);
          StorageLive(_12);
          _12 = MaybeUninit::<String>::uninit() -> [return: bb1, unwind unreachable];
      }
  
      bb1: {
-         _11 = move _12 as std::mem::ManuallyDrop<std::string::String> (Transmute);
+         _11 = move (_12.1: std::mem::ManuallyDrop<std::string::String>);
          StorageDead(_12);
          _0 = const ();
          StorageDead(_11);
          StorageDead(_9);
          StorageDead(_7);
          StorageDead(_5);
          StorageDead(_3);
          StorageDead(_1);
          return;
      }
  }
  
