- // MIR for `arithmetic_checked` before GVN + // MIR for `arithmetic_checked` after GVN fn arithmetic_checked(_1: u64) -> () { debug x => _1; let mut _0: (); let _2: (); let mut _3: u64; let mut _4: u64; let mut _5: (u64, bool); let _6: (); let mut _7: u64; let mut _8: u64; let mut _9: (u64, bool); let _10: (); let mut _11: u64; let mut _12: u64; let mut _13: u64; let mut _14: (u64, bool); let _15: (); let mut _16: u64; let mut _17: u64; let mut _18: (u64, bool); let _19: (); let mut _20: u64; let mut _21: u64; let mut _22: (u64, bool); bb0: { StorageLive(_2); StorageLive(_3); StorageLive(_4); _4 = _1; - _5 = AddWithOverflow(_4, const 0_u64); - assert(!move (_5.1: bool), "attempt to compute `{} + {}`, which would overflow", move _4, const 0_u64) -> [success: bb1, unwind unreachable]; + _5 = AddWithOverflow(_1, const 0_u64); + assert(!const false, "attempt to compute `{} + {}`, which would overflow", _1, const 0_u64) -> [success: bb1, unwind unreachable]; } bb1: { - _3 = move (_5.0: u64); + _3 = _1; StorageDead(_4); - _2 = opaque::(move _3) -> [return: bb2, unwind unreachable]; + _2 = opaque::(_1) -> [return: bb2, unwind unreachable]; } bb2: { StorageDead(_3); StorageDead(_2); StorageLive(_6); StorageLive(_7); StorageLive(_8); _8 = _1; - _9 = SubWithOverflow(_8, const 0_u64); - assert(!move (_9.1: bool), "attempt to compute `{} - {}`, which would overflow", move _8, const 0_u64) -> [success: bb3, unwind unreachable]; + _9 = _5; + assert(!const false, "attempt to compute `{} - {}`, which would overflow", _1, const 0_u64) -> [success: bb3, unwind unreachable]; } bb3: { - _7 = move (_9.0: u64); + _7 = _1; StorageDead(_8); - _6 = opaque::(move _7) -> [return: bb4, unwind unreachable]; + _6 = opaque::(_1) -> [return: bb4, unwind unreachable]; } bb4: { StorageDead(_7); StorageDead(_6); StorageLive(_10); - StorageLive(_11); + nop; StorageLive(_12); _12 = _1; StorageLive(_13); _13 = _1; - _14 = SubWithOverflow(_12, _13); - assert(!move (_14.1: bool), "attempt to compute `{} - {}`, which would overflow", move _12, move _13) -> [success: bb5, unwind unreachable]; + _14 = const (0_u64, false); + assert(!const false, "attempt to compute `{} - {}`, which would overflow", _1, _1) -> [success: bb5, unwind unreachable]; } bb5: { - _11 = move (_14.0: u64); + _11 = const 0_u64; StorageDead(_13); StorageDead(_12); - _10 = opaque::(move _11) -> [return: bb6, unwind unreachable]; + _10 = opaque::(const 0_u64) -> [return: bb6, unwind unreachable]; } bb6: { - StorageDead(_11); + nop; StorageDead(_10); StorageLive(_15); StorageLive(_16); StorageLive(_17); _17 = _1; - _18 = MulWithOverflow(_17, const 0_u64); - assert(!move (_18.1: bool), "attempt to compute `{} * {}`, which would overflow", move _17, const 0_u64) -> [success: bb7, unwind unreachable]; + _18 = const (0_u64, false); + assert(!const false, "attempt to compute `{} * {}`, which would overflow", _1, const 0_u64) -> [success: bb7, unwind unreachable]; } bb7: { - _16 = move (_18.0: u64); + _16 = const 0_u64; StorageDead(_17); - _15 = opaque::(move _16) -> [return: bb8, unwind unreachable]; + _15 = opaque::(const 0_u64) -> [return: bb8, unwind unreachable]; } bb8: { StorageDead(_16); StorageDead(_15); StorageLive(_19); StorageLive(_20); StorageLive(_21); _21 = _1; - _22 = MulWithOverflow(_21, const 1_u64); - assert(!move (_22.1: bool), "attempt to compute `{} * {}`, which would overflow", move _21, const 1_u64) -> [success: bb9, unwind unreachable]; + _22 = _5; + assert(!const false, "attempt to compute `{} * {}`, which would overflow", _1, const 1_u64) -> [success: bb9, unwind unreachable]; } bb9: { - _20 = move (_22.0: u64); + _20 = _1; StorageDead(_21); - _19 = opaque::(move _20) -> [return: bb10, unwind unreachable]; + _19 = opaque::(_1) -> [return: bb10, unwind unreachable]; } bb10: { StorageDead(_20); StorageDead(_19); _0 = const (); return; } + } + + ALLOC0 (size: 16, align: 8) { + 00 00 00 00 00 00 00 00 00 __ __ __ __ __ __ __ │ .........░░░░░░░ }