- // MIR for `opt3` before EarlyOtherwiseBranch
+ // MIR for `opt3` after EarlyOtherwiseBranch
  
  fn opt3(_1: Option2<u32>, _2: Option2<bool>) -> u32 {
      debug x => _1;
      debug y => _2;
      let mut _0: u32;
      let mut _3: (Option2<u32>, Option2<bool>);
      let mut _4: Option2<u32>;
      let mut _5: Option2<bool>;
      let mut _6: isize;
      let mut _7: isize;
      let mut _8: isize;
      let mut _9: isize;
      let _10: u32;
      let _11: bool;
+     let mut _12: isize;
+     let mut _13: bool;
      scope 1 {
          debug a => _10;
          debug b => _11;
      }
  
      bb0: {
          StorageLive(_3);
          StorageLive(_4);
          _4 = move _1;
          StorageLive(_5);
          _5 = move _2;
          _3 = (move _4, move _5);
          StorageDead(_5);
          StorageDead(_4);
          _9 = discriminant((_3.0: Option2<u32>));
-         switchInt(move _9) -> [0: bb2, 1: bb3, 2: bb4, otherwise: bb9];
+         _12 = discriminant((_3.1: Option2<bool>));
+         _13 = Ne(copy _9, move _12);
+         switchInt(move _13) -> [0: bb7, otherwise: bb1];
      }
  
      bb1: {
          _0 = const 1_u32;
-         goto -> bb8;
+         goto -> bb5;
      }
  
      bb2: {
-         _6 = discriminant((_3.1: Option2<bool>));
-         switchInt(move _6) -> [0: bb7, otherwise: bb1];
-     }
- 
-     bb3: {
-         _7 = discriminant((_3.1: Option2<bool>));
-         switchInt(move _7) -> [1: bb6, otherwise: bb1];
-     }
- 
-     bb4: {
-         _8 = discriminant((_3.1: Option2<bool>));
-         switchInt(move _8) -> [2: bb5, otherwise: bb1];
-     }
- 
-     bb5: {
          _0 = const 3_u32;
-         goto -> bb8;
+         goto -> bb5;
      }
  
-     bb6: {
+     bb3: {
          _0 = const 2_u32;
-         goto -> bb8;
+         goto -> bb5;
      }
  
-     bb7: {
+     bb4: {
          StorageLive(_10);
          _10 = copy (((_3.0: Option2<u32>) as Some).0: u32);
          StorageLive(_11);
          _11 = copy (((_3.1: Option2<bool>) as Some).0: bool);
          _0 = const 0_u32;
          StorageDead(_11);
          StorageDead(_10);
-         goto -> bb8;
+         goto -> bb5;
      }
  
-     bb8: {
+     bb5: {
          StorageDead(_3);
          return;
      }
  
-     bb9: {
+     bb6: {
          unreachable;
+     }
+ 
+     bb7: {
+         switchInt(copy _9) -> [0: bb4, 1: bb3, 2: bb2, otherwise: bb6];
      }
  }
  
