| - // 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::<Value>(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); | |
| _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); | |
| 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) { .. } | |