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