- // MIR for `loop_deref_mut` before GVN + // MIR for `loop_deref_mut` after GVN fn loop_deref_mut(_1: &mut Value) -> Value { debug val => _1; let mut _0: Value; let _2: &Value; let _3: &Value; let mut _4: &Value; let mut _6: !; let mut _8: isize; let mut _9: !; let mut _10: (); let mut _12: i32; let _13: (); let mut _14: bool; let mut _15: !; let mut _16: Value; scope 1 { debug val_alias => _3; let mut _5: bool; scope 2 { debug stop => _5; let _7: i32; scope 3 { debug v => _7; let _11: Value; scope 4 { debug v => _11; } } } } bb0: { StorageLive(_4); _4 = &(*_1); _3 = get::(copy _4) -> [return: bb1, unwind unreachable]; } bb1: { StorageDead(_4); StorageLive(_5); _5 = const false; _8 = discriminant((*_3)); switchInt(move _8) -> [0: bb3, otherwise: bb2]; } bb2: { unreachable; } bb3: { - StorageLive(_7); + nop; _7 = copy (((*_3) as V0).0: i32); goto -> bb4; } bb4: { StorageLive(_11); StorageLive(_12); _12 = copy _7; - _11 = Value::V0(move _12); + _11 = Value::V0(copy _7); StorageDead(_12); StorageLive(_14); _14 = copy _5; switchInt(move _14) -> [0: bb6, otherwise: bb5]; } bb5: { _0 = move _11; StorageDead(_14); StorageDead(_11); - StorageDead(_7); + nop; StorageDead(_5); return; } bb6: { StorageDead(_14); _5 = const true; StorageLive(_16); - _16 = Value::V1; - (*_1) = move _16; + _16 = const Value::V1; + (*_1) = const Value::V1; StorageDead(_16); StorageDead(_11); goto -> bb4; } } + + ALLOC0 (size: 8, align: 4) { .. }