| - // MIR for `enum_identical_variant` before GVN | 
 | + // MIR for `enum_identical_variant` after GVN | 
 |    | 
 |   fn enum_identical_variant(_1: &Enum1) -> Enum1 { | 
 |       debug v => _1; | 
 |       let mut _0: Enum1; | 
 |       let mut _2: isize; | 
 |       let _3: &AllCopy; | 
 |       let mut _8: i32; | 
 |       let mut _9: u64; | 
 |       let mut _10: [i8; 3]; | 
 |       let mut _11: AllCopy; | 
 |       let _12: &AllCopy; | 
 |       let mut _17: i32; | 
 |       let mut _18: u64; | 
 |       let mut _19: [i8; 3]; | 
 |       let mut _20: AllCopy; | 
 |       scope 1 { | 
 |           debug v => _3; | 
 |           let _4: i32; | 
 |           scope 2 { | 
 |               debug a => _4; | 
 |               let _5: u64; | 
 |               scope 3 { | 
 |                   debug b => _5; | 
 |                   let _6: [i8; 3]; | 
 |                   scope 4 { | 
 |                       debug c => _6; | 
 |                       let _7: AllCopy; | 
 |                       scope 5 { | 
 |                           debug all_copy => _7; | 
 |                       } | 
 |                   } | 
 |               } | 
 |           } | 
 |       } | 
 |       scope 6 { | 
 |           debug v => _12; | 
 |           let _13: i32; | 
 |           scope 7 { | 
 |               debug a => _13; | 
 |               let _14: u64; | 
 |               scope 8 { | 
 |                   debug b => _14; | 
 |                   let _15: [i8; 3]; | 
 |                   scope 9 { | 
 |                       debug c => _15; | 
 |                       let _16: AllCopy; | 
 |                       scope 10 { | 
 |                           debug all_copy => _16; | 
 |                       } | 
 |                   } | 
 |               } | 
 |           } | 
 |       } | 
 |    | 
 |       bb0: { | 
 |           _2 = discriminant((*_1)); | 
 |           switchInt(move _2) -> [0: bb3, 1: bb2, otherwise: bb1]; | 
 |       } | 
 |    | 
 |       bb1: { | 
 |           unreachable; | 
 |       } | 
 |    | 
 |       bb2: { | 
 |           StorageLive(_12); | 
 |           _12 = &(((*_1) as B).0: AllCopy); | 
 | -         StorageLive(_13); | 
 | -         _13 = copy ((*_12).0: i32); | 
 | -         StorageLive(_14); | 
 | -         _14 = copy ((*_12).1: u64); | 
 | -         StorageLive(_15); | 
 | -         _15 = copy ((*_12).2: [i8; 3]); | 
 | -         StorageLive(_16); | 
 | +         nop; | 
 | +         _13 = copy ((((*_1) as B).0: AllCopy).0: i32); | 
 | +         nop; | 
 | +         _14 = copy ((((*_1) as B).0: AllCopy).1: u64); | 
 | +         nop; | 
 | +         _15 = copy ((((*_1) as B).0: AllCopy).2: [i8; 3]); | 
 | +         nop; | 
 |           StorageLive(_17); | 
 |           _17 = copy _13; | 
 |           StorageLive(_18); | 
 |           _18 = copy _14; | 
 |           StorageLive(_19); | 
 |           _19 = copy _15; | 
 | -         _16 = AllCopy { a: move _17, b: move _18, c: move _19 }; | 
 | +         _16 = copy (((*_1) as B).0: AllCopy); | 
 |           StorageDead(_19); | 
 |           StorageDead(_18); | 
 |           StorageDead(_17); | 
 |           StorageLive(_20); | 
 | -         _20 = move _16; | 
 | -         _0 = Enum1::B(move _20); | 
 | +         _20 = copy _16; | 
 | +         _0 = copy (*_1); | 
 |           StorageDead(_20); | 
 | -         StorageDead(_16); | 
 | -         StorageDead(_15); | 
 | -         StorageDead(_14); | 
 | -         StorageDead(_13); | 
 | +         nop; | 
 | +         nop; | 
 | +         nop; | 
 | +         nop; | 
 |           StorageDead(_12); | 
 |           goto -> bb4; | 
 |       } | 
 |    | 
 |       bb3: { | 
 |           StorageLive(_3); | 
 |           _3 = &(((*_1) as A).0: AllCopy); | 
 | -         StorageLive(_4); | 
 | -         _4 = copy ((*_3).0: i32); | 
 | -         StorageLive(_5); | 
 | -         _5 = copy ((*_3).1: u64); | 
 | -         StorageLive(_6); | 
 | -         _6 = copy ((*_3).2: [i8; 3]); | 
 | -         StorageLive(_7); | 
 | +         nop; | 
 | +         _4 = copy ((((*_1) as A).0: AllCopy).0: i32); | 
 | +         nop; | 
 | +         _5 = copy ((((*_1) as A).0: AllCopy).1: u64); | 
 | +         nop; | 
 | +         _6 = copy ((((*_1) as A).0: AllCopy).2: [i8; 3]); | 
 | +         nop; | 
 |           StorageLive(_8); | 
 |           _8 = copy _4; | 
 |           StorageLive(_9); | 
 |           _9 = copy _5; | 
 |           StorageLive(_10); | 
 |           _10 = copy _6; | 
 | -         _7 = AllCopy { a: move _8, b: move _9, c: move _10 }; | 
 | +         _7 = copy (((*_1) as A).0: AllCopy); | 
 |           StorageDead(_10); | 
 |           StorageDead(_9); | 
 |           StorageDead(_8); | 
 |           StorageLive(_11); | 
 | -         _11 = move _7; | 
 | -         _0 = Enum1::A(move _11); | 
 | +         _11 = copy _7; | 
 | +         _0 = copy (*_1); | 
 |           StorageDead(_11); | 
 | -         StorageDead(_7); | 
 | -         StorageDead(_6); | 
 | -         StorageDead(_5); | 
 | -         StorageDead(_4); | 
 | +         nop; | 
 | +         nop; | 
 | +         nop; | 
 | +         nop; | 
 |           StorageDead(_3); | 
 |           goto -> bb4; | 
 |       } | 
 |    | 
 |       bb4: { | 
 |           return; | 
 |       } | 
 |   } | 
 |    |