- // MIR for `dereferences` before GVN + // MIR for `dereferences` after GVN fn dereferences(_1: &mut u32, _2: &impl Copy, _3: &S) -> () { debug t => _1; debug u => _2; debug s => _3; let mut _0: (); let _4: (); let mut _5: u32; let _6: (); let mut _7: u32; let _8: *const u32; let _9: (); let mut _10: u32; let _11: (); let mut _12: u32; let _14: (); let mut _15: u32; let _16: (); let mut _17: u32; let _19: (); let mut _20: u32; let _21: (); let mut _22: u32; let _23: (); let mut _24: &u32; let _25: (); let mut _26: impl Copy; let _27: (); let mut _28: impl Copy; let _29: (); let mut _30: u32; let _31: (); let mut _32: u32; scope 1 { debug z => _8; let _13: *mut u32; scope 2 { debug z => _13; let _18: &u32; scope 3 { debug z => _18; } } } bb0: { StorageLive(_4); StorageLive(_5); _5 = copy (*_1); _4 = opaque::(move _5) -> [return: bb1, unwind unreachable]; } bb1: { StorageDead(_5); StorageDead(_4); StorageLive(_6); StorageLive(_7); _7 = copy (*_1); _6 = opaque::(move _7) -> [return: bb2, unwind unreachable]; } bb2: { StorageDead(_7); StorageDead(_6); StorageLive(_8); _8 = &raw const (*_1); StorageLive(_9); StorageLive(_10); _10 = copy (*_8); _9 = opaque::(move _10) -> [return: bb3, unwind unreachable]; } bb3: { StorageDead(_10); StorageDead(_9); StorageLive(_11); StorageLive(_12); _12 = copy (*_8); _11 = opaque::(move _12) -> [return: bb4, unwind unreachable]; } bb4: { StorageDead(_12); StorageDead(_11); StorageLive(_13); _13 = &raw mut (*_1); StorageLive(_14); StorageLive(_15); _15 = copy (*_13); _14 = opaque::(move _15) -> [return: bb5, unwind unreachable]; } bb5: { StorageDead(_15); StorageDead(_14); StorageLive(_16); StorageLive(_17); _17 = copy (*_13); _16 = opaque::(move _17) -> [return: bb6, unwind unreachable]; } bb6: { StorageDead(_17); StorageDead(_16); StorageLive(_18); _18 = &(*_1); StorageLive(_19); - StorageLive(_20); + nop; _20 = copy (*_18); - _19 = opaque::(move _20) -> [return: bb7, unwind unreachable]; + _19 = opaque::(copy _20) -> [return: bb7, unwind unreachable]; } bb7: { - StorageDead(_20); + nop; StorageDead(_19); StorageLive(_21); StorageLive(_22); - _22 = copy (*_18); - _21 = opaque::(move _22) -> [return: bb8, unwind unreachable]; + _22 = copy _20; + _21 = opaque::(copy _20) -> [return: bb8, unwind unreachable]; } bb8: { StorageDead(_22); StorageDead(_21); StorageLive(_23); StorageLive(_24); _24 = &(*_18); _23 = opaque::<&u32>(move _24) -> [return: bb9, unwind unreachable]; } bb9: { StorageDead(_24); StorageDead(_23); StorageLive(_25); StorageLive(_26); _26 = copy (*_2); _25 = opaque::(move _26) -> [return: bb10, unwind unreachable]; } bb10: { StorageDead(_26); StorageDead(_25); StorageLive(_27); StorageLive(_28); _28 = copy (*_2); _27 = opaque::(move _28) -> [return: bb11, unwind unreachable]; } bb11: { StorageDead(_28); StorageDead(_27); StorageLive(_29); - StorageLive(_30); + nop; _30 = copy ((*_3).0: u32); - _29 = opaque::(move _30) -> [return: bb12, unwind unreachable]; + _29 = opaque::(copy _30) -> [return: bb12, unwind unreachable]; } bb12: { - StorageDead(_30); + nop; StorageDead(_29); StorageLive(_31); StorageLive(_32); - _32 = copy ((*_3).0: u32); - _31 = opaque::(move _32) -> [return: bb13, unwind unreachable]; + _32 = copy _30; + _31 = opaque::(copy _30) -> [return: bb13, unwind unreachable]; } bb13: { StorageDead(_32); StorageDead(_31); _0 = const (); StorageDead(_18); StorageDead(_13); StorageDead(_8); return; } }