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