- // MIR for `<impl at $DIR/gvn_clone.rs:14:10: 14:15>::clone` before GVN
+ // MIR for `<impl at $DIR/gvn_clone.rs:14:10: 14:15>::clone` after GVN
  
  fn <impl at $DIR/gvn_clone.rs:14:10: 14:15>::clone(_1: &AllCopy) -> AllCopy {
      debug self => _1;
      let mut _0: AllCopy;
      let mut _2: i32;
      let mut _3: &i32;
      let _4: &i32;
      let mut _5: u64;
      let mut _6: &u64;
      let _7: &u64;
      let mut _8: [i8; 3];
      let mut _9: &[i8; 3];
      let _10: &[i8; 3];
  
      bb0: {
          StorageLive(_2);
          StorageLive(_3);
-         StorageLive(_4);
+         nop;
          _4 = &((*_1).0: i32);
          _3 = copy _4;
-         _2 = copy (*_3);
+         _2 = copy ((*_1).0: i32);
          goto -> bb1;
      }
  
      bb1: {
          StorageDead(_3);
          StorageLive(_5);
          StorageLive(_6);
-         StorageLive(_7);
+         nop;
          _7 = &((*_1).1: u64);
          _6 = copy _7;
-         _5 = copy (*_6);
+         _5 = copy ((*_1).1: u64);
          goto -> bb2;
      }
  
      bb2: {
          StorageDead(_6);
          StorageLive(_8);
          StorageLive(_9);
-         StorageLive(_10);
+         nop;
          _10 = &((*_1).2: [i8; 3]);
          _9 = copy _10;
-         _8 = copy (*_9);
+         _8 = copy ((*_1).2: [i8; 3]);
          goto -> bb3;
      }
  
      bb3: {
          StorageDead(_9);
-         _0 = AllCopy { a: move _2, b: move _5, c: move _8 };
+         _0 = copy (*_1);
          StorageDead(_8);
          StorageDead(_5);
          StorageDead(_2);
-         StorageDead(_10);
-         StorageDead(_7);
-         StorageDead(_4);
+         nop;
+         nop;
+         nop;
          return;
      }
  }
  
