- // MIR for `unary` before GVN
+ // MIR for `unary` after GVN
  
  fn unary(_1: i64) -> () {
      debug x => _1;
      let mut _0: ();
      let _2: ();
      let mut _3: i64;
      let mut _4: i64;
      let mut _5: i64;
      let _6: bool;
      let mut _7: i64;
      let _8: ();
      let mut _9: bool;
      let mut _10: bool;
      let mut _11: bool;
      let _12: ();
      let mut _13: bool;
      let mut _14: i64;
      let _15: ();
      let mut _16: bool;
      let mut _17: bool;
      let mut _18: i64;
      let _19: ();
      let mut _20: bool;
      let mut _21: i64;
      let _22: ();
      let mut _23: bool;
      let mut _24: bool;
      let mut _25: i64;
      scope 1 {
          debug b => _6;
      }
  
      bb0: {
          StorageLive(_2);
          StorageLive(_3);
          StorageLive(_4);
          StorageLive(_5);
          _5 = copy _1;
-         _4 = Neg(move _5);
+         _4 = Neg(copy _1);
          StorageDead(_5);
-         _3 = Neg(move _4);
+         _3 = copy _1;
          StorageDead(_4);
-         _2 = opaque::<i64>(move _3) -> [return: bb1, unwind continue];
+         _2 = opaque::<i64>(copy _1) -> [return: bb1, unwind continue];
      }
  
      bb1: {
          StorageDead(_3);
          StorageDead(_2);
-         StorageLive(_6);
+         nop;
          StorageLive(_7);
          _7 = copy _1;
-         _6 = Lt(move _7, const 13_i64);
+         _6 = Lt(copy _1, const 13_i64);
          StorageDead(_7);
          StorageLive(_8);
          StorageLive(_9);
          StorageLive(_10);
          StorageLive(_11);
          _11 = copy _6;
-         _10 = Not(move _11);
+         _10 = Not(copy _6);
          StorageDead(_11);
-         _9 = Not(move _10);
+         _9 = copy _6;
          StorageDead(_10);
-         _8 = opaque::<bool>(move _9) -> [return: bb2, unwind continue];
+         _8 = opaque::<bool>(copy _6) -> [return: bb2, unwind continue];
      }
  
      bb2: {
          StorageDead(_9);
          StorageDead(_8);
          StorageLive(_12);
-         StorageLive(_13);
+         nop;
          StorageLive(_14);
          _14 = copy _1;
-         _13 = Ne(move _14, const 15_i64);
+         _13 = Ne(copy _1, const 15_i64);
          StorageDead(_14);
-         _12 = opaque::<bool>(move _13) -> [return: bb3, unwind continue];
+         _12 = opaque::<bool>(copy _13) -> [return: bb3, unwind continue];
      }
  
      bb3: {
-         StorageDead(_13);
+         nop;
          StorageDead(_12);
          StorageLive(_15);
          StorageLive(_16);
          StorageLive(_17);
          StorageLive(_18);
          _18 = copy _1;
-         _17 = Eq(move _18, const 15_i64);
+         _17 = Eq(copy _1, const 15_i64);
          StorageDead(_18);
-         _16 = Not(move _17);
+         _16 = copy _13;
          StorageDead(_17);
-         _15 = opaque::<bool>(move _16) -> [return: bb4, unwind continue];
+         _15 = opaque::<bool>(copy _13) -> [return: bb4, unwind continue];
      }
  
      bb4: {
          StorageDead(_16);
          StorageDead(_15);
          StorageLive(_19);
-         StorageLive(_20);
+         nop;
          StorageLive(_21);
          _21 = copy _1;
-         _20 = Eq(move _21, const 35_i64);
+         _20 = Eq(copy _1, const 35_i64);
          StorageDead(_21);
-         _19 = opaque::<bool>(move _20) -> [return: bb5, unwind continue];
+         _19 = opaque::<bool>(copy _20) -> [return: bb5, unwind continue];
      }
  
      bb5: {
-         StorageDead(_20);
+         nop;
          StorageDead(_19);
          StorageLive(_22);
          StorageLive(_23);
          StorageLive(_24);
          StorageLive(_25);
          _25 = copy _1;
-         _24 = Ne(move _25, const 35_i64);
+         _24 = Ne(copy _1, const 35_i64);
          StorageDead(_25);
-         _23 = Not(move _24);
+         _23 = copy _20;
          StorageDead(_24);
-         _22 = opaque::<bool>(move _23) -> [return: bb6, unwind continue];
+         _22 = opaque::<bool>(copy _20) -> [return: bb6, unwind continue];
      }
  
      bb6: {
          StorageDead(_23);
          StorageDead(_22);
          _0 = const ();
-         StorageDead(_6);
+         nop;
          return;
      }
  }
  
