- // MIR for `too_complex` before JumpThreading
+ // MIR for `too_complex` after JumpThreading
  
  fn too_complex(_1: Result<i32, usize>) -> Option<i32> {
      debug x => _1;
      let mut _0: std::option::Option<i32>;
      let mut _2: std::ops::ControlFlow<usize, i32>;
      let mut _3: isize;
      let _4: i32;
      let mut _5: i32;
      let _6: usize;
      let mut _7: usize;
      let mut _8: isize;
      let _9: i32;
      let mut _10: i32;
      let _11: usize;
      scope 1 {
          debug v => _4;
      }
      scope 2 {
          debug r => _6;
      }
      scope 3 {
          debug v => _9;
      }
      scope 4 {
          debug r => _11;
      }
  
      bb0: {
          StorageLive(_2);
          _3 = discriminant(_1);
          switchInt(move _3) -> [0: bb3, 1: bb2, otherwise: bb1];
      }
  
      bb1: {
          unreachable;
      }
  
      bb2: {
          StorageLive(_6);
          _6 = copy ((_1 as Err).0: usize);
          StorageLive(_7);
          _7 = copy _6;
          _2 = ControlFlow::<usize, i32>::Break(move _7);
          StorageDead(_7);
          StorageDead(_6);
-         goto -> bb4;
+         goto -> bb8;
      }
  
      bb3: {
          StorageLive(_4);
          _4 = copy ((_1 as Ok).0: i32);
          StorageLive(_5);
          _5 = copy _4;
          _2 = ControlFlow::<usize, i32>::Continue(move _5);
          StorageDead(_5);
          StorageDead(_4);
          goto -> bb4;
      }
  
      bb4: {
          _8 = discriminant(_2);
-         switchInt(move _8) -> [0: bb6, 1: bb5, otherwise: bb1];
+         goto -> bb6;
      }
  
      bb5: {
          StorageLive(_11);
          _11 = copy ((_2 as Break).0: usize);
          _0 = Option::<i32>::None;
          StorageDead(_11);
          goto -> bb7;
      }
  
      bb6: {
          StorageLive(_9);
          _9 = copy ((_2 as Continue).0: i32);
          StorageLive(_10);
          _10 = copy _9;
          _0 = Option::<i32>::Some(move _10);
          StorageDead(_10);
          StorageDead(_9);
          goto -> bb7;
      }
  
      bb7: {
          StorageDead(_2);
          return;
+     }
+ 
+     bb8: {
+         _8 = discriminant(_2);
+         goto -> bb5;
      }
  }
  
