- // 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 = _1;
-         _4 = Neg(move _5);
+         _4 = Neg(_1);
          StorageDead(_5);
-         _3 = Neg(move _4);
+         _3 = _1;
          StorageDead(_4);
-         _2 = opaque::<i64>(move _3) -> [return: bb1, unwind continue];
+         _2 = opaque::<i64>(_1) -> [return: bb1, unwind continue];
      }
  
      bb1: {
          StorageDead(_3);
          StorageDead(_2);
-         StorageLive(_6);
+         nop;
          StorageLive(_7);
          _7 = _1;
-         _6 = Lt(move _7, const 13_i64);
+         _6 = Lt(_1, const 13_i64);
          StorageDead(_7);
          StorageLive(_8);
          StorageLive(_9);
          StorageLive(_10);
          StorageLive(_11);
          _11 = _6;
-         _10 = Not(move _11);
+         _10 = Not(_6);
          StorageDead(_11);
-         _9 = Not(move _10);
+         _9 = _6;
          StorageDead(_10);
-         _8 = opaque::<bool>(move _9) -> [return: bb2, unwind continue];
+         _8 = opaque::<bool>(_6) -> [return: bb2, unwind continue];
      }
  
      bb2: {
          StorageDead(_9);
          StorageDead(_8);
          StorageLive(_12);
-         StorageLive(_13);
+         nop;
          StorageLive(_14);
          _14 = _1;
-         _13 = Ne(move _14, const 15_i64);
+         _13 = Ne(_1, const 15_i64);
          StorageDead(_14);
-         _12 = opaque::<bool>(move _13) -> [return: bb3, unwind continue];
+         _12 = opaque::<bool>(_13) -> [return: bb3, unwind continue];
      }
  
      bb3: {
-         StorageDead(_13);
+         nop;
          StorageDead(_12);
          StorageLive(_15);
          StorageLive(_16);
          StorageLive(_17);
          StorageLive(_18);
          _18 = _1;
-         _17 = Eq(move _18, const 15_i64);
+         _17 = Eq(_1, const 15_i64);
          StorageDead(_18);
-         _16 = Not(move _17);
+         _16 = _13;
          StorageDead(_17);
-         _15 = opaque::<bool>(move _16) -> [return: bb4, unwind continue];
+         _15 = opaque::<bool>(_13) -> [return: bb4, unwind continue];
      }
  
      bb4: {
          StorageDead(_16);
          StorageDead(_15);
          StorageLive(_19);
-         StorageLive(_20);
+         nop;
          StorageLive(_21);
          _21 = _1;
-         _20 = Eq(move _21, const 35_i64);
+         _20 = Eq(_1, const 35_i64);
          StorageDead(_21);
-         _19 = opaque::<bool>(move _20) -> [return: bb5, unwind continue];
+         _19 = opaque::<bool>(_20) -> [return: bb5, unwind continue];
      }
  
      bb5: {
-         StorageDead(_20);
+         nop;
          StorageDead(_19);
          StorageLive(_22);
          StorageLive(_23);
          StorageLive(_24);
          StorageLive(_25);
          _25 = _1;
-         _24 = Ne(move _25, const 35_i64);
+         _24 = Ne(_1, const 35_i64);
          StorageDead(_25);
-         _23 = Not(move _24);
+         _23 = _20;
          StorageDead(_24);
-         _22 = opaque::<bool>(move _23) -> [return: bb6, unwind continue];
+         _22 = opaque::<bool>(_20) -> [return: bb6, unwind continue];
      }
  
      bb6: {
          StorageDead(_23);
          StorageDead(_22);
          _0 = const ();
-         StorageDead(_6);
+         nop;
          return;
      }
  }
  
