- // MIR for `opt3` before EarlyOtherwiseBranch + // MIR for `opt3` after EarlyOtherwiseBranch fn opt3(_1: Option2, _2: Option2) -> u32 { debug x => _1; debug y => _2; let mut _0: u32; let mut _3: (Option2, Option2); let mut _4: Option2; let mut _5: Option2; 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)); - switchInt(move _9) -> [0: bb2, 1: bb3, 2: bb4, otherwise: bb9]; + StorageLive(_12); + _12 = discriminant((_3.1: Option2)); + 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)); - switchInt(move _6) -> [0: bb7, otherwise: bb1]; - } - - bb3: { - _7 = discriminant((_3.1: Option2)); - switchInt(move _7) -> [1: bb6, otherwise: bb1]; - } - - bb4: { - _8 = discriminant((_3.1: Option2)); - 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) as Some).0: u32); StorageLive(_11); _11 = copy (((_3.1: Option2) 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]; } }