- // MIR for `unwrap_unchecked` before InstSimplify
+ // MIR for `unwrap_unchecked` after InstSimplify
  
  fn unwrap_unchecked(_1: Option<i32>) -> i32 {
      debug x => _1;
      let mut _0: i32;
      let mut _2: std::option::Option<i32>;
      scope 1 (inlined #[track_caller] Option::<i32>::unwrap_unchecked) {
          debug self => _2;
          let mut _3: isize;
          scope 2 {
              debug val => _0;
          }
          scope 3 (inlined unreachable_unchecked) {
              let mut _4: bool;
              let _5: ();
              scope 4 (inlined core::ub_checks::check_language_ub) {
                  scope 5 (inlined core::ub_checks::check_language_ub::runtime) {
                  }
              }
          }
      }
  
      bb0: {
          StorageLive(_2);
          _2 = _1;
          StorageLive(_3);
          StorageLive(_5);
          _3 = discriminant(_2);
          switchInt(move _3) -> [0: bb2, 1: bb3, otherwise: bb1];
      }
  
      bb1: {
          unreachable;
      }
  
      bb2: {
          StorageLive(_4);
-         _4 = UbChecks();
+         _4 = const false;
          assume(_4);
          _5 = unreachable_unchecked::precondition_check() -> [return: bb1, unwind unreachable];
      }
  
      bb3: {
          _0 = move ((_2 as Some).0: i32);
          StorageDead(_5);
          StorageDead(_3);
          StorageDead(_2);
          return;
      }
  }
  
