- // MIR for `unchecked` before LowerIntrinsics
+ // MIR for `unchecked` after LowerIntrinsics
  
  fn unchecked(_1: i32, _2: i32, _3: u32) -> () {
      debug a => _1;
      debug b => _2;
      debug c => _3;
      let mut _0: ();
      let _4: i32;
      let mut _5: i32;
      let mut _6: i32;
      let mut _8: i32;
      let mut _9: i32;
      let mut _11: i32;
      let mut _12: i32;
      let mut _14: i32;
      let mut _15: i32;
      let mut _17: i32;
      let mut _18: i32;
      let mut _20: i32;
      let mut _21: i32;
      let mut _23: i32;
      let mut _24: i32;
      let mut _26: i32;
      let mut _27: u32;
      let mut _29: i32;
      let mut _30: u32;
      scope 1 {
          debug _a => _4;
          let _7: i32;
          scope 2 {
              debug _b => _7;
              let _10: i32;
              scope 3 {
                  debug _c => _10;
                  let _13: i32;
                  scope 4 {
                      debug _x => _13;
                      let _16: i32;
                      scope 5 {
                          debug _y => _16;
                          let _19: i32;
                          scope 6 {
                              debug _i => _19;
                              let _22: i32;
                              scope 7 {
                                  debug _j => _22;
                                  let _25: i32;
                                  scope 8 {
                                      debug _k => _25;
                                      let _28: i32;
                                      scope 9 {
                                          debug _l => _28;
                                      }
                                  }
                              }
                          }
                      }
                  }
              }
          }
      }
  
      bb0: {
          StorageLive(_4);
          StorageLive(_5);
          _5 = copy _1;
          StorageLive(_6);
          _6 = copy _2;
-         _4 = unchecked_add::<i32>(move _5, move _6) -> [return: bb1, unwind unreachable];
+         _4 = AddUnchecked(move _5, move _6);
+         goto -> bb1;
      }
  
      bb1: {
          StorageDead(_6);
          StorageDead(_5);
          StorageLive(_7);
          StorageLive(_8);
          _8 = copy _1;
          StorageLive(_9);
          _9 = copy _2;
-         _7 = unchecked_sub::<i32>(move _8, move _9) -> [return: bb2, unwind unreachable];
+         _7 = SubUnchecked(move _8, move _9);
+         goto -> bb2;
      }
  
      bb2: {
          StorageDead(_9);
          StorageDead(_8);
          StorageLive(_10);
          StorageLive(_11);
          _11 = copy _1;
          StorageLive(_12);
          _12 = copy _2;
-         _10 = unchecked_mul::<i32>(move _11, move _12) -> [return: bb3, unwind unreachable];
+         _10 = MulUnchecked(move _11, move _12);
+         goto -> bb3;
      }
  
      bb3: {
          StorageDead(_12);
          StorageDead(_11);
          StorageLive(_13);
          StorageLive(_14);
          _14 = copy _1;
          StorageLive(_15);
          _15 = copy _2;
-         _13 = unchecked_div::<i32>(move _14, move _15) -> [return: bb4, unwind unreachable];
+         _13 = Div(move _14, move _15);
+         goto -> bb4;
      }
  
      bb4: {
          StorageDead(_15);
          StorageDead(_14);
          StorageLive(_16);
          StorageLive(_17);
          _17 = copy _1;
          StorageLive(_18);
          _18 = copy _2;
-         _16 = unchecked_rem::<i32>(move _17, move _18) -> [return: bb5, unwind unreachable];
+         _16 = Rem(move _17, move _18);
+         goto -> bb5;
      }
  
      bb5: {
          StorageDead(_18);
          StorageDead(_17);
          StorageLive(_19);
          StorageLive(_20);
          _20 = copy _1;
          StorageLive(_21);
          _21 = copy _2;
-         _19 = unchecked_shl::<i32, i32>(move _20, move _21) -> [return: bb6, unwind unreachable];
+         _19 = ShlUnchecked(move _20, move _21);
+         goto -> bb6;
      }
  
      bb6: {
          StorageDead(_21);
          StorageDead(_20);
          StorageLive(_22);
          StorageLive(_23);
          _23 = copy _1;
          StorageLive(_24);
          _24 = copy _2;
-         _22 = unchecked_shr::<i32, i32>(move _23, move _24) -> [return: bb7, unwind unreachable];
+         _22 = ShrUnchecked(move _23, move _24);
+         goto -> bb7;
      }
  
      bb7: {
          StorageDead(_24);
          StorageDead(_23);
          StorageLive(_25);
          StorageLive(_26);
          _26 = copy _1;
          StorageLive(_27);
          _27 = copy _3;
-         _25 = unchecked_shl::<i32, u32>(move _26, move _27) -> [return: bb8, unwind unreachable];
+         _25 = ShlUnchecked(move _26, move _27);
+         goto -> bb8;
      }
  
      bb8: {
          StorageDead(_27);
          StorageDead(_26);
          StorageLive(_28);
          StorageLive(_29);
          _29 = copy _1;
          StorageLive(_30);
          _30 = copy _3;
-         _28 = unchecked_shr::<i32, u32>(move _29, move _30) -> [return: bb9, unwind unreachable];
+         _28 = ShrUnchecked(move _29, move _30);
+         goto -> bb9;
      }
  
      bb9: {
          StorageDead(_30);
          StorageDead(_29);
          _0 = const ();
          StorageDead(_28);
          StorageDead(_25);
          StorageDead(_22);
          StorageDead(_19);
          StorageDead(_16);
          StorageDead(_13);
          StorageDead(_10);
          StorageDead(_7);
          StorageDead(_4);
          return;
      }
  }
  
