- // 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];
+         StorageLive(_12);
+         _12 = discriminant((_3.1: Option2<bool>));
+         StorageLive(_13);
+         _13 = Ne(copy _9, move _12);
+         StorageDead(_12);
+         switchInt(move _13) -> [0: bb7, otherwise: bb1];
      }
  
      bb1: {
+         StorageDead(_13);
          _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: {
+         StorageDead(_13);
+         switchInt(copy _9) -> [0: bb4, 1: bb3, 2: bb2, otherwise: bb6];
      }
  }
  
