- // MIR for `nest_copy` before GVN + // MIR for `nest_copy` after GVN fn nest_copy(_1: &NestCopy) -> NestCopy { debug v => _1; let mut _0: NestCopy; let _2: i32; let mut _6: i32; let mut _7: u64; let mut _8: [i8; 3]; let mut _10: i32; let mut _11: AllCopy; scope 1 { debug a => _2; let _3: u64; scope 2 { debug b => _3; let _4: [i8; 3]; scope 3 { debug c => _4; let _5: AllCopy; scope 4 { debug all_copy => _5; let _9: i32; scope 5 { debug d => _9; } } } } } bb0: { - StorageLive(_2); + nop; _2 = copy (((*_1).1: AllCopy).0: i32); - StorageLive(_3); + nop; _3 = copy (((*_1).1: AllCopy).1: u64); - StorageLive(_4); + nop; _4 = copy (((*_1).1: AllCopy).2: [i8; 3]); - StorageLive(_5); + nop; StorageLive(_6); _6 = copy _2; StorageLive(_7); _7 = copy _3; StorageLive(_8); _8 = copy _4; - _5 = AllCopy { a: move _6, b: move _7, c: move _8 }; + _5 = copy ((*_1).1: AllCopy); StorageDead(_8); StorageDead(_7); StorageDead(_6); - StorageLive(_9); + nop; _9 = copy ((*_1).0: i32); StorageLive(_10); _10 = copy _9; StorageLive(_11); - _11 = move _5; - _0 = NestCopy { d: move _10, all_copy: move _11 }; + _11 = copy _5; + _0 = copy (*_1); StorageDead(_11); StorageDead(_10); - StorageDead(_9); - StorageDead(_5); - StorageDead(_4); - StorageDead(_3); - StorageDead(_2); + nop; + nop; + nop; + nop; + nop; return; } }