about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorAna-Maria Mihalache <mihalacheana.maria@yahoo.com>2020-04-02 21:09:01 +0000
committerAna-Maria Mihalache <mihalacheana.maria@yahoo.com>2020-04-07 15:09:01 +0000
commitef88769e4fd74cea5cc4f0c03259d6ee8a119e0f (patch)
tree487d2ee3c0f293e3ec836d982dd4ad43207b609d /src
parent39b62533c7f9d0581a6ea9b9fc2cc51f21c3b5b0 (diff)
downloadrust-ef88769e4fd74cea5cc4f0c03259d6ee8a119e0f.tar.gz
rust-ef88769e4fd74cea5cc4f0c03259d6ee8a119e0f.zip
--bless all mir-opt tests.
Diffstat (limited to 'src')
-rw-r--r--src/test/mir-opt/address-of.rs71
-rw-r--r--src/test/mir-opt/address-of/rustc.address_of_reborrow.SimplifyCfg-initial.after.mir320
-rw-r--r--src/test/mir-opt/address-of/rustc.borrow_and_cast.SimplifyCfg-initial.after.mir47
-rw-r--r--src/test/mir-opt/array-index-is-temporary.rs27
-rw-r--r--src/test/mir-opt/array-index-is-temporary/rustc.main.SimplifyCfg-elaborate-drops.after.mir91
-rw-r--r--src/test/mir-opt/box_expr.rs58
-rw-r--r--src/test/mir-opt/box_expr/rustc.main.ElaborateDrops.before.mir72
-rw-r--r--src/test/mir-opt/byte_slice.rs10
-rw-r--r--src/test/mir-opt/byte_slice/rustc.main.SimplifyCfg-elaborate-drops.after.mir46
-rw-r--r--src/test/mir-opt/combine_array_len.rs16
-rw-r--r--src/test/mir-opt/combine_array_len/rustc.norm2.InstCombine.diff101
-rw-r--r--src/test/mir-opt/copy_propagation.rs22
-rw-r--r--src/test/mir-opt/copy_propagation/rustc.test.CopyPropagation.diff25
-rw-r--r--src/test/mir-opt/copy_propagation_arg.rs101
-rw-r--r--src/test/mir-opt/copy_propagation_arg/rustc.arg_src.CopyPropagation.diff27
-rw-r--r--src/test/mir-opt/copy_propagation_arg/rustc.bar.CopyPropagation.diff37
-rw-r--r--src/test/mir-opt/copy_propagation_arg/rustc.baz.CopyPropagation.diff18
-rw-r--r--src/test/mir-opt/copy_propagation_arg/rustc.foo.CopyPropagation.diff31
-rw-r--r--src/test/mir-opt/deaggregator_test.rs25
-rw-r--r--src/test/mir-opt/deaggregator_test/rustc.bar.Deaggregator.diff34
-rw-r--r--src/test/mir-opt/deaggregator_test_enum.rs22
-rw-r--r--src/test/mir-opt/deaggregator_test_enum/rustc.bar.Deaggregator.diff21
-rw-r--r--src/test/mir-opt/deaggregator_test_enum_2.rs38
-rw-r--r--src/test/mir-opt/deaggregator_test_enum_2/rustc.test1.Deaggregator.diff47
-rw-r--r--src/test/mir-opt/deaggregator_test_multiple.rs35
-rw-r--r--src/test/mir-opt/deaggregator_test_multiple/rustc.test.Deaggregator.diff42
-rw-r--r--src/test/mir-opt/exponential-or.rs65
-rw-r--r--src/test/mir-opt/exponential-or/rustc.match_tuple.SimplifyCfg-initial.after.mir113
-rw-r--r--src/test/mir-opt/generator-drop-cleanup.rs38
-rw-r--r--src/test/mir-opt/generator-drop-cleanup/rustc.main-{{closure}}.generator_drop.0.mir53
-rw-r--r--src/test/mir-opt/generator-storage-dead-unwind.rs87
-rw-r--r--src/test/mir-opt/generator-storage-dead-unwind/rustc.main-{{closure}}.StateTransform.before.mir130
-rw-r--r--src/test/mir-opt/generator-tiny.rs11
-rw-r--r--src/test/mir-opt/generator-tiny/rustc.main-{{closure}}.generator_resume.0.mir72
-rw-r--r--src/test/mir-opt/graphviz.rs17
-rw-r--r--src/test/mir-opt/graphviz/rustc.main.mir_map.0.dot10
-rw-r--r--src/test/mir-opt/issue-38669.rs40
-rw-r--r--src/test/mir-opt/issue-38669/rustc.main.SimplifyCfg-initial.after.mir69
-rw-r--r--src/test/mir-opt/issue-41110.rs34
-rw-r--r--src/test/mir-opt/issue-41110/rustc.main.ElaborateDrops.after.mir111
-rw-r--r--src/test/mir-opt/issue-41110/rustc.test.ElaborateDrops.after.mir139
-rw-r--r--src/test/mir-opt/issue-41697.rs3
-rw-r--r--src/test/mir-opt/issue-41697/rustc.{{impl}}-{{constant}}.SimplifyCfg-qualify-consts.after.mir32
-rw-r--r--src/test/mir-opt/issue-41888.rs157
-rw-r--r--src/test/mir-opt/issue-41888/rustc.main.ElaborateDrops.after.mir250
-rw-r--r--src/test/mir-opt/issue-49232.rs80
-rw-r--r--src/test/mir-opt/issue-49232/rustc.main.mir_map.0.mir110
-rw-r--r--src/test/mir-opt/issue-62289.rs79
-rw-r--r--src/test/mir-opt/issue-62289/rustc.test.ElaborateDrops.before.mir127
-rw-r--r--src/test/mir-opt/loop_test.rs29
-rw-r--r--src/test/mir-opt/loop_test/rustc.main.SimplifyCfg-qualify-consts.after.mir69
-rw-r--r--src/test/mir-opt/match-arm-scopes.rs198
-rw-r--r--src/test/mir-opt/match-arm-scopes/rustc.complicated_match.ElaborateDrops.after.mir235
-rw-r--r--src/test/mir-opt/match-arm-scopes/rustc.complicated_match.SimplifyCfg-initial.after.mir246
-rw-r--r--src/test/mir-opt/match_false_edges.rs245
-rw-r--r--src/test/mir-opt/match_false_edges/rustc.full_tested_match.PromoteTemps.after.mir149
-rw-r--r--src/test/mir-opt/match_false_edges/rustc.full_tested_match2.PromoteTemps.before.mir141
-rw-r--r--src/test/mir-opt/match_false_edges/rustc.main.PromoteTemps.before.mir188
-rw-r--r--src/test/mir-opt/match_test.rs68
-rw-r--r--src/test/mir-opt/match_test/rustc.main.SimplifyCfg-initial.after.mir166
-rw-r--r--src/test/mir-opt/no-drop-for-inactive-variant.rs29
-rw-r--r--src/test/mir-opt/no-drop-for-inactive-variant/rustc.unwrap.SimplifyCfg-elaborate-drops.after.mir57
-rw-r--r--src/test/mir-opt/no-spurious-drop-after-call.rs16
-rw-r--r--src/test/mir-opt/no-spurious-drop-after-call/rustc.main.ElaborateDrops.before.mir58
-rw-r--r--src/test/mir-opt/packed-struct-drop-aligned.rs45
-rw-r--r--src/test/mir-opt/packed-struct-drop-aligned/rustc.main.SimplifyCfg-elaborate-drops.after.mir67
-rw-r--r--src/test/mir-opt/remove_fake_borrows.rs95
-rw-r--r--src/test/mir-opt/remove_fake_borrows/rustc.match_guard.CleanupNonCodegenStatements.diff88
-rw-r--r--src/test/mir-opt/retag.rs97
-rw-r--r--src/test/mir-opt/retag/rustc.main-{{closure}}.SimplifyCfg-elaborate-drops.after.mir22
-rw-r--r--src/test/mir-opt/retag/rustc.main.SimplifyCfg-elaborate-drops.after.mir227
-rw-r--r--src/test/mir-opt/retag/rustc.ptr-drop_in_place.Test.SimplifyCfg-make_shim.after.mir23
-rw-r--r--src/test/mir-opt/retag/rustc.{{impl}}-foo.SimplifyCfg-elaborate-drops.after.mir20
-rw-r--r--src/test/mir-opt/retag/rustc.{{impl}}-foo_shr.SimplifyCfg-elaborate-drops.after.mir15
-rw-r--r--src/test/mir-opt/retain-never-const.rs10
-rw-r--r--src/test/mir-opt/retain-never-const/rustc.no_codegen.PreCodegen.after.mir21
-rw-r--r--src/test/mir-opt/simple-match.rs30
-rw-r--r--src/test/mir-opt/simple-match/rustc.match_bool.mir_map.0.mir49
-rw-r--r--src/test/mir-opt/simplify-arm-identity.rs55
-rw-r--r--src/test/mir-opt/simplify-arm-identity/rustc.main.SimplifyArmIdentity.diff64
-rw-r--r--src/test/mir-opt/simplify-locals-removes-unused-consts.rs74
-rw-r--r--src/test/mir-opt/simplify-locals-removes-unused-consts/rustc.main.SimplifyLocals.diff132
-rw-r--r--src/test/mir-opt/simplify_cfg.rs42
-rw-r--r--src/test/mir-opt/simplify_cfg/rustc.main.SimplifyCfg-early-opt.diff62
-rw-r--r--src/test/mir-opt/simplify_cfg/rustc.main.SimplifyCfg-initial.diff96
-rw-r--r--src/test/mir-opt/simplify_if.rs20
-rw-r--r--src/test/mir-opt/simplify_if/rustc.main.SimplifyBranches-after-const-prop.diff55
-rw-r--r--src/test/mir-opt/simplify_match.rs22
-rw-r--r--src/test/mir-opt/simplify_match/rustc.main.SimplifyBranches-after-copy-prop.diff48
-rw-r--r--src/test/mir-opt/simplify_try.rs211
-rw-r--r--src/test/mir-opt/simplify_try/rustc.try_identity.SimplifyArmIdentity.diff70
-rw-r--r--src/test/mir-opt/simplify_try/rustc.try_identity.SimplifyBranchSame.after.mir55
-rw-r--r--src/test/mir-opt/simplify_try/rustc.try_identity.SimplifyLocals.after.mir35
-rw-r--r--src/test/mir-opt/slice-drop-shim.rs86
-rw-r--r--src/test/mir-opt/slice-drop-shim/rustc.ptr-drop_in_place.[std__string__String].AddMovesForPackedDrops.before.mir131
-rw-r--r--src/test/mir-opt/storage_live_dead_in_statics.rs159
-rw-r--r--src/test/mir-opt/storage_live_dead_in_statics/rustc.XXX.mir_map.0.mir670
-rw-r--r--src/test/mir-opt/storage_ranges.rs31
-rw-r--r--src/test/mir-opt/storage_ranges/rustc.main.nll.0.mir75
-rw-r--r--src/test/mir-opt/uniform_array_move_out.rs14
-rw-r--r--src/test/mir-opt/uniform_array_move_out/rustc.move_out_by_subslice.mir_map.0.mir111
-rw-r--r--src/test/mir-opt/uniform_array_move_out/rustc.move_out_from_end.mir_map.0.mir111
-rw-r--r--src/test/mir-opt/uninhabited-enum.rs22
-rw-r--r--src/test/mir-opt/uninhabited-enum/rustc.process_never.SimplifyLocals.after.mir19
-rw-r--r--src/test/mir-opt/uninhabited-enum/rustc.process_void.SimplifyLocals.after.mir19
-rw-r--r--src/test/mir-opt/uninhabited_enum_branching.rs177
-rw-r--r--src/test/mir-opt/uninhabited_enum_branching/rustc.main.SimplifyCfg-after-uninhabited-enum-branching.after.mir70
-rw-r--r--src/test/mir-opt/uninhabited_enum_branching/rustc.main.UninhabitedEnumBranching.diff106
-rw-r--r--src/test/mir-opt/unreachable.rs60
-rw-r--r--src/test/mir-opt/unreachable/rustc.main.UnreachablePropagation.diff90
-rw-r--r--src/test/mir-opt/unreachable_asm.rs50
-rw-r--r--src/test/mir-opt/unreachable_asm/rustc.main.UnreachablePropagation.diff96
-rw-r--r--src/test/mir-opt/unreachable_asm_2.rs60
-rw-r--r--src/test/mir-opt/unreachable_asm_2/rustc.main.UnreachablePropagation.diff105
-rw-r--r--src/test/mir-opt/unreachable_diverging.rs47
-rw-r--r--src/test/mir-opt/unreachable_diverging/rustc.main.UnreachablePropagation.diff89
-rw-r--r--src/test/mir-opt/unusual-item-types.rs67
-rw-r--r--src/test/mir-opt/unusual-item-types/rustc.E-V-{{constant}}.mir_map.0.mir20
-rw-r--r--src/test/mir-opt/unusual-item-types/rustc.Test-X-{{constructor}}.mir_map.0.mir11
-rw-r--r--src/test/mir-opt/unusual-item-types/rustc.ptr-drop_in_place.std__vec__Vec_i32_.AddMovesForPackedDrops.before.mir46
-rw-r--r--src/test/mir-opt/unusual-item-types/rustc.{{impl}}-ASSOCIATED_CONSTANT.mir_map.0.mir20
-rw-r--r--src/test/mir-opt/while-storage.rs39
-rw-r--r--src/test/mir-opt/while-storage/rustc.while_loop.PreCodegen.after.mir62
123 files changed, 6572 insertions, 3046 deletions
diff --git a/src/test/mir-opt/address-of.rs b/src/test/mir-opt/address-of.rs
index bbd1ca68a86..6cd14ccf434 100644
--- a/src/test/mir-opt/address-of.rs
+++ b/src/test/mir-opt/address-of.rs
@@ -1,3 +1,5 @@
+// EMIT_MIR rustc.address_of_reborrow.SimplifyCfg-initial.after.mir
+
 fn address_of_reborrow() {
     let y = &[0; 10];
     let mut z = &mut [0; 10];
@@ -35,6 +37,7 @@ fn address_of_reborrow() {
 }
 
 // The normal borrows here should be preserved
+// EMIT_MIR rustc.borrow_and_cast.SimplifyCfg-initial.after.mir
 fn borrow_and_cast(mut x: i32) {
     let p = &x as *const i32;
     let q = &mut x as *const i32;
@@ -42,71 +45,3 @@ fn borrow_and_cast(mut x: i32) {
 }
 
 fn main() {}
-
-// START rustc.address_of_reborrow.SimplifyCfg-initial.after.mir
-// bb0: {
-//  ...
-//  _5 = &raw const (*_1); // & to *const casts
-//  ...
-//  _7 = &raw const (*_1);
-//  ...
-//  _11 = &raw const (*_1);
-//  ...
-//  _14 = &raw const (*_1);
-//  ...
-//  _16 = &raw const (*_1);
-//  ...
-//  _17 = &raw const (*_1); // & to *const coercions
-//  ...
-//  _18 = &raw const (*_1);
-//  ...
-//  _20 = &raw const (*_1);
-//  ...
-//  _22 = &raw const (*_1);
-// ...
-//  _24 = &raw const (*_2); // &mut to *const casts
-// ...
-//  _26 = &raw const (*_2);
-// ...
-//  _30 = &raw const (*_2);
-// ...
-//  _33 = &raw const (*_2);
-// ...
-//  _34 = &raw const (*_2); // &mut to *const coercions
-// ...
-//  _35 = &raw const (*_2);
-// ...
-//  _37 = &raw const (*_2);
-// ...
-//  _39 = &raw const (*_2);
-// ...
-//  _41 = &raw mut (*_2); // &mut to *mut casts
-// ...
-//  _43 = &raw mut (*_2);
-// ...
-//  _47 = &raw mut (*_2);
-// ...
-//  _50 = &raw mut (*_2);
-// ...
-//  _51 = &raw mut (*_2); // &mut to *mut coercions
-// ...
-//  _52 = &raw mut (*_2);
-// ...
-//  _54 = &raw mut (*_2);
-// ...
-//  _56 = &raw mut (*_2);
-// ...
-// }
-// END rustc.address_of_reborrow.SimplifyCfg-initial.after.mir
-
-// START rustc.borrow_and_cast.EraseRegions.after.mir
-// bb0: {
-//  ...
-//  _4 = &_1;
-//  ...
-//  _7 = &mut _1;
-//  ...
-//  _10 = &mut _1;
-//  ...
-// }
-// END rustc.borrow_and_cast.EraseRegions.after.mir
diff --git a/src/test/mir-opt/address-of/rustc.address_of_reborrow.SimplifyCfg-initial.after.mir b/src/test/mir-opt/address-of/rustc.address_of_reborrow.SimplifyCfg-initial.after.mir
new file mode 100644
index 00000000000..af07da4cfe0
--- /dev/null
+++ b/src/test/mir-opt/address-of/rustc.address_of_reborrow.SimplifyCfg-initial.after.mir
@@ -0,0 +1,320 @@
+// MIR for `address_of_reborrow` after SimplifyCfg-initial
+
+| User Type Annotations
+| 0: Canonical { max_universe: U0, variables: [CanonicalVarInfo { kind: Ty(General(U0)) }], value: Ty(*const ^0) } at $DIR/address-of.rs:7:5: 7:18
+| 1: Canonical { max_universe: U0, variables: [CanonicalVarInfo { kind: Region(U0) }], value: Ty(*const dyn std::marker::Send) } at $DIR/address-of.rs:9:5: 9:25
+| 2: Canonical { max_universe: U0, variables: [CanonicalVarInfo { kind: Ty(General(U0)) }], value: Ty(*const ^0) } at $DIR/address-of.rs:13:12: 13:20
+| 3: Canonical { max_universe: U0, variables: [CanonicalVarInfo { kind: Ty(General(U0)) }], value: Ty(*const ^0) } at $DIR/address-of.rs:13:12: 13:20
+| 4: Canonical { max_universe: U0, variables: [], value: Ty(*const [i32; 10]) } at $DIR/address-of.rs:14:12: 14:28
+| 5: Canonical { max_universe: U0, variables: [], value: Ty(*const [i32; 10]) } at $DIR/address-of.rs:14:12: 14:28
+| 6: Canonical { max_universe: U0, variables: [CanonicalVarInfo { kind: Region(U0) }], value: Ty(*const dyn std::marker::Send) } at $DIR/address-of.rs:15:12: 15:27
+| 7: Canonical { max_universe: U0, variables: [CanonicalVarInfo { kind: Region(U0) }], value: Ty(*const dyn std::marker::Send) } at $DIR/address-of.rs:15:12: 15:27
+| 8: Canonical { max_universe: U0, variables: [], value: Ty(*const [i32]) } at $DIR/address-of.rs:16:12: 16:24
+| 9: Canonical { max_universe: U0, variables: [], value: Ty(*const [i32]) } at $DIR/address-of.rs:16:12: 16:24
+| 10: Canonical { max_universe: U0, variables: [CanonicalVarInfo { kind: Ty(General(U0)) }], value: Ty(*const ^0) } at $DIR/address-of.rs:18:5: 18:18
+| 11: Canonical { max_universe: U3, variables: [CanonicalVarInfo { kind: Region(U3) }], value: Ty(*const dyn std::marker::Send) } at $DIR/address-of.rs:20:5: 20:25
+| 12: Canonical { max_universe: U0, variables: [CanonicalVarInfo { kind: Ty(General(U0)) }], value: Ty(*const ^0) } at $DIR/address-of.rs:23:12: 23:20
+| 13: Canonical { max_universe: U0, variables: [CanonicalVarInfo { kind: Ty(General(U0)) }], value: Ty(*const ^0) } at $DIR/address-of.rs:23:12: 23:20
+| 14: Canonical { max_universe: U0, variables: [], value: Ty(*const [i32; 10]) } at $DIR/address-of.rs:24:12: 24:28
+| 15: Canonical { max_universe: U0, variables: [], value: Ty(*const [i32; 10]) } at $DIR/address-of.rs:24:12: 24:28
+| 16: Canonical { max_universe: U0, variables: [CanonicalVarInfo { kind: Region(U0) }], value: Ty(*const dyn std::marker::Send) } at $DIR/address-of.rs:25:12: 25:27
+| 17: Canonical { max_universe: U0, variables: [CanonicalVarInfo { kind: Region(U0) }], value: Ty(*const dyn std::marker::Send) } at $DIR/address-of.rs:25:12: 25:27
+| 18: Canonical { max_universe: U0, variables: [], value: Ty(*const [i32]) } at $DIR/address-of.rs:26:12: 26:24
+| 19: Canonical { max_universe: U0, variables: [], value: Ty(*const [i32]) } at $DIR/address-of.rs:26:12: 26:24
+| 20: Canonical { max_universe: U0, variables: [CanonicalVarInfo { kind: Ty(General(U0)) }], value: Ty(*mut ^0) } at $DIR/address-of.rs:28:5: 28:16
+| 21: Canonical { max_universe: U6, variables: [CanonicalVarInfo { kind: Region(U6) }], value: Ty(*mut dyn std::marker::Send) } at $DIR/address-of.rs:30:5: 30:23
+| 22: Canonical { max_universe: U0, variables: [CanonicalVarInfo { kind: Ty(General(U0)) }], value: Ty(*mut ^0) } at $DIR/address-of.rs:33:12: 33:18
+| 23: Canonical { max_universe: U0, variables: [CanonicalVarInfo { kind: Ty(General(U0)) }], value: Ty(*mut ^0) } at $DIR/address-of.rs:33:12: 33:18
+| 24: Canonical { max_universe: U0, variables: [], value: Ty(*mut [i32; 10]) } at $DIR/address-of.rs:34:12: 34:26
+| 25: Canonical { max_universe: U0, variables: [], value: Ty(*mut [i32; 10]) } at $DIR/address-of.rs:34:12: 34:26
+| 26: Canonical { max_universe: U0, variables: [CanonicalVarInfo { kind: Region(U0) }], value: Ty(*mut dyn std::marker::Send) } at $DIR/address-of.rs:35:12: 35:25
+| 27: Canonical { max_universe: U0, variables: [CanonicalVarInfo { kind: Region(U0) }], value: Ty(*mut dyn std::marker::Send) } at $DIR/address-of.rs:35:12: 35:25
+| 28: Canonical { max_universe: U0, variables: [], value: Ty(*mut [i32]) } at $DIR/address-of.rs:36:12: 36:22
+| 29: Canonical { max_universe: U0, variables: [], value: Ty(*mut [i32]) } at $DIR/address-of.rs:36:12: 36:22
+|
+fn address_of_reborrow() -> () {
+    let mut _0: ();                      // return place in scope 0 at $DIR/address-of.rs:3:26: 3:26
+    let _1: &[i32; 10];                  // in scope 0 at $DIR/address-of.rs:4:9: 4:10
+    let _2: [i32; 10];                   // in scope 0 at $DIR/address-of.rs:4:14: 4:21
+    let mut _4: [i32; 10];               // in scope 0 at $DIR/address-of.rs:5:22: 5:29
+    let _5: *const [i32; 10];            // in scope 0 at $DIR/address-of.rs:7:5: 7:18
+    let mut _6: *const [i32; 10];        // in scope 0 at $DIR/address-of.rs:7:5: 7:18
+    let _7: *const [i32; 10];            // in scope 0 at $DIR/address-of.rs:8:5: 8:26
+    let _8: *const dyn std::marker::Send; // in scope 0 at $DIR/address-of.rs:9:5: 9:25
+    let mut _9: *const dyn std::marker::Send; // in scope 0 at $DIR/address-of.rs:9:5: 9:25
+    let mut _10: *const [i32; 10];       // in scope 0 at $DIR/address-of.rs:9:5: 9:6
+    let _11: *const [i32];               // in scope 0 at $DIR/address-of.rs:10:5: 10:22
+    let mut _12: *const [i32; 10];       // in scope 0 at $DIR/address-of.rs:10:5: 10:6
+    let _13: *const i32;                 // in scope 0 at $DIR/address-of.rs:11:5: 11:20
+    let mut _14: *const [i32; 10];       // in scope 0 at $DIR/address-of.rs:11:5: 11:6
+    let mut _18: *const [i32; 10];       // in scope 0 at $DIR/address-of.rs:15:30: 15:31
+    let mut _20: *const [i32; 10];       // in scope 0 at $DIR/address-of.rs:16:27: 16:28
+    let _21: *const [i32; 10];           // in scope 0 at $DIR/address-of.rs:18:5: 18:18
+    let mut _22: *const [i32; 10];       // in scope 0 at $DIR/address-of.rs:18:5: 18:18
+    let _23: *const [i32; 10];           // in scope 0 at $DIR/address-of.rs:19:5: 19:26
+    let _24: *const dyn std::marker::Send; // in scope 0 at $DIR/address-of.rs:20:5: 20:25
+    let mut _25: *const dyn std::marker::Send; // in scope 0 at $DIR/address-of.rs:20:5: 20:25
+    let mut _26: *const [i32; 10];       // in scope 0 at $DIR/address-of.rs:20:5: 20:6
+    let _27: *const [i32];               // in scope 0 at $DIR/address-of.rs:21:5: 21:22
+    let mut _28: *const [i32; 10];       // in scope 0 at $DIR/address-of.rs:21:5: 21:6
+    let mut _32: *const [i32; 10];       // in scope 0 at $DIR/address-of.rs:25:30: 25:31
+    let mut _34: *const [i32; 10];       // in scope 0 at $DIR/address-of.rs:26:27: 26:28
+    let _35: *mut [i32; 10];             // in scope 0 at $DIR/address-of.rs:28:5: 28:16
+    let mut _36: *mut [i32; 10];         // in scope 0 at $DIR/address-of.rs:28:5: 28:16
+    let _37: *mut [i32; 10];             // in scope 0 at $DIR/address-of.rs:29:5: 29:24
+    let _38: *mut dyn std::marker::Send; // in scope 0 at $DIR/address-of.rs:30:5: 30:23
+    let mut _39: *mut dyn std::marker::Send; // in scope 0 at $DIR/address-of.rs:30:5: 30:23
+    let mut _40: *mut [i32; 10];         // in scope 0 at $DIR/address-of.rs:30:5: 30:6
+    let _41: *mut [i32];                 // in scope 0 at $DIR/address-of.rs:31:5: 31:20
+    let mut _42: *mut [i32; 10];         // in scope 0 at $DIR/address-of.rs:31:5: 31:6
+    let mut _46: *mut [i32; 10];         // in scope 0 at $DIR/address-of.rs:35:28: 35:29
+    let mut _48: *mut [i32; 10];         // in scope 0 at $DIR/address-of.rs:36:25: 36:26
+    scope 1 {
+        debug y => _1;                   // in scope 1 at $DIR/address-of.rs:4:9: 4:10
+        let mut _3: &mut [i32; 10];      // in scope 1 at $DIR/address-of.rs:5:9: 5:14
+        scope 2 {
+            debug z => _3;               // in scope 2 at $DIR/address-of.rs:5:9: 5:14
+            let _15: *const [i32; 10] as UserTypeProjection { base: UserType(2), projs: [] }; // in scope 2 at $DIR/address-of.rs:13:9: 13:10
+            scope 3 {
+                debug p => _15;          // in scope 3 at $DIR/address-of.rs:13:9: 13:10
+                let _16: *const [i32; 10] as UserTypeProjection { base: UserType(4), projs: [] }; // in scope 3 at $DIR/address-of.rs:14:9: 14:10
+                scope 4 {
+                    debug p => _16;      // in scope 4 at $DIR/address-of.rs:14:9: 14:10
+                    let _17: *const dyn std::marker::Send as UserTypeProjection { base: UserType(6), projs: [] }; // in scope 4 at $DIR/address-of.rs:15:9: 15:10
+                    scope 5 {
+                        debug p => _17;  // in scope 5 at $DIR/address-of.rs:15:9: 15:10
+                        let _19: *const [i32] as UserTypeProjection { base: UserType(8), projs: [] }; // in scope 5 at $DIR/address-of.rs:16:9: 16:10
+                        scope 6 {
+                            debug p => _19; // in scope 6 at $DIR/address-of.rs:16:9: 16:10
+                            let _29: *const [i32; 10] as UserTypeProjection { base: UserType(12), projs: [] }; // in scope 6 at $DIR/address-of.rs:23:9: 23:10
+                            scope 7 {
+                                debug p => _29; // in scope 7 at $DIR/address-of.rs:23:9: 23:10
+                                let _30: *const [i32; 10] as UserTypeProjection { base: UserType(14), projs: [] }; // in scope 7 at $DIR/address-of.rs:24:9: 24:10
+                                scope 8 {
+                                    debug p => _30; // in scope 8 at $DIR/address-of.rs:24:9: 24:10
+                                    let _31: *const dyn std::marker::Send as UserTypeProjection { base: UserType(16), projs: [] }; // in scope 8 at $DIR/address-of.rs:25:9: 25:10
+                                    scope 9 {
+                                        debug p => _31; // in scope 9 at $DIR/address-of.rs:25:9: 25:10
+                                        let _33: *const [i32] as UserTypeProjection { base: UserType(18), projs: [] }; // in scope 9 at $DIR/address-of.rs:26:9: 26:10
+                                        scope 10 {
+                                            debug p => _33; // in scope 10 at $DIR/address-of.rs:26:9: 26:10
+                                            let _43: *mut [i32; 10] as UserTypeProjection { base: UserType(22), projs: [] }; // in scope 10 at $DIR/address-of.rs:33:9: 33:10
+                                            scope 11 {
+                                                debug p => _43; // in scope 11 at $DIR/address-of.rs:33:9: 33:10
+                                                let _44: *mut [i32; 10] as UserTypeProjection { base: UserType(24), projs: [] }; // in scope 11 at $DIR/address-of.rs:34:9: 34:10
+                                                scope 12 {
+                                                    debug p => _44; // in scope 12 at $DIR/address-of.rs:34:9: 34:10
+                                                    let _45: *mut dyn std::marker::Send as UserTypeProjection { base: UserType(26), projs: [] }; // in scope 12 at $DIR/address-of.rs:35:9: 35:10
+                                                    scope 13 {
+                                                        debug p => _45; // in scope 13 at $DIR/address-of.rs:35:9: 35:10
+                                                        let _47: *mut [i32] as UserTypeProjection { base: UserType(28), projs: [] }; // in scope 13 at $DIR/address-of.rs:36:9: 36:10
+                                                        scope 14 {
+                                                            debug p => _47; // in scope 14 at $DIR/address-of.rs:36:9: 36:10
+                                                        }
+                                                    }
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    bb0: {
+        StorageLive(_1);                 // bb0[0]: scope 0 at $DIR/address-of.rs:4:9: 4:10
+        StorageLive(_2);                 // bb0[1]: scope 0 at $DIR/address-of.rs:4:14: 4:21
+        _2 = [const 0i32; 10];           // bb0[2]: scope 0 at $DIR/address-of.rs:4:14: 4:21
+                                         // ty::Const
+                                         // + ty: i32
+                                         // + val: Value(Scalar(0x00000000))
+                                         // mir::Constant
+                                         // + span: $DIR/address-of.rs:4:15: 4:16
+                                         // + literal: Const { ty: i32, val: Value(Scalar(0x00000000)) }
+        _1 = &_2;                        // bb0[3]: scope 0 at $DIR/address-of.rs:4:13: 4:21
+        FakeRead(ForLet, _1);            // bb0[4]: scope 0 at $DIR/address-of.rs:4:9: 4:10
+        StorageLive(_3);                 // bb0[5]: scope 1 at $DIR/address-of.rs:5:9: 5:14
+        StorageLive(_4);                 // bb0[6]: scope 1 at $DIR/address-of.rs:5:22: 5:29
+        _4 = [const 0i32; 10];           // bb0[7]: scope 1 at $DIR/address-of.rs:5:22: 5:29
+                                         // ty::Const
+                                         // + ty: i32
+                                         // + val: Value(Scalar(0x00000000))
+                                         // mir::Constant
+                                         // + span: $DIR/address-of.rs:5:23: 5:24
+                                         // + literal: Const { ty: i32, val: Value(Scalar(0x00000000)) }
+        _3 = &mut _4;                    // bb0[8]: scope 1 at $DIR/address-of.rs:5:17: 5:29
+        FakeRead(ForLet, _3);            // bb0[9]: scope 1 at $DIR/address-of.rs:5:9: 5:14
+        StorageLive(_5);                 // bb0[10]: scope 2 at $DIR/address-of.rs:7:5: 7:18
+        StorageLive(_6);                 // bb0[11]: scope 2 at $DIR/address-of.rs:7:5: 7:18
+        _6 = &raw const (*_1);           // bb0[12]: scope 2 at $DIR/address-of.rs:7:5: 7:6
+        AscribeUserType(_6, o, UserTypeProjection { base: UserType(0), projs: [] }); // bb0[13]: scope 2 at $DIR/address-of.rs:7:5: 7:18
+        _5 = _6;                         // bb0[14]: scope 2 at $DIR/address-of.rs:7:5: 7:18
+        StorageDead(_6);                 // bb0[15]: scope 2 at $DIR/address-of.rs:7:18: 7:19
+        StorageDead(_5);                 // bb0[16]: scope 2 at $DIR/address-of.rs:7:18: 7:19
+        StorageLive(_7);                 // bb0[17]: scope 2 at $DIR/address-of.rs:8:5: 8:26
+        _7 = &raw const (*_1);           // bb0[18]: scope 2 at $DIR/address-of.rs:8:5: 8:6
+        StorageDead(_7);                 // bb0[19]: scope 2 at $DIR/address-of.rs:8:26: 8:27
+        StorageLive(_8);                 // bb0[20]: scope 2 at $DIR/address-of.rs:9:5: 9:25
+        StorageLive(_9);                 // bb0[21]: scope 2 at $DIR/address-of.rs:9:5: 9:25
+        StorageLive(_10);                // bb0[22]: scope 2 at $DIR/address-of.rs:9:5: 9:6
+        _10 = &raw const (*_1);          // bb0[23]: scope 2 at $DIR/address-of.rs:9:5: 9:6
+        _9 = move _10 as *const dyn std::marker::Send (Pointer(Unsize)); // bb0[24]: scope 2 at $DIR/address-of.rs:9:5: 9:6
+        StorageDead(_10);                // bb0[25]: scope 2 at $DIR/address-of.rs:9:5: 9:6
+        AscribeUserType(_9, o, UserTypeProjection { base: UserType(1), projs: [] }); // bb0[26]: scope 2 at $DIR/address-of.rs:9:5: 9:25
+        _8 = _9;                         // bb0[27]: scope 2 at $DIR/address-of.rs:9:5: 9:25
+        StorageDead(_9);                 // bb0[28]: scope 2 at $DIR/address-of.rs:9:25: 9:26
+        StorageDead(_8);                 // bb0[29]: scope 2 at $DIR/address-of.rs:9:25: 9:26
+        StorageLive(_11);                // bb0[30]: scope 2 at $DIR/address-of.rs:10:5: 10:22
+        StorageLive(_12);                // bb0[31]: scope 2 at $DIR/address-of.rs:10:5: 10:6
+        _12 = &raw const (*_1);          // bb0[32]: scope 2 at $DIR/address-of.rs:10:5: 10:6
+        _11 = move _12 as *const [i32] (Pointer(Unsize)); // bb0[33]: scope 2 at $DIR/address-of.rs:10:5: 10:6
+        StorageDead(_12);                // bb0[34]: scope 2 at $DIR/address-of.rs:10:5: 10:6
+        StorageDead(_11);                // bb0[35]: scope 2 at $DIR/address-of.rs:10:22: 10:23
+        StorageLive(_13);                // bb0[36]: scope 2 at $DIR/address-of.rs:11:5: 11:20
+        StorageLive(_14);                // bb0[37]: scope 2 at $DIR/address-of.rs:11:5: 11:6
+        _14 = &raw const (*_1);          // bb0[38]: scope 2 at $DIR/address-of.rs:11:5: 11:6
+        _13 = move _14 as *const i32 (Pointer(ArrayToPointer)); // bb0[39]: scope 2 at $DIR/address-of.rs:11:5: 11:20
+        StorageDead(_14);                // bb0[40]: scope 2 at $DIR/address-of.rs:11:19: 11:20
+        StorageDead(_13);                // bb0[41]: scope 2 at $DIR/address-of.rs:11:20: 11:21
+        StorageLive(_15);                // bb0[42]: scope 2 at $DIR/address-of.rs:13:9: 13:10
+        _15 = &raw const (*_1);          // bb0[43]: scope 2 at $DIR/address-of.rs:13:23: 13:24
+        FakeRead(ForLet, _15);           // bb0[44]: scope 2 at $DIR/address-of.rs:13:9: 13:10
+        AscribeUserType(_15, o, UserTypeProjection { base: UserType(3), projs: [] }); // bb0[45]: scope 2 at $DIR/address-of.rs:13:12: 13:20
+        StorageLive(_16);                // bb0[46]: scope 3 at $DIR/address-of.rs:14:9: 14:10
+        _16 = &raw const (*_1);          // bb0[47]: scope 3 at $DIR/address-of.rs:14:31: 14:32
+        FakeRead(ForLet, _16);           // bb0[48]: scope 3 at $DIR/address-of.rs:14:9: 14:10
+        AscribeUserType(_16, o, UserTypeProjection { base: UserType(5), projs: [] }); // bb0[49]: scope 3 at $DIR/address-of.rs:14:12: 14:28
+        StorageLive(_17);                // bb0[50]: scope 4 at $DIR/address-of.rs:15:9: 15:10
+        StorageLive(_18);                // bb0[51]: scope 4 at $DIR/address-of.rs:15:30: 15:31
+        _18 = &raw const (*_1);          // bb0[52]: scope 4 at $DIR/address-of.rs:15:30: 15:31
+        _17 = move _18 as *const dyn std::marker::Send (Pointer(Unsize)); // bb0[53]: scope 4 at $DIR/address-of.rs:15:30: 15:31
+        StorageDead(_18);                // bb0[54]: scope 4 at $DIR/address-of.rs:15:30: 15:31
+        FakeRead(ForLet, _17);           // bb0[55]: scope 4 at $DIR/address-of.rs:15:9: 15:10
+        AscribeUserType(_17, o, UserTypeProjection { base: UserType(7), projs: [] }); // bb0[56]: scope 4 at $DIR/address-of.rs:15:12: 15:27
+        StorageLive(_19);                // bb0[57]: scope 5 at $DIR/address-of.rs:16:9: 16:10
+        StorageLive(_20);                // bb0[58]: scope 5 at $DIR/address-of.rs:16:27: 16:28
+        _20 = &raw const (*_1);          // bb0[59]: scope 5 at $DIR/address-of.rs:16:27: 16:28
+        _19 = move _20 as *const [i32] (Pointer(Unsize)); // bb0[60]: scope 5 at $DIR/address-of.rs:16:27: 16:28
+        StorageDead(_20);                // bb0[61]: scope 5 at $DIR/address-of.rs:16:27: 16:28
+        FakeRead(ForLet, _19);           // bb0[62]: scope 5 at $DIR/address-of.rs:16:9: 16:10
+        AscribeUserType(_19, o, UserTypeProjection { base: UserType(9), projs: [] }); // bb0[63]: scope 5 at $DIR/address-of.rs:16:12: 16:24
+        StorageLive(_21);                // bb0[64]: scope 6 at $DIR/address-of.rs:18:5: 18:18
+        StorageLive(_22);                // bb0[65]: scope 6 at $DIR/address-of.rs:18:5: 18:18
+        _22 = &raw const (*_3);          // bb0[66]: scope 6 at $DIR/address-of.rs:18:5: 18:6
+        AscribeUserType(_22, o, UserTypeProjection { base: UserType(10), projs: [] }); // bb0[67]: scope 6 at $DIR/address-of.rs:18:5: 18:18
+        _21 = _22;                       // bb0[68]: scope 6 at $DIR/address-of.rs:18:5: 18:18
+        StorageDead(_22);                // bb0[69]: scope 6 at $DIR/address-of.rs:18:18: 18:19
+        StorageDead(_21);                // bb0[70]: scope 6 at $DIR/address-of.rs:18:18: 18:19
+        StorageLive(_23);                // bb0[71]: scope 6 at $DIR/address-of.rs:19:5: 19:26
+        _23 = &raw const (*_3);          // bb0[72]: scope 6 at $DIR/address-of.rs:19:5: 19:6
+        StorageDead(_23);                // bb0[73]: scope 6 at $DIR/address-of.rs:19:26: 19:27
+        StorageLive(_24);                // bb0[74]: scope 6 at $DIR/address-of.rs:20:5: 20:25
+        StorageLive(_25);                // bb0[75]: scope 6 at $DIR/address-of.rs:20:5: 20:25
+        StorageLive(_26);                // bb0[76]: scope 6 at $DIR/address-of.rs:20:5: 20:6
+        _26 = &raw const (*_3);          // bb0[77]: scope 6 at $DIR/address-of.rs:20:5: 20:6
+        _25 = move _26 as *const dyn std::marker::Send (Pointer(Unsize)); // bb0[78]: scope 6 at $DIR/address-of.rs:20:5: 20:6
+        StorageDead(_26);                // bb0[79]: scope 6 at $DIR/address-of.rs:20:5: 20:6
+        AscribeUserType(_25, o, UserTypeProjection { base: UserType(11), projs: [] }); // bb0[80]: scope 6 at $DIR/address-of.rs:20:5: 20:25
+        _24 = _25;                       // bb0[81]: scope 6 at $DIR/address-of.rs:20:5: 20:25
+        StorageDead(_25);                // bb0[82]: scope 6 at $DIR/address-of.rs:20:25: 20:26
+        StorageDead(_24);                // bb0[83]: scope 6 at $DIR/address-of.rs:20:25: 20:26
+        StorageLive(_27);                // bb0[84]: scope 6 at $DIR/address-of.rs:21:5: 21:22
+        StorageLive(_28);                // bb0[85]: scope 6 at $DIR/address-of.rs:21:5: 21:6
+        _28 = &raw const (*_3);          // bb0[86]: scope 6 at $DIR/address-of.rs:21:5: 21:6
+        _27 = move _28 as *const [i32] (Pointer(Unsize)); // bb0[87]: scope 6 at $DIR/address-of.rs:21:5: 21:6
+        StorageDead(_28);                // bb0[88]: scope 6 at $DIR/address-of.rs:21:5: 21:6
+        StorageDead(_27);                // bb0[89]: scope 6 at $DIR/address-of.rs:21:22: 21:23
+        StorageLive(_29);                // bb0[90]: scope 6 at $DIR/address-of.rs:23:9: 23:10
+        _29 = &raw const (*_3);          // bb0[91]: scope 6 at $DIR/address-of.rs:23:23: 23:24
+        FakeRead(ForLet, _29);           // bb0[92]: scope 6 at $DIR/address-of.rs:23:9: 23:10
+        AscribeUserType(_29, o, UserTypeProjection { base: UserType(13), projs: [] }); // bb0[93]: scope 6 at $DIR/address-of.rs:23:12: 23:20
+        StorageLive(_30);                // bb0[94]: scope 7 at $DIR/address-of.rs:24:9: 24:10
+        _30 = &raw const (*_3);          // bb0[95]: scope 7 at $DIR/address-of.rs:24:31: 24:32
+        FakeRead(ForLet, _30);           // bb0[96]: scope 7 at $DIR/address-of.rs:24:9: 24:10
+        AscribeUserType(_30, o, UserTypeProjection { base: UserType(15), projs: [] }); // bb0[97]: scope 7 at $DIR/address-of.rs:24:12: 24:28
+        StorageLive(_31);                // bb0[98]: scope 8 at $DIR/address-of.rs:25:9: 25:10
+        StorageLive(_32);                // bb0[99]: scope 8 at $DIR/address-of.rs:25:30: 25:31
+        _32 = &raw const (*_3);          // bb0[100]: scope 8 at $DIR/address-of.rs:25:30: 25:31
+        _31 = move _32 as *const dyn std::marker::Send (Pointer(Unsize)); // bb0[101]: scope 8 at $DIR/address-of.rs:25:30: 25:31
+        StorageDead(_32);                // bb0[102]: scope 8 at $DIR/address-of.rs:25:30: 25:31
+        FakeRead(ForLet, _31);           // bb0[103]: scope 8 at $DIR/address-of.rs:25:9: 25:10
+        AscribeUserType(_31, o, UserTypeProjection { base: UserType(17), projs: [] }); // bb0[104]: scope 8 at $DIR/address-of.rs:25:12: 25:27
+        StorageLive(_33);                // bb0[105]: scope 9 at $DIR/address-of.rs:26:9: 26:10
+        StorageLive(_34);                // bb0[106]: scope 9 at $DIR/address-of.rs:26:27: 26:28
+        _34 = &raw const (*_3);          // bb0[107]: scope 9 at $DIR/address-of.rs:26:27: 26:28
+        _33 = move _34 as *const [i32] (Pointer(Unsize)); // bb0[108]: scope 9 at $DIR/address-of.rs:26:27: 26:28
+        StorageDead(_34);                // bb0[109]: scope 9 at $DIR/address-of.rs:26:27: 26:28
+        FakeRead(ForLet, _33);           // bb0[110]: scope 9 at $DIR/address-of.rs:26:9: 26:10
+        AscribeUserType(_33, o, UserTypeProjection { base: UserType(19), projs: [] }); // bb0[111]: scope 9 at $DIR/address-of.rs:26:12: 26:24
+        StorageLive(_35);                // bb0[112]: scope 10 at $DIR/address-of.rs:28:5: 28:16
+        StorageLive(_36);                // bb0[113]: scope 10 at $DIR/address-of.rs:28:5: 28:16
+        _36 = &raw mut (*_3);            // bb0[114]: scope 10 at $DIR/address-of.rs:28:5: 28:6
+        AscribeUserType(_36, o, UserTypeProjection { base: UserType(20), projs: [] }); // bb0[115]: scope 10 at $DIR/address-of.rs:28:5: 28:16
+        _35 = _36;                       // bb0[116]: scope 10 at $DIR/address-of.rs:28:5: 28:16
+        StorageDead(_36);                // bb0[117]: scope 10 at $DIR/address-of.rs:28:16: 28:17
+        StorageDead(_35);                // bb0[118]: scope 10 at $DIR/address-of.rs:28:16: 28:17
+        StorageLive(_37);                // bb0[119]: scope 10 at $DIR/address-of.rs:29:5: 29:24
+        _37 = &raw mut (*_3);            // bb0[120]: scope 10 at $DIR/address-of.rs:29:5: 29:6
+        StorageDead(_37);                // bb0[121]: scope 10 at $DIR/address-of.rs:29:24: 29:25
+        StorageLive(_38);                // bb0[122]: scope 10 at $DIR/address-of.rs:30:5: 30:23
+        StorageLive(_39);                // bb0[123]: scope 10 at $DIR/address-of.rs:30:5: 30:23
+        StorageLive(_40);                // bb0[124]: scope 10 at $DIR/address-of.rs:30:5: 30:6
+        _40 = &raw mut (*_3);            // bb0[125]: scope 10 at $DIR/address-of.rs:30:5: 30:6
+        _39 = move _40 as *mut dyn std::marker::Send (Pointer(Unsize)); // bb0[126]: scope 10 at $DIR/address-of.rs:30:5: 30:6
+        StorageDead(_40);                // bb0[127]: scope 10 at $DIR/address-of.rs:30:5: 30:6
+        AscribeUserType(_39, o, UserTypeProjection { base: UserType(21), projs: [] }); // bb0[128]: scope 10 at $DIR/address-of.rs:30:5: 30:23
+        _38 = _39;                       // bb0[129]: scope 10 at $DIR/address-of.rs:30:5: 30:23
+        StorageDead(_39);                // bb0[130]: scope 10 at $DIR/address-of.rs:30:23: 30:24
+        StorageDead(_38);                // bb0[131]: scope 10 at $DIR/address-of.rs:30:23: 30:24
+        StorageLive(_41);                // bb0[132]: scope 10 at $DIR/address-of.rs:31:5: 31:20
+        StorageLive(_42);                // bb0[133]: scope 10 at $DIR/address-of.rs:31:5: 31:6
+        _42 = &raw mut (*_3);            // bb0[134]: scope 10 at $DIR/address-of.rs:31:5: 31:6
+        _41 = move _42 as *mut [i32] (Pointer(Unsize)); // bb0[135]: scope 10 at $DIR/address-of.rs:31:5: 31:6
+        StorageDead(_42);                // bb0[136]: scope 10 at $DIR/address-of.rs:31:5: 31:6
+        StorageDead(_41);                // bb0[137]: scope 10 at $DIR/address-of.rs:31:20: 31:21
+        StorageLive(_43);                // bb0[138]: scope 10 at $DIR/address-of.rs:33:9: 33:10
+        _43 = &raw mut (*_3);            // bb0[139]: scope 10 at $DIR/address-of.rs:33:21: 33:22
+        FakeRead(ForLet, _43);           // bb0[140]: scope 10 at $DIR/address-of.rs:33:9: 33:10
+        AscribeUserType(_43, o, UserTypeProjection { base: UserType(23), projs: [] }); // bb0[141]: scope 10 at $DIR/address-of.rs:33:12: 33:18
+        StorageLive(_44);                // bb0[142]: scope 11 at $DIR/address-of.rs:34:9: 34:10
+        _44 = &raw mut (*_3);            // bb0[143]: scope 11 at $DIR/address-of.rs:34:29: 34:30
+        FakeRead(ForLet, _44);           // bb0[144]: scope 11 at $DIR/address-of.rs:34:9: 34:10
+        AscribeUserType(_44, o, UserTypeProjection { base: UserType(25), projs: [] }); // bb0[145]: scope 11 at $DIR/address-of.rs:34:12: 34:26
+        StorageLive(_45);                // bb0[146]: scope 12 at $DIR/address-of.rs:35:9: 35:10
+        StorageLive(_46);                // bb0[147]: scope 12 at $DIR/address-of.rs:35:28: 35:29
+        _46 = &raw mut (*_3);            // bb0[148]: scope 12 at $DIR/address-of.rs:35:28: 35:29
+        _45 = move _46 as *mut dyn std::marker::Send (Pointer(Unsize)); // bb0[149]: scope 12 at $DIR/address-of.rs:35:28: 35:29
+        StorageDead(_46);                // bb0[150]: scope 12 at $DIR/address-of.rs:35:28: 35:29
+        FakeRead(ForLet, _45);           // bb0[151]: scope 12 at $DIR/address-of.rs:35:9: 35:10
+        AscribeUserType(_45, o, UserTypeProjection { base: UserType(27), projs: [] }); // bb0[152]: scope 12 at $DIR/address-of.rs:35:12: 35:25
+        StorageLive(_47);                // bb0[153]: scope 13 at $DIR/address-of.rs:36:9: 36:10
+        StorageLive(_48);                // bb0[154]: scope 13 at $DIR/address-of.rs:36:25: 36:26
+        _48 = &raw mut (*_3);            // bb0[155]: scope 13 at $DIR/address-of.rs:36:25: 36:26
+        _47 = move _48 as *mut [i32] (Pointer(Unsize)); // bb0[156]: scope 13 at $DIR/address-of.rs:36:25: 36:26
+        StorageDead(_48);                // bb0[157]: scope 13 at $DIR/address-of.rs:36:25: 36:26
+        FakeRead(ForLet, _47);           // bb0[158]: scope 13 at $DIR/address-of.rs:36:9: 36:10
+        AscribeUserType(_47, o, UserTypeProjection { base: UserType(29), projs: [] }); // bb0[159]: scope 13 at $DIR/address-of.rs:36:12: 36:22
+        _0 = ();                         // bb0[160]: scope 0 at $DIR/address-of.rs:3:26: 37:2
+        StorageDead(_47);                // bb0[161]: scope 13 at $DIR/address-of.rs:37:1: 37:2
+        StorageDead(_45);                // bb0[162]: scope 12 at $DIR/address-of.rs:37:1: 37:2
+        StorageDead(_44);                // bb0[163]: scope 11 at $DIR/address-of.rs:37:1: 37:2
+        StorageDead(_43);                // bb0[164]: scope 10 at $DIR/address-of.rs:37:1: 37:2
+        StorageDead(_33);                // bb0[165]: scope 9 at $DIR/address-of.rs:37:1: 37:2
+        StorageDead(_31);                // bb0[166]: scope 8 at $DIR/address-of.rs:37:1: 37:2
+        StorageDead(_30);                // bb0[167]: scope 7 at $DIR/address-of.rs:37:1: 37:2
+        StorageDead(_29);                // bb0[168]: scope 6 at $DIR/address-of.rs:37:1: 37:2
+        StorageDead(_19);                // bb0[169]: scope 5 at $DIR/address-of.rs:37:1: 37:2
+        StorageDead(_17);                // bb0[170]: scope 4 at $DIR/address-of.rs:37:1: 37:2
+        StorageDead(_16);                // bb0[171]: scope 3 at $DIR/address-of.rs:37:1: 37:2
+        StorageDead(_15);                // bb0[172]: scope 2 at $DIR/address-of.rs:37:1: 37:2
+        StorageDead(_4);                 // bb0[173]: scope 1 at $DIR/address-of.rs:37:1: 37:2
+        StorageDead(_3);                 // bb0[174]: scope 1 at $DIR/address-of.rs:37:1: 37:2
+        StorageDead(_2);                 // bb0[175]: scope 0 at $DIR/address-of.rs:37:1: 37:2
+        StorageDead(_1);                 // bb0[176]: scope 0 at $DIR/address-of.rs:37:1: 37:2
+        return;                          // bb0[177]: scope 0 at $DIR/address-of.rs:37:2: 37:2
+    }
+}
diff --git a/src/test/mir-opt/address-of/rustc.borrow_and_cast.SimplifyCfg-initial.after.mir b/src/test/mir-opt/address-of/rustc.borrow_and_cast.SimplifyCfg-initial.after.mir
new file mode 100644
index 00000000000..29ccff49202
--- /dev/null
+++ b/src/test/mir-opt/address-of/rustc.borrow_and_cast.SimplifyCfg-initial.after.mir
@@ -0,0 +1,47 @@
+// MIR for `borrow_and_cast` after SimplifyCfg-initial
+
+fn borrow_and_cast(_1: i32) -> () {
+    debug x => _1;                       // in scope 0 at $DIR/address-of.rs:41:20: 41:25
+    let mut _0: ();                      // return place in scope 0 at $DIR/address-of.rs:41:32: 41:32
+    let _2: *const i32;                  // in scope 0 at $DIR/address-of.rs:42:9: 42:10
+    let _3: &i32;                        // in scope 0 at $DIR/address-of.rs:42:13: 42:15
+    let _5: &mut i32;                    // in scope 0 at $DIR/address-of.rs:43:13: 43:19
+    let mut _7: &mut i32;                // in scope 0 at $DIR/address-of.rs:44:13: 44:19
+    scope 1 {
+        debug p => _2;                   // in scope 1 at $DIR/address-of.rs:42:9: 42:10
+        let _4: *const i32;              // in scope 1 at $DIR/address-of.rs:43:9: 43:10
+        scope 2 {
+            debug q => _4;               // in scope 2 at $DIR/address-of.rs:43:9: 43:10
+            let _6: *mut i32;            // in scope 2 at $DIR/address-of.rs:44:9: 44:10
+            scope 3 {
+                debug r => _6;           // in scope 3 at $DIR/address-of.rs:44:9: 44:10
+            }
+        }
+    }
+
+    bb0: {
+        StorageLive(_2);                 // bb0[0]: scope 0 at $DIR/address-of.rs:42:9: 42:10
+        StorageLive(_3);                 // bb0[1]: scope 0 at $DIR/address-of.rs:42:13: 42:15
+        _3 = &_1;                        // bb0[2]: scope 0 at $DIR/address-of.rs:42:13: 42:15
+        _2 = &raw const (*_3);           // bb0[3]: scope 0 at $DIR/address-of.rs:42:13: 42:15
+        FakeRead(ForLet, _2);            // bb0[4]: scope 0 at $DIR/address-of.rs:42:9: 42:10
+        StorageDead(_3);                 // bb0[5]: scope 0 at $DIR/address-of.rs:42:29: 42:30
+        StorageLive(_4);                 // bb0[6]: scope 1 at $DIR/address-of.rs:43:9: 43:10
+        StorageLive(_5);                 // bb0[7]: scope 1 at $DIR/address-of.rs:43:13: 43:19
+        _5 = &mut _1;                    // bb0[8]: scope 1 at $DIR/address-of.rs:43:13: 43:19
+        _4 = &raw const (*_5);           // bb0[9]: scope 1 at $DIR/address-of.rs:43:13: 43:19
+        FakeRead(ForLet, _4);            // bb0[10]: scope 1 at $DIR/address-of.rs:43:9: 43:10
+        StorageDead(_5);                 // bb0[11]: scope 1 at $DIR/address-of.rs:43:33: 43:34
+        StorageLive(_6);                 // bb0[12]: scope 2 at $DIR/address-of.rs:44:9: 44:10
+        StorageLive(_7);                 // bb0[13]: scope 2 at $DIR/address-of.rs:44:13: 44:19
+        _7 = &mut _1;                    // bb0[14]: scope 2 at $DIR/address-of.rs:44:13: 44:19
+        _6 = &raw mut (*_7);             // bb0[15]: scope 2 at $DIR/address-of.rs:44:13: 44:19
+        FakeRead(ForLet, _6);            // bb0[16]: scope 2 at $DIR/address-of.rs:44:9: 44:10
+        StorageDead(_7);                 // bb0[17]: scope 2 at $DIR/address-of.rs:44:31: 44:32
+        _0 = ();                         // bb0[18]: scope 0 at $DIR/address-of.rs:41:32: 45:2
+        StorageDead(_6);                 // bb0[19]: scope 2 at $DIR/address-of.rs:45:1: 45:2
+        StorageDead(_4);                 // bb0[20]: scope 1 at $DIR/address-of.rs:45:1: 45:2
+        StorageDead(_2);                 // bb0[21]: scope 0 at $DIR/address-of.rs:45:1: 45:2
+        return;                          // bb0[22]: scope 0 at $DIR/address-of.rs:45:2: 45:2
+    }
+}
diff --git a/src/test/mir-opt/array-index-is-temporary.rs b/src/test/mir-opt/array-index-is-temporary.rs
index 57f30acb3a6..cd10772a52f 100644
--- a/src/test/mir-opt/array-index-is-temporary.rs
+++ b/src/test/mir-opt/array-index-is-temporary.rs
@@ -7,35 +7,10 @@ unsafe fn foo(z: *mut usize) -> u32 {
     99
 }
 
+// EMIT_MIR rustc.main.SimplifyCfg-elaborate-drops.after.mir
 fn main() {
     let mut x = [42, 43, 44];
     let mut y = 1;
     let z: *mut usize = &mut y;
     x[y] = unsafe { foo(z) };
 }
-
-// END RUST SOURCE
-// START rustc.main.SimplifyCfg-elaborate-drops.after.mir
-//     bb0: {
-//         ...
-//         _4 = &mut _2;
-//         _3 = &raw mut (*_4);
-//         ...
-//         _6 = _3;
-//         _5 = const foo(move _6) -> bb1;
-//     }
-//
-//     bb1: {
-//         ...
-//         _7 = _2;
-//         _8 = Len(_1);
-//         _9 = Lt(_7, _8);
-//         assert(move _9, "index out of bounds: the len is move _8 but the index is _7") -> bb2;
-//     }
-//
-//     bb2: {
-//         _1[_7] = move _5;
-//         ...
-//         return;
-//     }
-// END rustc.main.SimplifyCfg-elaborate-drops.after.mir
diff --git a/src/test/mir-opt/array-index-is-temporary/rustc.main.SimplifyCfg-elaborate-drops.after.mir b/src/test/mir-opt/array-index-is-temporary/rustc.main.SimplifyCfg-elaborate-drops.after.mir
new file mode 100644
index 00000000000..6b77a5b80c4
--- /dev/null
+++ b/src/test/mir-opt/array-index-is-temporary/rustc.main.SimplifyCfg-elaborate-drops.after.mir
@@ -0,0 +1,91 @@
+// MIR for `main` after SimplifyCfg-elaborate-drops
+
+fn main() -> () {
+    let mut _0: ();                      // return place in scope 0 at $DIR/array-index-is-temporary.rs:11:11: 11:11
+    let mut _1: [u32; 3];                // in scope 0 at $DIR/array-index-is-temporary.rs:12:9: 12:14
+    let mut _4: &mut usize;              // in scope 0 at $DIR/array-index-is-temporary.rs:14:25: 14:31
+    let mut _5: u32;                     // in scope 0 at $DIR/array-index-is-temporary.rs:15:12: 15:29
+    let mut _6: *mut usize;              // in scope 0 at $DIR/array-index-is-temporary.rs:15:25: 15:26
+    let _7: usize;                       // in scope 0 at $DIR/array-index-is-temporary.rs:15:7: 15:8
+    let mut _8: usize;                   // in scope 0 at $DIR/array-index-is-temporary.rs:15:5: 15:9
+    let mut _9: bool;                    // in scope 0 at $DIR/array-index-is-temporary.rs:15:5: 15:9
+    scope 1 {
+        debug x => _1;                   // in scope 1 at $DIR/array-index-is-temporary.rs:12:9: 12:14
+        let mut _2: usize;               // in scope 1 at $DIR/array-index-is-temporary.rs:13:9: 13:14
+        scope 2 {
+            debug y => _2;               // in scope 2 at $DIR/array-index-is-temporary.rs:13:9: 13:14
+            let _3: *mut usize as UserTypeProjection { base: UserType(0), projs: [] }; // in scope 2 at $DIR/array-index-is-temporary.rs:14:9: 14:10
+            scope 3 {
+                debug z => _3;           // in scope 3 at $DIR/array-index-is-temporary.rs:14:9: 14:10
+                scope 4 {
+                }
+            }
+        }
+    }
+
+    bb0: {
+        StorageLive(_1);                 // bb0[0]: scope 0 at $DIR/array-index-is-temporary.rs:12:9: 12:14
+        _1 = [const 42u32, const 43u32, const 44u32]; // bb0[1]: scope 0 at $DIR/array-index-is-temporary.rs:12:17: 12:29
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x0000002a))
+                                         // mir::Constant
+                                         // + span: $DIR/array-index-is-temporary.rs:12:18: 12:20
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x0000002a)) }
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x0000002b))
+                                         // mir::Constant
+                                         // + span: $DIR/array-index-is-temporary.rs:12:22: 12:24
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x0000002b)) }
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x0000002c))
+                                         // mir::Constant
+                                         // + span: $DIR/array-index-is-temporary.rs:12:26: 12:28
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x0000002c)) }
+        StorageLive(_2);                 // bb0[2]: scope 1 at $DIR/array-index-is-temporary.rs:13:9: 13:14
+        _2 = const 1usize;               // bb0[3]: scope 1 at $DIR/array-index-is-temporary.rs:13:17: 13:18
+                                         // ty::Const
+                                         // + ty: usize
+                                         // + val: Value(Scalar(0x0000000000000001))
+                                         // mir::Constant
+                                         // + span: $DIR/array-index-is-temporary.rs:13:17: 13:18
+                                         // + literal: Const { ty: usize, val: Value(Scalar(0x0000000000000001)) }
+        StorageLive(_3);                 // bb0[4]: scope 2 at $DIR/array-index-is-temporary.rs:14:9: 14:10
+        StorageLive(_4);                 // bb0[5]: scope 2 at $DIR/array-index-is-temporary.rs:14:25: 14:31
+        _4 = &mut _2;                    // bb0[6]: scope 2 at $DIR/array-index-is-temporary.rs:14:25: 14:31
+        _3 = &raw mut (*_4);             // bb0[7]: scope 2 at $DIR/array-index-is-temporary.rs:14:25: 14:31
+        StorageDead(_4);                 // bb0[8]: scope 2 at $DIR/array-index-is-temporary.rs:14:31: 14:32
+        StorageLive(_5);                 // bb0[9]: scope 3 at $DIR/array-index-is-temporary.rs:15:12: 15:29
+        StorageLive(_6);                 // bb0[10]: scope 4 at $DIR/array-index-is-temporary.rs:15:25: 15:26
+        _6 = _3;                         // bb0[11]: scope 4 at $DIR/array-index-is-temporary.rs:15:25: 15:26
+        _5 = const foo(move _6) -> bb1;  // bb0[12]: scope 4 at $DIR/array-index-is-temporary.rs:15:21: 15:27
+                                         // ty::Const
+                                         // + ty: unsafe fn(*mut usize) -> u32 {foo}
+                                         // + val: Value(Scalar(<ZST>))
+                                         // mir::Constant
+                                         // + span: $DIR/array-index-is-temporary.rs:15:21: 15:24
+                                         // + literal: Const { ty: unsafe fn(*mut usize) -> u32 {foo}, val: Value(Scalar(<ZST>)) }
+    }
+
+    bb1: {
+        StorageDead(_6);                 // bb1[0]: scope 4 at $DIR/array-index-is-temporary.rs:15:26: 15:27
+        StorageLive(_7);                 // bb1[1]: scope 3 at $DIR/array-index-is-temporary.rs:15:7: 15:8
+        _7 = _2;                         // bb1[2]: scope 3 at $DIR/array-index-is-temporary.rs:15:7: 15:8
+        _8 = Len(_1);                    // bb1[3]: scope 3 at $DIR/array-index-is-temporary.rs:15:5: 15:9
+        _9 = Lt(_7, _8);                 // bb1[4]: scope 3 at $DIR/array-index-is-temporary.rs:15:5: 15:9
+        assert(move _9, "index out of bounds: the len is move _8 but the index is _7") -> bb2; // bb1[5]: scope 3 at $DIR/array-index-is-temporary.rs:15:5: 15:9
+    }
+
+    bb2: {
+        _1[_7] = move _5;                // bb2[0]: scope 3 at $DIR/array-index-is-temporary.rs:15:5: 15:29
+        StorageDead(_5);                 // bb2[1]: scope 3 at $DIR/array-index-is-temporary.rs:15:28: 15:29
+        StorageDead(_7);                 // bb2[2]: scope 3 at $DIR/array-index-is-temporary.rs:15:29: 15:30
+        _0 = ();                         // bb2[3]: scope 0 at $DIR/array-index-is-temporary.rs:11:11: 16:2
+        StorageDead(_3);                 // bb2[4]: scope 2 at $DIR/array-index-is-temporary.rs:16:1: 16:2
+        StorageDead(_2);                 // bb2[5]: scope 1 at $DIR/array-index-is-temporary.rs:16:1: 16:2
+        StorageDead(_1);                 // bb2[6]: scope 0 at $DIR/array-index-is-temporary.rs:16:1: 16:2
+        return;                          // bb2[7]: scope 0 at $DIR/array-index-is-temporary.rs:16:2: 16:2
+    }
+}
diff --git a/src/test/mir-opt/box_expr.rs b/src/test/mir-opt/box_expr.rs
index fa1a291858b..beaf0baf12c 100644
--- a/src/test/mir-opt/box_expr.rs
+++ b/src/test/mir-opt/box_expr.rs
@@ -2,6 +2,7 @@
 
 #![feature(box_syntax)]
 
+// EMIT_MIR rustc.main.ElaborateDrops.before.mir
 fn main() {
     let x = box S::new();
     drop(x);
@@ -18,60 +19,3 @@ impl Drop for S {
         println!("splat!");
     }
 }
-
-// END RUST SOURCE
-// START rustc.main.ElaborateDrops.before.mir
-//     let mut _0: ();
-//     let _1: std::boxed::Box<S>;
-//     let mut _2: std::boxed::Box<S>;
-//     let _3: ();
-//     let mut _4: std::boxed::Box<S>;
-//     scope 1 {
-//         debug x => _1;
-//     }
-//     bb0: {
-//         StorageLive(_1);
-//         StorageLive(_2);
-//         _2 = Box(S);
-//         (*_2) = const S::new() -> [return: bb2, unwind: bb3];
-//     }
-//
-//     bb1 (cleanup): {
-//         resume;
-//     }
-//
-//     bb2: {
-//         _1 = move _2;
-//         drop(_2) -> bb4;
-//     }
-//
-//     bb3 (cleanup): {
-//         drop(_2) -> bb1;
-//     }
-//
-//     bb4: {
-//         StorageDead(_2);
-//         StorageLive(_3);
-//         StorageLive(_4);
-//         _4 = move _1;
-//         _3 = const std::mem::drop::<std::boxed::Box<S>>(move _4) -> [return: bb5, unwind: bb7];
-//     }
-//
-//     bb5: {
-//         StorageDead(_4);
-//         StorageDead(_3);
-//         _0 = ();
-//         drop(_1) -> bb8;
-//     }
-//     bb6 (cleanup): {
-//         drop(_1) -> bb1;
-//     }
-//     bb7 (cleanup): {
-//         drop(_4) -> bb6;
-//     }
-//     bb8: {
-//         StorageDead(_1);
-//         return;
-//     }
-// }
-// END rustc.main.ElaborateDrops.before.mir
diff --git a/src/test/mir-opt/box_expr/rustc.main.ElaborateDrops.before.mir b/src/test/mir-opt/box_expr/rustc.main.ElaborateDrops.before.mir
new file mode 100644
index 00000000000..61986535dd3
--- /dev/null
+++ b/src/test/mir-opt/box_expr/rustc.main.ElaborateDrops.before.mir
@@ -0,0 +1,72 @@
+// MIR for `main` before ElaborateDrops
+
+fn main() -> () {
+    let mut _0: ();                      // return place in scope 0 at $DIR/box_expr.rs:6:11: 6:11
+    let _1: std::boxed::Box<S>;          // in scope 0 at $DIR/box_expr.rs:7:9: 7:10
+    let mut _2: std::boxed::Box<S>;      // in scope 0 at $DIR/box_expr.rs:7:13: 7:25
+    let _3: ();                          // in scope 0 at $DIR/box_expr.rs:8:5: 8:12
+    let mut _4: std::boxed::Box<S>;      // in scope 0 at $DIR/box_expr.rs:8:10: 8:11
+    scope 1 {
+        debug x => _1;                   // in scope 1 at $DIR/box_expr.rs:7:9: 7:10
+    }
+
+    bb0: {
+        StorageLive(_1);                 // bb0[0]: scope 0 at $DIR/box_expr.rs:7:9: 7:10
+        StorageLive(_2);                 // bb0[1]: scope 0 at $DIR/box_expr.rs:7:13: 7:25
+        _2 = Box(S);                     // bb0[2]: scope 0 at $DIR/box_expr.rs:7:13: 7:25
+        (*_2) = const S::new() -> [return: bb2, unwind: bb3]; // bb0[3]: scope 0 at $DIR/box_expr.rs:7:17: 7:25
+                                         // ty::Const
+                                         // + ty: fn() -> S {S::new}
+                                         // + val: Value(Scalar(<ZST>))
+                                         // mir::Constant
+                                         // + span: $DIR/box_expr.rs:7:17: 7:23
+                                         // + literal: Const { ty: fn() -> S {S::new}, val: Value(Scalar(<ZST>)) }
+    }
+
+    bb1 (cleanup): {
+        resume;                          // bb1[0]: scope 0 at $DIR/box_expr.rs:6:1: 9:2
+    }
+
+    bb2: {
+        _1 = move _2;                    // bb2[0]: scope 0 at $DIR/box_expr.rs:7:13: 7:25
+        drop(_2) -> bb4;                 // bb2[1]: scope 0 at $DIR/box_expr.rs:7:24: 7:25
+    }
+
+    bb3 (cleanup): {
+        drop(_2) -> bb1;                 // bb3[0]: scope 0 at $DIR/box_expr.rs:7:24: 7:25
+    }
+
+    bb4: {
+        StorageDead(_2);                 // bb4[0]: scope 0 at $DIR/box_expr.rs:7:24: 7:25
+        StorageLive(_3);                 // bb4[1]: scope 1 at $DIR/box_expr.rs:8:5: 8:12
+        StorageLive(_4);                 // bb4[2]: scope 1 at $DIR/box_expr.rs:8:10: 8:11
+        _4 = move _1;                    // bb4[3]: scope 1 at $DIR/box_expr.rs:8:10: 8:11
+        _3 = const std::mem::drop::<std::boxed::Box<S>>(move _4) -> [return: bb5, unwind: bb7]; // bb4[4]: scope 1 at $DIR/box_expr.rs:8:5: 8:12
+                                         // ty::Const
+                                         // + ty: fn(std::boxed::Box<S>) {std::mem::drop::<std::boxed::Box<S>>}
+                                         // + val: Value(Scalar(<ZST>))
+                                         // mir::Constant
+                                         // + span: $DIR/box_expr.rs:8:5: 8:9
+                                         // + literal: Const { ty: fn(std::boxed::Box<S>) {std::mem::drop::<std::boxed::Box<S>>}, val: Value(Scalar(<ZST>)) }
+    }
+
+    bb5: {
+        StorageDead(_4);                 // bb5[0]: scope 1 at $DIR/box_expr.rs:8:11: 8:12
+        StorageDead(_3);                 // bb5[1]: scope 1 at $DIR/box_expr.rs:8:12: 8:13
+        _0 = ();                         // bb5[2]: scope 0 at $DIR/box_expr.rs:6:11: 9:2
+        drop(_1) -> bb8;                 // bb5[3]: scope 0 at $DIR/box_expr.rs:9:1: 9:2
+    }
+
+    bb6 (cleanup): {
+        drop(_1) -> bb1;                 // bb6[0]: scope 0 at $DIR/box_expr.rs:9:1: 9:2
+    }
+
+    bb7 (cleanup): {
+        drop(_4) -> bb6;                 // bb7[0]: scope 1 at $DIR/box_expr.rs:8:11: 8:12
+    }
+
+    bb8: {
+        StorageDead(_1);                 // bb8[0]: scope 0 at $DIR/box_expr.rs:9:1: 9:2
+        return;                          // bb8[1]: scope 0 at $DIR/box_expr.rs:9:2: 9:2
+    }
+}
diff --git a/src/test/mir-opt/byte_slice.rs b/src/test/mir-opt/byte_slice.rs
index 0fb685c3c4e..317e96d6f52 100644
--- a/src/test/mir-opt/byte_slice.rs
+++ b/src/test/mir-opt/byte_slice.rs
@@ -1,15 +1,7 @@
 // compile-flags: -Z mir-opt-level=0
 
+// EMIT_MIR rustc.main.SimplifyCfg-elaborate-drops.after.mir
 fn main() {
     let x = b"foo";
     let y = [5u8, b'x'];
 }
-
-// END RUST SOURCE
-// START rustc.main.SimplifyCfg-elaborate-drops.after.mir
-// ...
-// _1 = const b"foo";
-// ...
-// _2 = [const 5u8, const 120u8];
-// ...
-// END rustc.main.SimplifyCfg-elaborate-drops.after.mir
diff --git a/src/test/mir-opt/byte_slice/rustc.main.SimplifyCfg-elaborate-drops.after.mir b/src/test/mir-opt/byte_slice/rustc.main.SimplifyCfg-elaborate-drops.after.mir
new file mode 100644
index 00000000000..14be9c990bd
--- /dev/null
+++ b/src/test/mir-opt/byte_slice/rustc.main.SimplifyCfg-elaborate-drops.after.mir
@@ -0,0 +1,46 @@
+// MIR for `main` after SimplifyCfg-elaborate-drops
+
+fn main() -> () {
+    let mut _0: ();                      // return place in scope 0 at $DIR/byte_slice.rs:4:11: 4:11
+    let _1: &[u8; 3];                    // in scope 0 at $DIR/byte_slice.rs:5:9: 5:10
+    scope 1 {
+        debug x => _1;                   // in scope 1 at $DIR/byte_slice.rs:5:9: 5:10
+        let _2: [u8; 2];                 // in scope 1 at $DIR/byte_slice.rs:6:9: 6:10
+        scope 2 {
+            debug y => _2;               // in scope 2 at $DIR/byte_slice.rs:6:9: 6:10
+        }
+    }
+
+    bb0: {
+        StorageLive(_1);                 // bb0[0]: scope 0 at $DIR/byte_slice.rs:5:9: 5:10
+        _1 = const b"foo";               // bb0[1]: scope 0 at $DIR/byte_slice.rs:5:13: 5:19
+                                         // ty::Const
+                                         // + ty: &[u8; 3]
+                                         // + val: Value(Scalar(alloc0+0))
+                                         // mir::Constant
+                                         // + span: $DIR/byte_slice.rs:5:13: 5:19
+                                         // + literal: Const { ty: &[u8; 3], val: Value(Scalar(alloc0+0)) }
+        StorageLive(_2);                 // bb0[2]: scope 1 at $DIR/byte_slice.rs:6:9: 6:10
+        _2 = [const 5u8, const 120u8];   // bb0[3]: scope 1 at $DIR/byte_slice.rs:6:13: 6:24
+                                         // ty::Const
+                                         // + ty: u8
+                                         // + val: Value(Scalar(0x05))
+                                         // mir::Constant
+                                         // + span: $DIR/byte_slice.rs:6:14: 6:17
+                                         // + literal: Const { ty: u8, val: Value(Scalar(0x05)) }
+                                         // ty::Const
+                                         // + ty: u8
+                                         // + val: Value(Scalar(0x78))
+                                         // mir::Constant
+                                         // + span: $DIR/byte_slice.rs:6:19: 6:23
+                                         // + literal: Const { ty: u8, val: Value(Scalar(0x78)) }
+        _0 = ();                         // bb0[4]: scope 0 at $DIR/byte_slice.rs:4:11: 7:2
+        StorageDead(_2);                 // bb0[5]: scope 1 at $DIR/byte_slice.rs:7:1: 7:2
+        StorageDead(_1);                 // bb0[6]: scope 0 at $DIR/byte_slice.rs:7:1: 7:2
+        return;                          // bb0[7]: scope 0 at $DIR/byte_slice.rs:7:2: 7:2
+    }
+}
+
+alloc0 (size: 3, align: 1) {
+    66 6f 6f                                        │ foo
+}
diff --git a/src/test/mir-opt/combine_array_len.rs b/src/test/mir-opt/combine_array_len.rs
index 9a046202cd0..ec4438c197a 100644
--- a/src/test/mir-opt/combine_array_len.rs
+++ b/src/test/mir-opt/combine_array_len.rs
@@ -1,3 +1,5 @@
+// EMIT_MIR rustc.norm2.InstCombine.diff
+
 fn norm2(x: [f32; 2]) -> f32 {
     let a = x[0];
     let b = x[1];
@@ -7,17 +9,3 @@ fn norm2(x: [f32; 2]) -> f32 {
 fn main() {
     assert_eq!(norm2([3.0, 4.0]), 5.0*5.0);
 }
-
-// END RUST SOURCE
-
-// START rustc.norm2.InstCombine.before.mir
-//     _4 = Len(_1);
-//     ...
-//     _8 = Len(_1);
-// END rustc.norm2.InstCombine.before.mir
-
-// START rustc.norm2.InstCombine.after.mir
-//     _4 = const 2usize;
-//     ...
-//     _8 = const 2usize;
-// END rustc.norm2.InstCombine.after.mir
diff --git a/src/test/mir-opt/combine_array_len/rustc.norm2.InstCombine.diff b/src/test/mir-opt/combine_array_len/rustc.norm2.InstCombine.diff
new file mode 100644
index 00000000000..ec0b0a57093
--- /dev/null
+++ b/src/test/mir-opt/combine_array_len/rustc.norm2.InstCombine.diff
@@ -0,0 +1,101 @@
+- // MIR for `norm2` before InstCombine
++ // MIR for `norm2` after InstCombine
+  
+  fn norm2(_1: [f32; 2]) -> f32 {
+      debug x => _1;                       // in scope 0 at $DIR/combine_array_len.rs:3:10: 3:11
+      let mut _0: f32;                     // return place in scope 0 at $DIR/combine_array_len.rs:3:26: 3:29
+      let _2: f32;                         // in scope 0 at $DIR/combine_array_len.rs:4:9: 4:10
+      let _3: usize;                       // in scope 0 at $DIR/combine_array_len.rs:4:15: 4:16
+      let mut _4: usize;                   // in scope 0 at $DIR/combine_array_len.rs:4:13: 4:17
+      let mut _5: bool;                    // in scope 0 at $DIR/combine_array_len.rs:4:13: 4:17
+      let _7: usize;                       // in scope 0 at $DIR/combine_array_len.rs:5:15: 5:16
+      let mut _8: usize;                   // in scope 0 at $DIR/combine_array_len.rs:5:13: 5:17
+      let mut _9: bool;                    // in scope 0 at $DIR/combine_array_len.rs:5:13: 5:17
+      let mut _10: f32;                    // in scope 0 at $DIR/combine_array_len.rs:6:5: 6:8
+      let mut _11: f32;                    // in scope 0 at $DIR/combine_array_len.rs:6:5: 6:6
+      let mut _12: f32;                    // in scope 0 at $DIR/combine_array_len.rs:6:7: 6:8
+      let mut _13: f32;                    // in scope 0 at $DIR/combine_array_len.rs:6:11: 6:14
+      let mut _14: f32;                    // in scope 0 at $DIR/combine_array_len.rs:6:11: 6:12
+      let mut _15: f32;                    // in scope 0 at $DIR/combine_array_len.rs:6:13: 6:14
+      scope 1 {
+          debug a => _2;                   // in scope 1 at $DIR/combine_array_len.rs:4:9: 4:10
+          let _6: f32;                     // in scope 1 at $DIR/combine_array_len.rs:5:9: 5:10
+          scope 2 {
+              debug b => _6;               // in scope 2 at $DIR/combine_array_len.rs:5:9: 5:10
+          }
+      }
+  
+      bb0: {
+          StorageLive(_2);                 // bb0[0]: scope 0 at $DIR/combine_array_len.rs:4:9: 4:10
+          StorageLive(_3);                 // bb0[1]: scope 0 at $DIR/combine_array_len.rs:4:15: 4:16
+          _3 = const 0usize;               // bb0[2]: scope 0 at $DIR/combine_array_len.rs:4:15: 4:16
+                                           // ty::Const
+                                           // + ty: usize
+                                           // + val: Value(Scalar(0x0000000000000000))
+                                           // mir::Constant
+                                           // + span: $DIR/combine_array_len.rs:4:15: 4:16
+                                           // + literal: Const { ty: usize, val: Value(Scalar(0x0000000000000000)) }
+-         _4 = Len(_1);                    // bb0[3]: scope 0 at $DIR/combine_array_len.rs:4:13: 4:17
++         _4 = const 2usize;               // bb0[3]: scope 0 at $DIR/combine_array_len.rs:4:13: 4:17
++                                          // ty::Const
++                                          // + ty: usize
++                                          // + val: Value(Scalar(0x0000000000000002))
++                                          // mir::Constant
++                                          // + span: $DIR/combine_array_len.rs:4:13: 4:17
++                                          // + literal: Const { ty: usize, val: Value(Scalar(0x0000000000000002)) }
+          _5 = Lt(_3, _4);                 // bb0[4]: scope 0 at $DIR/combine_array_len.rs:4:13: 4:17
+          assert(move _5, "index out of bounds: the len is move _4 but the index is _3") -> bb1; // bb0[5]: scope 0 at $DIR/combine_array_len.rs:4:13: 4:17
+      }
+  
+      bb1: {
+          _2 = _1[_3];                     // bb1[0]: scope 0 at $DIR/combine_array_len.rs:4:13: 4:17
+          StorageDead(_3);                 // bb1[1]: scope 0 at $DIR/combine_array_len.rs:4:17: 4:18
+          StorageLive(_6);                 // bb1[2]: scope 1 at $DIR/combine_array_len.rs:5:9: 5:10
+          StorageLive(_7);                 // bb1[3]: scope 1 at $DIR/combine_array_len.rs:5:15: 5:16
+          _7 = const 1usize;               // bb1[4]: scope 1 at $DIR/combine_array_len.rs:5:15: 5:16
+                                           // ty::Const
+                                           // + ty: usize
+                                           // + val: Value(Scalar(0x0000000000000001))
+                                           // mir::Constant
+                                           // + span: $DIR/combine_array_len.rs:5:15: 5:16
+                                           // + literal: Const { ty: usize, val: Value(Scalar(0x0000000000000001)) }
+-         _8 = Len(_1);                    // bb1[5]: scope 1 at $DIR/combine_array_len.rs:5:13: 5:17
++         _8 = const 2usize;               // bb1[5]: scope 1 at $DIR/combine_array_len.rs:5:13: 5:17
++                                          // ty::Const
++                                          // + ty: usize
++                                          // + val: Value(Scalar(0x0000000000000002))
++                                          // mir::Constant
++                                          // + span: $DIR/combine_array_len.rs:5:13: 5:17
++                                          // + literal: Const { ty: usize, val: Value(Scalar(0x0000000000000002)) }
+          _9 = Lt(_7, _8);                 // bb1[6]: scope 1 at $DIR/combine_array_len.rs:5:13: 5:17
+          assert(move _9, "index out of bounds: the len is move _8 but the index is _7") -> bb2; // bb1[7]: scope 1 at $DIR/combine_array_len.rs:5:13: 5:17
+      }
+  
+      bb2: {
+          _6 = _1[_7];                     // bb2[0]: scope 1 at $DIR/combine_array_len.rs:5:13: 5:17
+          StorageDead(_7);                 // bb2[1]: scope 1 at $DIR/combine_array_len.rs:5:17: 5:18
+          StorageLive(_10);                // bb2[2]: scope 2 at $DIR/combine_array_len.rs:6:5: 6:8
+          StorageLive(_11);                // bb2[3]: scope 2 at $DIR/combine_array_len.rs:6:5: 6:6
+          _11 = _2;                        // bb2[4]: scope 2 at $DIR/combine_array_len.rs:6:5: 6:6
+          StorageLive(_12);                // bb2[5]: scope 2 at $DIR/combine_array_len.rs:6:7: 6:8
+          _12 = _2;                        // bb2[6]: scope 2 at $DIR/combine_array_len.rs:6:7: 6:8
+          _10 = Mul(move _11, move _12);   // bb2[7]: scope 2 at $DIR/combine_array_len.rs:6:5: 6:8
+          StorageDead(_12);                // bb2[8]: scope 2 at $DIR/combine_array_len.rs:6:7: 6:8
+          StorageDead(_11);                // bb2[9]: scope 2 at $DIR/combine_array_len.rs:6:7: 6:8
+          StorageLive(_13);                // bb2[10]: scope 2 at $DIR/combine_array_len.rs:6:11: 6:14
+          StorageLive(_14);                // bb2[11]: scope 2 at $DIR/combine_array_len.rs:6:11: 6:12
+          _14 = _6;                        // bb2[12]: scope 2 at $DIR/combine_array_len.rs:6:11: 6:12
+          StorageLive(_15);                // bb2[13]: scope 2 at $DIR/combine_array_len.rs:6:13: 6:14
+          _15 = _6;                        // bb2[14]: scope 2 at $DIR/combine_array_len.rs:6:13: 6:14
+          _13 = Mul(move _14, move _15);   // bb2[15]: scope 2 at $DIR/combine_array_len.rs:6:11: 6:14
+          StorageDead(_15);                // bb2[16]: scope 2 at $DIR/combine_array_len.rs:6:13: 6:14
+          StorageDead(_14);                // bb2[17]: scope 2 at $DIR/combine_array_len.rs:6:13: 6:14
+          _0 = Add(move _10, move _13);    // bb2[18]: scope 2 at $DIR/combine_array_len.rs:6:5: 6:14
+          StorageDead(_13);                // bb2[19]: scope 2 at $DIR/combine_array_len.rs:6:13: 6:14
+          StorageDead(_10);                // bb2[20]: scope 2 at $DIR/combine_array_len.rs:6:13: 6:14
+          StorageDead(_6);                 // bb2[21]: scope 1 at $DIR/combine_array_len.rs:7:1: 7:2
+          StorageDead(_2);                 // bb2[22]: scope 0 at $DIR/combine_array_len.rs:7:1: 7:2
+          return;                          // bb2[23]: scope 0 at $DIR/combine_array_len.rs:7:2: 7:2
+      }
+  }
+  
diff --git a/src/test/mir-opt/copy_propagation.rs b/src/test/mir-opt/copy_propagation.rs
index a86caf04b04..b5db5497d48 100644
--- a/src/test/mir-opt/copy_propagation.rs
+++ b/src/test/mir-opt/copy_propagation.rs
@@ -1,3 +1,5 @@
+// EMIT_MIR rustc.test.CopyPropagation.diff
+
 fn test(x: u32) -> u32 {
     let y = x;
     y
@@ -7,23 +9,3 @@ fn main() {
     // Make sure the function actually gets instantiated.
     test(0);
 }
-
-// END RUST SOURCE
-// START rustc.test.CopyPropagation.before.mir
-//  bb0: {
-//      ...
-//      _2 = _1;
-//      ...
-//      _0 = _2;
-//      ...
-//      return;
-//  }
-// END rustc.test.CopyPropagation.before.mir
-// START rustc.test.CopyPropagation.after.mir
-//  bb0: {
-//      ...
-//      _0 = _1;
-//      ...
-//      return;
-//  }
-// END rustc.test.CopyPropagation.after.mir
diff --git a/src/test/mir-opt/copy_propagation/rustc.test.CopyPropagation.diff b/src/test/mir-opt/copy_propagation/rustc.test.CopyPropagation.diff
new file mode 100644
index 00000000000..4e9d4c56cd6
--- /dev/null
+++ b/src/test/mir-opt/copy_propagation/rustc.test.CopyPropagation.diff
@@ -0,0 +1,25 @@
+- // MIR for `test` before CopyPropagation
++ // MIR for `test` after CopyPropagation
+  
+  fn test(_1: u32) -> u32 {
+      debug x => _1;                       // in scope 0 at $DIR/copy_propagation.rs:3:9: 3:10
+      let mut _0: u32;                     // return place in scope 0 at $DIR/copy_propagation.rs:3:20: 3:23
+      let _2: u32;                         // in scope 0 at $DIR/copy_propagation.rs:4:9: 4:10
+      scope 1 {
+-         debug y => _2;                   // in scope 1 at $DIR/copy_propagation.rs:4:9: 4:10
++         debug y => _1;                   // in scope 1 at $DIR/copy_propagation.rs:4:9: 4:10
+      }
+  
+      bb0: {
+-         StorageLive(_2);                 // bb0[0]: scope 0 at $DIR/copy_propagation.rs:4:9: 4:10
+-         _2 = _1;                         // bb0[1]: scope 0 at $DIR/copy_propagation.rs:4:13: 4:14
+-         _0 = _2;                         // bb0[2]: scope 1 at $DIR/copy_propagation.rs:5:5: 5:6
+-         StorageDead(_2);                 // bb0[3]: scope 0 at $DIR/copy_propagation.rs:6:1: 6:2
++         nop;                             // bb0[0]: scope 0 at $DIR/copy_propagation.rs:4:9: 4:10
++         nop;                             // bb0[1]: scope 0 at $DIR/copy_propagation.rs:4:13: 4:14
++         _0 = _1;                         // bb0[2]: scope 1 at $DIR/copy_propagation.rs:5:5: 5:6
++         nop;                             // bb0[3]: scope 0 at $DIR/copy_propagation.rs:6:1: 6:2
+          return;                          // bb0[4]: scope 0 at $DIR/copy_propagation.rs:6:2: 6:2
+      }
+  }
+  
diff --git a/src/test/mir-opt/copy_propagation_arg.rs b/src/test/mir-opt/copy_propagation_arg.rs
index 5e5fed12fb5..c4858be7f2b 100644
--- a/src/test/mir-opt/copy_propagation_arg.rs
+++ b/src/test/mir-opt/copy_propagation_arg.rs
@@ -5,21 +5,25 @@ fn dummy(x: u8) -> u8 {
     x
 }
 
+// EMIT_MIR rustc.foo.CopyPropagation.diff
 fn foo(mut x: u8) {
     // calling `dummy` to make an use of `x` that copyprop cannot eliminate
     x = dummy(x); // this will assign a local to `x`
 }
 
+// EMIT_MIR rustc.bar.CopyPropagation.diff
 fn bar(mut x: u8) {
     dummy(x);
     x = 5;
 }
 
+// EMIT_MIR rustc.baz.CopyPropagation.diff
 fn baz(mut x: i32) {
     // self-assignment to a function argument should be eliminated
     x = x;
 }
 
+// EMIT_MIR rustc.arg_src.CopyPropagation.diff
 fn arg_src(mut x: i32) -> i32 {
     let y = x;
     x = 123; // Don't propagate this assignment to `y`
@@ -33,100 +37,3 @@ fn main() {
     baz(0);
     arg_src(0);
 }
-
-// END RUST SOURCE
-// START rustc.foo.CopyPropagation.before.mir
-// bb0: {
-//     ...
-//     _3 = _1;
-//     _2 = const dummy(move _3) -> bb1;
-// }
-// bb1: {
-//     ...
-//     _1 = move _2;
-//     ...
-// }
-// END rustc.foo.CopyPropagation.before.mir
-// START rustc.foo.CopyPropagation.after.mir
-// bb0: {
-//     ...
-//     _3 = _1;
-//     _2 = const dummy(move _3) -> bb1;
-// }
-// bb1: {
-//     ...
-//     _1 = move _2;
-//     ...
-// }
-// END rustc.foo.CopyPropagation.after.mir
-// START rustc.bar.CopyPropagation.before.mir
-// bb0: {
-//     StorageLive(_2);
-//     StorageLive(_3);
-//     _3 = _1;
-//     _2 = const dummy(move _3) -> bb1;
-// }
-// bb1: {
-//     StorageDead(_3);
-//     StorageDead(_2);
-//     _1 = const 5u8;
-//     ...
-//     return;
-// }
-// END rustc.bar.CopyPropagation.before.mir
-// START rustc.bar.CopyPropagation.after.mir
-// bb0: {
-//     ...
-//     _3 = _1;
-//     _2 = const dummy(move _3) -> bb1;
-// }
-// bb1: {
-//     ...
-//     _1 = const 5u8;
-//     ...
-//     return;
-// }
-// END rustc.bar.CopyPropagation.after.mir
-// START rustc.baz.CopyPropagation.before.mir
-// bb0: {
-//     StorageLive(_2);
-//     _2 = _1;
-//     _1 = move _2;
-//     StorageDead(_2);
-//     ...
-//     return;
-// }
-// END rustc.baz.CopyPropagation.before.mir
-// START rustc.baz.CopyPropagation.after.mir
-// bb0: {
-//     ...
-//     _2 = _1;
-//     _1 = move _2;
-//     ...
-//     return;
-// }
-// END rustc.baz.CopyPropagation.after.mir
-// START rustc.arg_src.CopyPropagation.before.mir
-// bb0: {
-//      ...
-//      _2 = _1;
-//      ...
-//      _1 = const 123i32;
-//      ...
-//      _0 = _2;
-//      ...
-//      return;
-//  }
-// END rustc.arg_src.CopyPropagation.before.mir
-// START rustc.arg_src.CopyPropagation.after.mir
-// bb0: {
-//     ...
-//     _2 = _1;
-//     ...
-//     _1 = const 123i32;
-//     ...
-//     _0 = _2;
-//     ...
-//     return;
-// }
-// END rustc.arg_src.CopyPropagation.after.mir
diff --git a/src/test/mir-opt/copy_propagation_arg/rustc.arg_src.CopyPropagation.diff b/src/test/mir-opt/copy_propagation_arg/rustc.arg_src.CopyPropagation.diff
new file mode 100644
index 00000000000..db3f588d999
--- /dev/null
+++ b/src/test/mir-opt/copy_propagation_arg/rustc.arg_src.CopyPropagation.diff
@@ -0,0 +1,27 @@
+- // MIR for `arg_src` before CopyPropagation
++ // MIR for `arg_src` after CopyPropagation
+  
+  fn arg_src(_1: i32) -> i32 {
+      debug x => _1;                       // in scope 0 at $DIR/copy_propagation_arg.rs:27:12: 27:17
+      let mut _0: i32;                     // return place in scope 0 at $DIR/copy_propagation_arg.rs:27:27: 27:30
+      let _2: i32;                         // in scope 0 at $DIR/copy_propagation_arg.rs:28:9: 28:10
+      scope 1 {
+          debug y => _2;                   // in scope 1 at $DIR/copy_propagation_arg.rs:28:9: 28:10
+      }
+  
+      bb0: {
+          StorageLive(_2);                 // bb0[0]: scope 0 at $DIR/copy_propagation_arg.rs:28:9: 28:10
+          _2 = _1;                         // bb0[1]: scope 0 at $DIR/copy_propagation_arg.rs:28:13: 28:14
+          _1 = const 123i32;               // bb0[2]: scope 1 at $DIR/copy_propagation_arg.rs:29:5: 29:12
+                                           // ty::Const
+                                           // + ty: i32
+                                           // + val: Value(Scalar(0x0000007b))
+                                           // mir::Constant
+                                           // + span: $DIR/copy_propagation_arg.rs:29:5: 29:12
+                                           // + literal: Const { ty: i32, val: Value(Scalar(0x0000007b)) }
+          _0 = _2;                         // bb0[3]: scope 1 at $DIR/copy_propagation_arg.rs:30:5: 30:6
+          StorageDead(_2);                 // bb0[4]: scope 0 at $DIR/copy_propagation_arg.rs:31:1: 31:2
+          return;                          // bb0[5]: scope 0 at $DIR/copy_propagation_arg.rs:31:2: 31:2
+      }
+  }
+  
diff --git a/src/test/mir-opt/copy_propagation_arg/rustc.bar.CopyPropagation.diff b/src/test/mir-opt/copy_propagation_arg/rustc.bar.CopyPropagation.diff
new file mode 100644
index 00000000000..8bdc91109b3
--- /dev/null
+++ b/src/test/mir-opt/copy_propagation_arg/rustc.bar.CopyPropagation.diff
@@ -0,0 +1,37 @@
+- // MIR for `bar` before CopyPropagation
++ // MIR for `bar` after CopyPropagation
+  
+  fn bar(_1: u8) -> () {
+      debug x => _1;                       // in scope 0 at $DIR/copy_propagation_arg.rs:15:8: 15:13
+      let mut _0: ();                      // return place in scope 0 at $DIR/copy_propagation_arg.rs:15:19: 15:19
+      let _2: u8;                          // in scope 0 at $DIR/copy_propagation_arg.rs:16:5: 16:13
+      let mut _3: u8;                      // in scope 0 at $DIR/copy_propagation_arg.rs:16:11: 16:12
+  
+      bb0: {
+          StorageLive(_2);                 // bb0[0]: scope 0 at $DIR/copy_propagation_arg.rs:16:5: 16:13
+          StorageLive(_3);                 // bb0[1]: scope 0 at $DIR/copy_propagation_arg.rs:16:11: 16:12
+          _3 = _1;                         // bb0[2]: scope 0 at $DIR/copy_propagation_arg.rs:16:11: 16:12
+          _2 = const dummy(move _3) -> bb1; // bb0[3]: scope 0 at $DIR/copy_propagation_arg.rs:16:5: 16:13
+                                           // ty::Const
+                                           // + ty: fn(u8) -> u8 {dummy}
+                                           // + val: Value(Scalar(<ZST>))
+                                           // mir::Constant
+                                           // + span: $DIR/copy_propagation_arg.rs:16:5: 16:10
+                                           // + literal: Const { ty: fn(u8) -> u8 {dummy}, val: Value(Scalar(<ZST>)) }
+      }
+  
+      bb1: {
+          StorageDead(_3);                 // bb1[0]: scope 0 at $DIR/copy_propagation_arg.rs:16:12: 16:13
+          StorageDead(_2);                 // bb1[1]: scope 0 at $DIR/copy_propagation_arg.rs:16:13: 16:14
+          _1 = const 5u8;                  // bb1[2]: scope 0 at $DIR/copy_propagation_arg.rs:17:5: 17:10
+                                           // ty::Const
+                                           // + ty: u8
+                                           // + val: Value(Scalar(0x05))
+                                           // mir::Constant
+                                           // + span: $DIR/copy_propagation_arg.rs:17:5: 17:10
+                                           // + literal: Const { ty: u8, val: Value(Scalar(0x05)) }
+          nop;                             // bb1[3]: scope 0 at $DIR/copy_propagation_arg.rs:15:19: 18:2
+          return;                          // bb1[4]: scope 0 at $DIR/copy_propagation_arg.rs:18:2: 18:2
+      }
+  }
+  
diff --git a/src/test/mir-opt/copy_propagation_arg/rustc.baz.CopyPropagation.diff b/src/test/mir-opt/copy_propagation_arg/rustc.baz.CopyPropagation.diff
new file mode 100644
index 00000000000..10f2a98b206
--- /dev/null
+++ b/src/test/mir-opt/copy_propagation_arg/rustc.baz.CopyPropagation.diff
@@ -0,0 +1,18 @@
+- // MIR for `baz` before CopyPropagation
++ // MIR for `baz` after CopyPropagation
+  
+  fn baz(_1: i32) -> () {
+      debug x => _1;                       // in scope 0 at $DIR/copy_propagation_arg.rs:21:8: 21:13
+      let mut _0: ();                      // return place in scope 0 at $DIR/copy_propagation_arg.rs:21:20: 21:20
+      let mut _2: i32;                     // in scope 0 at $DIR/copy_propagation_arg.rs:23:9: 23:10
+  
+      bb0: {
+          StorageLive(_2);                 // bb0[0]: scope 0 at $DIR/copy_propagation_arg.rs:23:9: 23:10
+          _2 = _1;                         // bb0[1]: scope 0 at $DIR/copy_propagation_arg.rs:23:9: 23:10
+          _1 = move _2;                    // bb0[2]: scope 0 at $DIR/copy_propagation_arg.rs:23:5: 23:10
+          StorageDead(_2);                 // bb0[3]: scope 0 at $DIR/copy_propagation_arg.rs:23:9: 23:10
+          nop;                             // bb0[4]: scope 0 at $DIR/copy_propagation_arg.rs:21:20: 24:2
+          return;                          // bb0[5]: scope 0 at $DIR/copy_propagation_arg.rs:24:2: 24:2
+      }
+  }
+  
diff --git a/src/test/mir-opt/copy_propagation_arg/rustc.foo.CopyPropagation.diff b/src/test/mir-opt/copy_propagation_arg/rustc.foo.CopyPropagation.diff
new file mode 100644
index 00000000000..a47880c540e
--- /dev/null
+++ b/src/test/mir-opt/copy_propagation_arg/rustc.foo.CopyPropagation.diff
@@ -0,0 +1,31 @@
+- // MIR for `foo` before CopyPropagation
++ // MIR for `foo` after CopyPropagation
+  
+  fn foo(_1: u8) -> () {
+      debug x => _1;                       // in scope 0 at $DIR/copy_propagation_arg.rs:9:8: 9:13
+      let mut _0: ();                      // return place in scope 0 at $DIR/copy_propagation_arg.rs:9:19: 9:19
+      let mut _2: u8;                      // in scope 0 at $DIR/copy_propagation_arg.rs:11:9: 11:17
+      let mut _3: u8;                      // in scope 0 at $DIR/copy_propagation_arg.rs:11:15: 11:16
+  
+      bb0: {
+          StorageLive(_2);                 // bb0[0]: scope 0 at $DIR/copy_propagation_arg.rs:11:9: 11:17
+          StorageLive(_3);                 // bb0[1]: scope 0 at $DIR/copy_propagation_arg.rs:11:15: 11:16
+          _3 = _1;                         // bb0[2]: scope 0 at $DIR/copy_propagation_arg.rs:11:15: 11:16
+          _2 = const dummy(move _3) -> bb1; // bb0[3]: scope 0 at $DIR/copy_propagation_arg.rs:11:9: 11:17
+                                           // ty::Const
+                                           // + ty: fn(u8) -> u8 {dummy}
+                                           // + val: Value(Scalar(<ZST>))
+                                           // mir::Constant
+                                           // + span: $DIR/copy_propagation_arg.rs:11:9: 11:14
+                                           // + literal: Const { ty: fn(u8) -> u8 {dummy}, val: Value(Scalar(<ZST>)) }
+      }
+  
+      bb1: {
+          StorageDead(_3);                 // bb1[0]: scope 0 at $DIR/copy_propagation_arg.rs:11:16: 11:17
+          _1 = move _2;                    // bb1[1]: scope 0 at $DIR/copy_propagation_arg.rs:11:5: 11:17
+          StorageDead(_2);                 // bb1[2]: scope 0 at $DIR/copy_propagation_arg.rs:11:16: 11:17
+          nop;                             // bb1[3]: scope 0 at $DIR/copy_propagation_arg.rs:9:19: 12:2
+          return;                          // bb1[4]: scope 0 at $DIR/copy_propagation_arg.rs:12:2: 12:2
+      }
+  }
+  
diff --git a/src/test/mir-opt/deaggregator_test.rs b/src/test/mir-opt/deaggregator_test.rs
index 44c2319bc7e..9004a631291 100644
--- a/src/test/mir-opt/deaggregator_test.rs
+++ b/src/test/mir-opt/deaggregator_test.rs
@@ -4,6 +4,7 @@ struct Baz {
     z: bool,
 }
 
+// EMIT_MIR rustc.bar.Deaggregator.diff
 fn bar(a: usize) -> Baz {
     Baz { x: a, y: 0.0, z: false }
 }
@@ -12,27 +13,3 @@ fn main() {
     // Make sure the function actually gets instantiated.
     bar(0);
 }
-
-// END RUST SOURCE
-// START rustc.bar.Deaggregator.before.mir
-// bb0: {
-//     ...
-//     _2 = _1;
-//     ...
-//     _0 = Baz { x: move _2, y: const 0f32, z: const false };
-//     ...
-//     return;
-// }
-// END rustc.bar.Deaggregator.before.mir
-// START rustc.bar.Deaggregator.after.mir
-// bb0: {
-//     ...
-//     _2 = _1;
-//     ...
-//     (_0.0: usize) = move _2;
-//     (_0.1: f32) = const 0f32;
-//     (_0.2: bool) = const false;
-//     ...
-//     return;
-// }
-// END rustc.bar.Deaggregator.after.mir
diff --git a/src/test/mir-opt/deaggregator_test/rustc.bar.Deaggregator.diff b/src/test/mir-opt/deaggregator_test/rustc.bar.Deaggregator.diff
new file mode 100644
index 00000000000..082f05a50c1
--- /dev/null
+++ b/src/test/mir-opt/deaggregator_test/rustc.bar.Deaggregator.diff
@@ -0,0 +1,34 @@
+- // MIR for `bar` before Deaggregator
++ // MIR for `bar` after Deaggregator
+  
+  fn bar(_1: usize) -> Baz {
+      debug a => _1;                       // in scope 0 at $DIR/deaggregator_test.rs:8:8: 8:9
+      let mut _0: Baz;                     // return place in scope 0 at $DIR/deaggregator_test.rs:8:21: 8:24
+      let mut _2: usize;                   // in scope 0 at $DIR/deaggregator_test.rs:9:14: 9:15
+  
+      bb0: {
+          StorageLive(_2);                 // bb0[0]: scope 0 at $DIR/deaggregator_test.rs:9:14: 9:15
+          _2 = _1;                         // bb0[1]: scope 0 at $DIR/deaggregator_test.rs:9:14: 9:15
+-         _0 = Baz { x: move _2, y: const 0f32, z: const false }; // bb0[2]: scope 0 at $DIR/deaggregator_test.rs:9:5: 9:35
++         (_0.0: usize) = move _2;         // bb0[2]: scope 0 at $DIR/deaggregator_test.rs:9:5: 9:35
++         (_0.1: f32) = const 0f32;        // bb0[3]: scope 0 at $DIR/deaggregator_test.rs:9:5: 9:35
+                                           // ty::Const
+                                           // + ty: f32
+                                           // + val: Value(Scalar(0x00000000))
+                                           // mir::Constant
+                                           // + span: $DIR/deaggregator_test.rs:9:20: 9:23
+                                           // + literal: Const { ty: f32, val: Value(Scalar(0x00000000)) }
++         (_0.2: bool) = const false;      // bb0[4]: scope 0 at $DIR/deaggregator_test.rs:9:5: 9:35
+                                           // ty::Const
+                                           // + ty: bool
+                                           // + val: Value(Scalar(0x00))
+                                           // mir::Constant
+                                           // + span: $DIR/deaggregator_test.rs:9:28: 9:33
+                                           // + literal: Const { ty: bool, val: Value(Scalar(0x00)) }
+-         StorageDead(_2);                 // bb0[3]: scope 0 at $DIR/deaggregator_test.rs:9:34: 9:35
+-         return;                          // bb0[4]: scope 0 at $DIR/deaggregator_test.rs:10:2: 10:2
++         StorageDead(_2);                 // bb0[5]: scope 0 at $DIR/deaggregator_test.rs:9:34: 9:35
++         return;                          // bb0[6]: scope 0 at $DIR/deaggregator_test.rs:10:2: 10:2
+      }
+  }
+  
diff --git a/src/test/mir-opt/deaggregator_test_enum.rs b/src/test/mir-opt/deaggregator_test_enum.rs
index fed16271590..e74eafd011f 100644
--- a/src/test/mir-opt/deaggregator_test_enum.rs
+++ b/src/test/mir-opt/deaggregator_test_enum.rs
@@ -3,6 +3,7 @@ enum Baz {
     Foo { x: usize },
 }
 
+// EMIT_MIR rustc.bar.Deaggregator.diff
 fn bar(a: usize) -> Baz {
     Baz::Foo { x: a }
 }
@@ -14,24 +15,3 @@ fn main() {
         Baz::Foo { x } => println!("{}", x),
     };
 }
-
-// END RUST SOURCE
-// START rustc.bar.Deaggregator.before.mir
-// bb0: {
-//     StorageLive(_2);
-//     _2 = _1;
-//     _0 = Baz::Foo { x: move _2 };
-//     StorageDead(_2);
-//     return;
-// }
-// END rustc.bar.Deaggregator.before.mir
-// START rustc.bar.Deaggregator.after.mir
-// bb0: {
-//     StorageLive(_2);
-//     _2 = _1;
-//     ((_0 as Foo).0: usize) = move _2;
-//     discriminant(_0) = 1;
-//     StorageDead(_2);
-//     return;
-// }
-// END rustc.bar.Deaggregator.after.mir
diff --git a/src/test/mir-opt/deaggregator_test_enum/rustc.bar.Deaggregator.diff b/src/test/mir-opt/deaggregator_test_enum/rustc.bar.Deaggregator.diff
new file mode 100644
index 00000000000..b1839ef7e0e
--- /dev/null
+++ b/src/test/mir-opt/deaggregator_test_enum/rustc.bar.Deaggregator.diff
@@ -0,0 +1,21 @@
+- // MIR for `bar` before Deaggregator
++ // MIR for `bar` after Deaggregator
+  
+  fn bar(_1: usize) -> Baz {
+      debug a => _1;                       // in scope 0 at $DIR/deaggregator_test_enum.rs:7:8: 7:9
+      let mut _0: Baz;                     // return place in scope 0 at $DIR/deaggregator_test_enum.rs:7:21: 7:24
+      let mut _2: usize;                   // in scope 0 at $DIR/deaggregator_test_enum.rs:8:19: 8:20
+  
+      bb0: {
+          StorageLive(_2);                 // bb0[0]: scope 0 at $DIR/deaggregator_test_enum.rs:8:19: 8:20
+          _2 = _1;                         // bb0[1]: scope 0 at $DIR/deaggregator_test_enum.rs:8:19: 8:20
+-         _0 = Baz::Foo { x: move _2 };    // bb0[2]: scope 0 at $DIR/deaggregator_test_enum.rs:8:5: 8:22
+-         StorageDead(_2);                 // bb0[3]: scope 0 at $DIR/deaggregator_test_enum.rs:8:21: 8:22
+-         return;                          // bb0[4]: scope 0 at $DIR/deaggregator_test_enum.rs:9:2: 9:2
++         ((_0 as Foo).0: usize) = move _2; // bb0[2]: scope 0 at $DIR/deaggregator_test_enum.rs:8:5: 8:22
++         discriminant(_0) = 1;            // bb0[3]: scope 0 at $DIR/deaggregator_test_enum.rs:8:5: 8:22
++         StorageDead(_2);                 // bb0[4]: scope 0 at $DIR/deaggregator_test_enum.rs:8:21: 8:22
++         return;                          // bb0[5]: scope 0 at $DIR/deaggregator_test_enum.rs:9:2: 9:2
+      }
+  }
+  
diff --git a/src/test/mir-opt/deaggregator_test_enum_2.rs b/src/test/mir-opt/deaggregator_test_enum_2.rs
index b39ad1bef8e..d5201ed72a8 100644
--- a/src/test/mir-opt/deaggregator_test_enum_2.rs
+++ b/src/test/mir-opt/deaggregator_test_enum_2.rs
@@ -5,6 +5,7 @@ enum Foo {
     B(i32),
 }
 
+// EMIT_MIR rustc.test1.Deaggregator.diff
 fn test1(x: bool, y: i32) -> Foo {
     if x {
         Foo::A(y)
@@ -17,40 +18,3 @@ fn main() {
     // Make sure the function actually gets instantiated.
     test1(false, 0);
 }
-
-// END RUST SOURCE
-// START rustc.test1.Deaggregator.before.mir
-//  bb1: {
-//      StorageLive(_5);
-//      _5 = _2;
-//      _0 = Foo::B(move _5,);
-//      StorageDead(_5);
-//      goto -> bb3;
-//  }
-//  bb2: {
-//      StorageLive(_4);
-//      _4 = _2;
-//      _0 = Foo::A(move _4,);
-//      StorageDead(_4);
-//      goto -> bb3;
-//  }
-// END rustc.test1.Deaggregator.before.mir
-// START rustc.test1.Deaggregator.after.mir
-//  bb1: {
-//      StorageLive(_5);
-//      _5 = _2;
-//      ((_0 as B).0: i32) = move _5;
-//      discriminant(_0) = 1;
-//      StorageDead(_5);
-//      goto -> bb3;
-//  }
-//  bb2: {
-//      StorageLive(_4);
-//      _4 = _2;
-//      ((_0 as A).0: i32) = move _4;
-//      discriminant(_0) = 0;
-//      StorageDead(_4);
-//      goto -> bb3;
-//  }
-// END rustc.test1.Deaggregator.after.mir
-//
diff --git a/src/test/mir-opt/deaggregator_test_enum_2/rustc.test1.Deaggregator.diff b/src/test/mir-opt/deaggregator_test_enum_2/rustc.test1.Deaggregator.diff
new file mode 100644
index 00000000000..a72a679b209
--- /dev/null
+++ b/src/test/mir-opt/deaggregator_test_enum_2/rustc.test1.Deaggregator.diff
@@ -0,0 +1,47 @@
+- // MIR for `test1` before Deaggregator
++ // MIR for `test1` after Deaggregator
+  
+  fn test1(_1: bool, _2: i32) -> Foo {
+      debug x => _1;                       // in scope 0 at $DIR/deaggregator_test_enum_2.rs:9:10: 9:11
+      debug y => _2;                       // in scope 0 at $DIR/deaggregator_test_enum_2.rs:9:19: 9:20
+      let mut _0: Foo;                     // return place in scope 0 at $DIR/deaggregator_test_enum_2.rs:9:30: 9:33
+      let mut _3: bool;                    // in scope 0 at $DIR/deaggregator_test_enum_2.rs:10:8: 10:9
+      let mut _4: i32;                     // in scope 0 at $DIR/deaggregator_test_enum_2.rs:11:16: 11:17
+      let mut _5: i32;                     // in scope 0 at $DIR/deaggregator_test_enum_2.rs:13:16: 13:17
+  
+      bb0: {
+          StorageLive(_3);                 // bb0[0]: scope 0 at $DIR/deaggregator_test_enum_2.rs:10:8: 10:9
+          _3 = _1;                         // bb0[1]: scope 0 at $DIR/deaggregator_test_enum_2.rs:10:8: 10:9
+          switchInt(_3) -> [false: bb1, otherwise: bb2]; // bb0[2]: scope 0 at $DIR/deaggregator_test_enum_2.rs:10:5: 14:6
+      }
+  
+      bb1: {
+          StorageLive(_5);                 // bb1[0]: scope 0 at $DIR/deaggregator_test_enum_2.rs:13:16: 13:17
+          _5 = _2;                         // bb1[1]: scope 0 at $DIR/deaggregator_test_enum_2.rs:13:16: 13:17
+-         _0 = Foo::B(move _5,);           // bb1[2]: scope 0 at $DIR/deaggregator_test_enum_2.rs:13:9: 13:18
+-         StorageDead(_5);                 // bb1[3]: scope 0 at $DIR/deaggregator_test_enum_2.rs:13:17: 13:18
+-         goto -> bb3;                     // bb1[4]: scope 0 at $DIR/deaggregator_test_enum_2.rs:10:5: 14:6
++         ((_0 as B).0: i32) = move _5;    // bb1[2]: scope 0 at $DIR/deaggregator_test_enum_2.rs:13:9: 13:18
++         discriminant(_0) = 1;            // bb1[3]: scope 0 at $DIR/deaggregator_test_enum_2.rs:13:9: 13:18
++         StorageDead(_5);                 // bb1[4]: scope 0 at $DIR/deaggregator_test_enum_2.rs:13:17: 13:18
++         goto -> bb3;                     // bb1[5]: scope 0 at $DIR/deaggregator_test_enum_2.rs:10:5: 14:6
+      }
+  
+      bb2: {
+          StorageLive(_4);                 // bb2[0]: scope 0 at $DIR/deaggregator_test_enum_2.rs:11:16: 11:17
+          _4 = _2;                         // bb2[1]: scope 0 at $DIR/deaggregator_test_enum_2.rs:11:16: 11:17
+-         _0 = Foo::A(move _4,);           // bb2[2]: scope 0 at $DIR/deaggregator_test_enum_2.rs:11:9: 11:18
+-         StorageDead(_4);                 // bb2[3]: scope 0 at $DIR/deaggregator_test_enum_2.rs:11:17: 11:18
+-         goto -> bb3;                     // bb2[4]: scope 0 at $DIR/deaggregator_test_enum_2.rs:10:5: 14:6
++         ((_0 as A).0: i32) = move _4;    // bb2[2]: scope 0 at $DIR/deaggregator_test_enum_2.rs:11:9: 11:18
++         discriminant(_0) = 0;            // bb2[3]: scope 0 at $DIR/deaggregator_test_enum_2.rs:11:9: 11:18
++         StorageDead(_4);                 // bb2[4]: scope 0 at $DIR/deaggregator_test_enum_2.rs:11:17: 11:18
++         goto -> bb3;                     // bb2[5]: scope 0 at $DIR/deaggregator_test_enum_2.rs:10:5: 14:6
+      }
+  
+      bb3: {
+          StorageDead(_3);                 // bb3[0]: scope 0 at $DIR/deaggregator_test_enum_2.rs:15:1: 15:2
+          return;                          // bb3[1]: scope 0 at $DIR/deaggregator_test_enum_2.rs:15:2: 15:2
+      }
+  }
+  
diff --git a/src/test/mir-opt/deaggregator_test_multiple.rs b/src/test/mir-opt/deaggregator_test_multiple.rs
index 34c41af273f..824a970ce2f 100644
--- a/src/test/mir-opt/deaggregator_test_multiple.rs
+++ b/src/test/mir-opt/deaggregator_test_multiple.rs
@@ -5,6 +5,7 @@ enum Foo {
     B,
 }
 
+// EMIT_MIR rustc.test.Deaggregator.diff
 fn test(x: i32) -> [Foo; 2] {
     [Foo::A(x), Foo::A(x)]
 }
@@ -13,37 +14,3 @@ fn main() {
     // Make sure the function actually gets instantiated.
     test(0);
 }
-
-// END RUST SOURCE
-// START rustc.test.Deaggregator.before.mir
-// bb0: {
-//     ...
-//     _3 = _1;
-//     ...
-//     _2 = Foo::A(move _3,);
-//     ...
-//     _5 = _1;
-//     _4 = Foo::A(move _5,);
-//     ...
-//     _0 = [move _2, move _4];
-//     ...
-//     return;
-// }
-// END rustc.test.Deaggregator.before.mir
-// START rustc.test.Deaggregator.after.mir
-// bb0: {
-//     ...
-//     _3 = _1;
-//     ...
-//     ((_2 as A).0: i32) = move _3;
-//     discriminant(_2) = 0;
-//     ...
-//     _5 = _1;
-//     ((_4 as A).0: i32) = move _5;
-//     discriminant(_4) = 0;
-//     ...
-//     _0 = [move _2, move _4];
-//     ...
-//     return;
-// }
-// END rustc.test.Deaggregator.after.mir
diff --git a/src/test/mir-opt/deaggregator_test_multiple/rustc.test.Deaggregator.diff b/src/test/mir-opt/deaggregator_test_multiple/rustc.test.Deaggregator.diff
new file mode 100644
index 00000000000..126dfc1ac91
--- /dev/null
+++ b/src/test/mir-opt/deaggregator_test_multiple/rustc.test.Deaggregator.diff
@@ -0,0 +1,42 @@
+- // MIR for `test` before Deaggregator
++ // MIR for `test` after Deaggregator
+  
+  fn test(_1: i32) -> [Foo; 2] {
+      debug x => _1;                       // in scope 0 at $DIR/deaggregator_test_multiple.rs:9:9: 9:10
+      let mut _0: [Foo; 2];                // return place in scope 0 at $DIR/deaggregator_test_multiple.rs:9:20: 9:28
+      let mut _2: Foo;                     // in scope 0 at $DIR/deaggregator_test_multiple.rs:10:6: 10:15
+      let mut _3: i32;                     // in scope 0 at $DIR/deaggregator_test_multiple.rs:10:13: 10:14
+      let mut _4: Foo;                     // in scope 0 at $DIR/deaggregator_test_multiple.rs:10:17: 10:26
+      let mut _5: i32;                     // in scope 0 at $DIR/deaggregator_test_multiple.rs:10:24: 10:25
+  
+      bb0: {
+          StorageLive(_2);                 // bb0[0]: scope 0 at $DIR/deaggregator_test_multiple.rs:10:6: 10:15
+          StorageLive(_3);                 // bb0[1]: scope 0 at $DIR/deaggregator_test_multiple.rs:10:13: 10:14
+          _3 = _1;                         // bb0[2]: scope 0 at $DIR/deaggregator_test_multiple.rs:10:13: 10:14
+-         _2 = Foo::A(move _3,);           // bb0[3]: scope 0 at $DIR/deaggregator_test_multiple.rs:10:6: 10:15
+-         StorageDead(_3);                 // bb0[4]: scope 0 at $DIR/deaggregator_test_multiple.rs:10:14: 10:15
+-         StorageLive(_4);                 // bb0[5]: scope 0 at $DIR/deaggregator_test_multiple.rs:10:17: 10:26
+-         StorageLive(_5);                 // bb0[6]: scope 0 at $DIR/deaggregator_test_multiple.rs:10:24: 10:25
+-         _5 = _1;                         // bb0[7]: scope 0 at $DIR/deaggregator_test_multiple.rs:10:24: 10:25
+-         _4 = Foo::A(move _5,);           // bb0[8]: scope 0 at $DIR/deaggregator_test_multiple.rs:10:17: 10:26
+-         StorageDead(_5);                 // bb0[9]: scope 0 at $DIR/deaggregator_test_multiple.rs:10:25: 10:26
+-         _0 = [move _2, move _4];         // bb0[10]: scope 0 at $DIR/deaggregator_test_multiple.rs:10:5: 10:27
+-         StorageDead(_4);                 // bb0[11]: scope 0 at $DIR/deaggregator_test_multiple.rs:10:26: 10:27
+-         StorageDead(_2);                 // bb0[12]: scope 0 at $DIR/deaggregator_test_multiple.rs:10:26: 10:27
+-         return;                          // bb0[13]: scope 0 at $DIR/deaggregator_test_multiple.rs:11:2: 11:2
++         ((_2 as A).0: i32) = move _3;    // bb0[3]: scope 0 at $DIR/deaggregator_test_multiple.rs:10:6: 10:15
++         discriminant(_2) = 0;            // bb0[4]: scope 0 at $DIR/deaggregator_test_multiple.rs:10:6: 10:15
++         StorageDead(_3);                 // bb0[5]: scope 0 at $DIR/deaggregator_test_multiple.rs:10:14: 10:15
++         StorageLive(_4);                 // bb0[6]: scope 0 at $DIR/deaggregator_test_multiple.rs:10:17: 10:26
++         StorageLive(_5);                 // bb0[7]: scope 0 at $DIR/deaggregator_test_multiple.rs:10:24: 10:25
++         _5 = _1;                         // bb0[8]: scope 0 at $DIR/deaggregator_test_multiple.rs:10:24: 10:25
++         ((_4 as A).0: i32) = move _5;    // bb0[9]: scope 0 at $DIR/deaggregator_test_multiple.rs:10:17: 10:26
++         discriminant(_4) = 0;            // bb0[10]: scope 0 at $DIR/deaggregator_test_multiple.rs:10:17: 10:26
++         StorageDead(_5);                 // bb0[11]: scope 0 at $DIR/deaggregator_test_multiple.rs:10:25: 10:26
++         _0 = [move _2, move _4];         // bb0[12]: scope 0 at $DIR/deaggregator_test_multiple.rs:10:5: 10:27
++         StorageDead(_4);                 // bb0[13]: scope 0 at $DIR/deaggregator_test_multiple.rs:10:26: 10:27
++         StorageDead(_2);                 // bb0[14]: scope 0 at $DIR/deaggregator_test_multiple.rs:10:26: 10:27
++         return;                          // bb0[15]: scope 0 at $DIR/deaggregator_test_multiple.rs:11:2: 11:2
+      }
+  }
+  
diff --git a/src/test/mir-opt/exponential-or.rs b/src/test/mir-opt/exponential-or.rs
index 4c23582e1f8..9fce7928f6a 100644
--- a/src/test/mir-opt/exponential-or.rs
+++ b/src/test/mir-opt/exponential-or.rs
@@ -1,9 +1,8 @@
 // Test that simple or-patterns don't get expanded to exponentially large CFGs
 
-// ignore-tidy-linelength
-
 #![feature(or_patterns)]
 
+// EMIT_MIR rustc.match_tuple.SimplifyCfg-initial.after.mir
 fn match_tuple(x: (u32, bool, Option<i32>, u32)) -> u32 {
     match x {
         (y @ (1 | 4), true | false, Some(1 | 8) | None, z @ (6..=9 | 13..=16)) => y ^ z,
@@ -12,65 +11,3 @@ fn match_tuple(x: (u32, bool, Option<i32>, u32)) -> u32 {
 }
 
 fn main() {}
-
-// END RUST SOURCE
-
-// START rustc.match_tuple.SimplifyCfg-initial.after.mir
-// scope 1 {
-//     debug y => _7;
-//     debug z => _8;
-// }
-// bb0: {
-//     FakeRead(ForMatchedPlace, _1);
-//     switchInt((_1.0: u32)) -> [1u32: bb2, 4u32: bb2, otherwise: bb1];
-// }
-// bb1: {
-//     _0 = const 0u32;
-//     goto -> bb10;
-// }
-// bb2: {
-//     _2 = discriminant((_1.2: std::option::Option<i32>));
-//     switchInt(move _2) -> [0isize: bb4, 1isize: bb3, otherwise: bb1];
-// }
-// bb3: {
-//     switchInt((((_1.2: std::option::Option<i32>) as Some).0: i32)) -> [1i32: bb4, 8i32: bb4, otherwise: bb1];
-// }
-// bb4: {
-//     _5 = Le(const 6u32, (_1.3: u32));
-//     switchInt(move _5) -> [false: bb6, otherwise: bb5];
-// }
-// bb5: {
-//     _6 = Le((_1.3: u32), const 9u32);
-//     switchInt(move _6) -> [false: bb6, otherwise: bb8];
-// }
-// bb6: {
-//     _3 = Le(const 13u32, (_1.3: u32));
-//     switchInt(move _3) -> [false: bb1, otherwise: bb7];
-// }
-// bb7: {
-//     _4 = Le((_1.3: u32), const 16u32);
-//     switchInt(move _4) -> [false: bb1, otherwise: bb8];
-// }
-// bb8: {
-//     falseEdges -> [real: bb9, imaginary: bb1];
-// }
-// bb9: {
-//     StorageLive(_7);
-//     _7 = (_1.0: u32);
-//     StorageLive(_8);
-//     _8 = (_1.3: u32);
-//     StorageLive(_9);
-//     _9 = _7;
-//     StorageLive(_10);
-//     _10 = _8;
-//     _0 = BitXor(move _9, move _10);
-//     StorageDead(_10);
-//     StorageDead(_9);
-//     StorageDead(_8);
-//     StorageDead(_7);
-//     goto -> bb10;
-// }
-// bb10: {
-//     return;
-// }
-// END rustc.match_tuple.SimplifyCfg-initial.after.mir
diff --git a/src/test/mir-opt/exponential-or/rustc.match_tuple.SimplifyCfg-initial.after.mir b/src/test/mir-opt/exponential-or/rustc.match_tuple.SimplifyCfg-initial.after.mir
new file mode 100644
index 00000000000..192ec1bbe21
--- /dev/null
+++ b/src/test/mir-opt/exponential-or/rustc.match_tuple.SimplifyCfg-initial.after.mir
@@ -0,0 +1,113 @@
+// MIR for `match_tuple` after SimplifyCfg-initial
+
+fn match_tuple(_1: (u32, bool, std::option::Option<i32>, u32)) -> u32 {
+    debug x => _1;                       // in scope 0 at $DIR/exponential-or.rs:6:16: 6:17
+    let mut _0: u32;                     // return place in scope 0 at $DIR/exponential-or.rs:6:53: 6:56
+    let mut _2: isize;                   // in scope 0 at $DIR/exponential-or.rs:8:37: 8:48
+    let mut _3: bool;                    // in scope 0 at $DIR/exponential-or.rs:8:70: 8:77
+    let mut _4: bool;                    // in scope 0 at $DIR/exponential-or.rs:8:70: 8:77
+    let mut _5: bool;                    // in scope 0 at $DIR/exponential-or.rs:8:62: 8:67
+    let mut _6: bool;                    // in scope 0 at $DIR/exponential-or.rs:8:62: 8:67
+    let _7: u32;                         // in scope 0 at $DIR/exponential-or.rs:8:10: 8:21
+    let _8: u32;                         // in scope 0 at $DIR/exponential-or.rs:8:57: 8:78
+    let mut _9: u32;                     // in scope 0 at $DIR/exponential-or.rs:8:83: 8:84
+    let mut _10: u32;                    // in scope 0 at $DIR/exponential-or.rs:8:87: 8:88
+    scope 1 {
+        debug y => _7;                   // in scope 1 at $DIR/exponential-or.rs:8:10: 8:21
+        debug z => _8;                   // in scope 1 at $DIR/exponential-or.rs:8:57: 8:78
+    }
+
+    bb0: {
+        FakeRead(ForMatchedPlace, _1);   // bb0[0]: scope 0 at $DIR/exponential-or.rs:7:11: 7:12
+        switchInt((_1.0: u32)) -> [1u32: bb2, 4u32: bb2, otherwise: bb1]; // bb0[1]: scope 0 at $DIR/exponential-or.rs:8:15: 8:16
+    }
+
+    bb1: {
+        _0 = const 0u32;                 // bb1[0]: scope 0 at $DIR/exponential-or.rs:9:14: 9:15
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000000))
+                                         // mir::Constant
+                                         // + span: $DIR/exponential-or.rs:9:14: 9:15
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000000)) }
+        goto -> bb10;                    // bb1[1]: scope 0 at $DIR/exponential-or.rs:7:5: 10:6
+    }
+
+    bb2: {
+        _2 = discriminant((_1.2: std::option::Option<i32>)); // bb2[0]: scope 0 at $DIR/exponential-or.rs:8:37: 8:48
+        switchInt(move _2) -> [0isize: bb4, 1isize: bb3, otherwise: bb1]; // bb2[1]: scope 0 at $DIR/exponential-or.rs:8:37: 8:48
+    }
+
+    bb3: {
+        switchInt((((_1.2: std::option::Option<i32>) as Some).0: i32)) -> [1i32: bb4, 8i32: bb4, otherwise: bb1]; // bb3[0]: scope 0 at $DIR/exponential-or.rs:8:42: 8:43
+    }
+
+    bb4: {
+        _5 = Le(const 6u32, (_1.3: u32)); // bb4[0]: scope 0 at $DIR/exponential-or.rs:8:62: 8:67
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000006))
+                                         // mir::Constant
+                                         // + span: $DIR/exponential-or.rs:8:62: 8:67
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000006)) }
+        switchInt(move _5) -> [false: bb6, otherwise: bb5]; // bb4[1]: scope 0 at $DIR/exponential-or.rs:8:62: 8:67
+    }
+
+    bb5: {
+        _6 = Le((_1.3: u32), const 9u32); // bb5[0]: scope 0 at $DIR/exponential-or.rs:8:62: 8:67
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000009))
+                                         // mir::Constant
+                                         // + span: $DIR/exponential-or.rs:8:62: 8:67
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000009)) }
+        switchInt(move _6) -> [false: bb6, otherwise: bb8]; // bb5[1]: scope 0 at $DIR/exponential-or.rs:8:62: 8:67
+    }
+
+    bb6: {
+        _3 = Le(const 13u32, (_1.3: u32)); // bb6[0]: scope 0 at $DIR/exponential-or.rs:8:70: 8:77
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x0000000d))
+                                         // mir::Constant
+                                         // + span: $DIR/exponential-or.rs:8:70: 8:77
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x0000000d)) }
+        switchInt(move _3) -> [false: bb1, otherwise: bb7]; // bb6[1]: scope 0 at $DIR/exponential-or.rs:8:70: 8:77
+    }
+
+    bb7: {
+        _4 = Le((_1.3: u32), const 16u32); // bb7[0]: scope 0 at $DIR/exponential-or.rs:8:70: 8:77
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000010))
+                                         // mir::Constant
+                                         // + span: $DIR/exponential-or.rs:8:70: 8:77
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000010)) }
+        switchInt(move _4) -> [false: bb1, otherwise: bb8]; // bb7[1]: scope 0 at $DIR/exponential-or.rs:8:70: 8:77
+    }
+
+    bb8: {
+        falseEdges -> [real: bb9, imaginary: bb1]; // bb8[0]: scope 0 at $DIR/exponential-or.rs:8:9: 8:79
+    }
+
+    bb9: {
+        StorageLive(_7);                 // bb9[0]: scope 0 at $DIR/exponential-or.rs:8:10: 8:21
+        _7 = (_1.0: u32);                // bb9[1]: scope 0 at $DIR/exponential-or.rs:8:10: 8:21
+        StorageLive(_8);                 // bb9[2]: scope 0 at $DIR/exponential-or.rs:8:57: 8:78
+        _8 = (_1.3: u32);                // bb9[3]: scope 0 at $DIR/exponential-or.rs:8:57: 8:78
+        StorageLive(_9);                 // bb9[4]: scope 1 at $DIR/exponential-or.rs:8:83: 8:84
+        _9 = _7;                         // bb9[5]: scope 1 at $DIR/exponential-or.rs:8:83: 8:84
+        StorageLive(_10);                // bb9[6]: scope 1 at $DIR/exponential-or.rs:8:87: 8:88
+        _10 = _8;                        // bb9[7]: scope 1 at $DIR/exponential-or.rs:8:87: 8:88
+        _0 = BitXor(move _9, move _10);  // bb9[8]: scope 1 at $DIR/exponential-or.rs:8:83: 8:88
+        StorageDead(_10);                // bb9[9]: scope 1 at $DIR/exponential-or.rs:8:87: 8:88
+        StorageDead(_9);                 // bb9[10]: scope 1 at $DIR/exponential-or.rs:8:87: 8:88
+        StorageDead(_8);                 // bb9[11]: scope 0 at $DIR/exponential-or.rs:8:88: 8:89
+        StorageDead(_7);                 // bb9[12]: scope 0 at $DIR/exponential-or.rs:8:88: 8:89
+        goto -> bb10;                    // bb9[13]: scope 0 at $DIR/exponential-or.rs:7:5: 10:6
+    }
+
+    bb10: {
+        return;                          // bb10[0]: scope 0 at $DIR/exponential-or.rs:11:2: 11:2
+    }
+}
diff --git a/src/test/mir-opt/generator-drop-cleanup.rs b/src/test/mir-opt/generator-drop-cleanup.rs
index 278dc49c926..1c3025d5e3f 100644
--- a/src/test/mir-opt/generator-drop-cleanup.rs
+++ b/src/test/mir-opt/generator-drop-cleanup.rs
@@ -3,45 +3,9 @@
 // Regression test for #58892, generator drop shims should not have blocks
 // spuriously marked as cleanup
 
+// EMIT_MIR rustc.main-{{closure}}.generator_drop.0.mir
 fn main() {
     let gen = || {
         yield;
     };
 }
-
-// END RUST SOURCE
-
-// START rustc.main-{{closure}}.generator_drop.0.mir
-// bb0: {
-//     _7 = discriminant((*_1));
-//     switchInt(move _7) -> [0u32: bb4, 3u32: bb7, otherwise: bb8];
-// }
-// bb1: {
-//     StorageDead(_4);
-//     StorageDead(_3);
-//     goto -> bb5;
-// }
-// bb2: {
-//     return;
-// }
-// bb3: {
-//     return;
-// }
-// bb4: {
-//     goto -> bb6;
-// }
-// bb5: {
-//     goto -> bb2;
-// }
-// bb6: {
-//     goto -> bb3;
-// }
-// bb7: {
-//     StorageLive(_3);
-//     StorageLive(_4);
-//     goto -> bb1;
-// }
-// bb8: {
-//     return;
-// }
-// END rustc.main-{{closure}}.generator_drop.0.mir
diff --git a/src/test/mir-opt/generator-drop-cleanup/rustc.main-{{closure}}.generator_drop.0.mir b/src/test/mir-opt/generator-drop-cleanup/rustc.main-{{closure}}.generator_drop.0.mir
new file mode 100644
index 00000000000..05ed0a641af
--- /dev/null
+++ b/src/test/mir-opt/generator-drop-cleanup/rustc.main-{{closure}}.generator_drop.0.mir
@@ -0,0 +1,53 @@
+// MIR for `main::{{closure}}#0` 0 generator_drop
+// generator_layout = GeneratorLayout { field_tys: [], variant_fields: [[], [], [], []], storage_conflicts: BitMatrix { num_rows: 0, num_columns: 0, words: [], marker: PhantomData } }
+
+fn main::{{closure}}#0(_1: *mut [generator@$DIR/generator-drop-cleanup.rs:8:15: 10:6 {()}]) -> () {
+    let mut _0: ();                      // return place in scope 0 at $DIR/generator-drop-cleanup.rs:8:15: 10:6
+    let mut _2: ();                      // in scope 0 at $DIR/generator-drop-cleanup.rs:8:15: 10:6
+    let _3: ();                          // in scope 0 at $DIR/generator-drop-cleanup.rs:9:9: 9:14
+    let mut _4: ();                      // in scope 0 at $DIR/generator-drop-cleanup.rs:9:9: 9:14
+    let mut _5: ();                      // in scope 0 at $DIR/generator-drop-cleanup.rs:8:18: 8:18
+    let mut _6: ();                      // in scope 0 at $DIR/generator-drop-cleanup.rs:8:15: 10:6
+    let mut _7: isize;                   // in scope 0 at $DIR/generator-drop-cleanup.rs:8:15: 10:6
+
+    bb0: {
+        _7 = discriminant((*_1));        // bb0[0]: scope 0 at $DIR/generator-drop-cleanup.rs:8:15: 10:6
+        switchInt(move _7) -> [0u32: bb4, 3u32: bb7, otherwise: bb8]; // bb0[1]: scope 0 at $DIR/generator-drop-cleanup.rs:8:15: 10:6
+    }
+
+    bb1: {
+        StorageDead(_4);                 // bb1[0]: scope 0 at $DIR/generator-drop-cleanup.rs:9:13: 9:14
+        StorageDead(_3);                 // bb1[1]: scope 0 at $DIR/generator-drop-cleanup.rs:9:14: 9:15
+        goto -> bb5;                     // bb1[2]: scope 0 at $DIR/generator-drop-cleanup.rs:10:5: 10:6
+    }
+
+    bb2: {
+        return;                          // bb2[0]: scope 0 at $DIR/generator-drop-cleanup.rs:8:15: 10:6
+    }
+
+    bb3: {
+        return;                          // bb3[0]: scope 0 at $DIR/generator-drop-cleanup.rs:8:15: 10:6
+    }
+
+    bb4: {
+        goto -> bb6;                     // bb4[0]: scope 0 at $DIR/generator-drop-cleanup.rs:8:15: 10:6
+    }
+
+    bb5: {
+        goto -> bb2;                     // bb5[0]: scope 0 at $DIR/generator-drop-cleanup.rs:10:5: 10:6
+    }
+
+    bb6: {
+        goto -> bb3;                     // bb6[0]: scope 0 at $DIR/generator-drop-cleanup.rs:8:15: 10:6
+    }
+
+    bb7: {
+        StorageLive(_3);                 // bb7[0]: scope 0 at $DIR/generator-drop-cleanup.rs:8:15: 10:6
+        StorageLive(_4);                 // bb7[1]: scope 0 at $DIR/generator-drop-cleanup.rs:8:15: 10:6
+        goto -> bb1;                     // bb7[2]: scope 0 at $DIR/generator-drop-cleanup.rs:8:15: 10:6
+    }
+
+    bb8: {
+        return;                          // bb8[0]: scope 0 at $DIR/generator-drop-cleanup.rs:8:15: 10:6
+    }
+}
diff --git a/src/test/mir-opt/generator-storage-dead-unwind.rs b/src/test/mir-opt/generator-storage-dead-unwind.rs
index 82b216a99cf..abfb39c77d6 100644
--- a/src/test/mir-opt/generator-storage-dead-unwind.rs
+++ b/src/test/mir-opt/generator-storage-dead-unwind.rs
@@ -17,6 +17,7 @@ struct Bar(i32);
 
 fn take<T>(_x: T) {}
 
+// EMIT_MIR rustc.main-{{closure}}.StateTransform.before.mir
 fn main() {
     let _gen = || {
         let a = Foo(5);
@@ -26,89 +27,3 @@ fn main() {
         take(b);
     };
 }
-
-// END RUST SOURCE
-
-// START rustc.main-{{closure}}.StateTransform.before.mir
-// ...
-// let _3: Foo;
-// ...
-// let mut _8: Foo;
-// ...
-// let mut _10: Bar;
-// scope 1 {
-//     debug a => _3;
-//     let _4: Bar;
-//     scope 2 {
-//         debug b => _4;
-//     }
-// }
-// bb0: {
-//     StorageLive(_3);
-//     _3 = Foo(const 5i32,);
-//     StorageLive(_4);
-//     _4 = Bar(const 6i32,);
-//     ...
-//     _5 = yield(move _6) -> [resume: bb2, drop: bb4];
-// }
-// bb1 (cleanup): {
-//     resume;
-// }
-// bb2: {
-//     ...
-//     StorageLive(_7);
-//     StorageLive(_8);
-//     _8 = move _3;
-//     _7 = const take::<Foo>(move _8) -> [return: bb7, unwind: bb9];
-// }
-// bb3 (cleanup): {
-//     StorageDead(_3);
-//     drop(_1) -> bb1;
-// }
-// bb4: {
-//     ...
-//     StorageDead(_4);
-//     drop(_3) -> [return: bb5, unwind: bb3];
-// }
-// bb5: {
-//     StorageDead(_3);
-//     drop(_1) -> [return: bb6, unwind: bb1];
-// }
-// bb6: {
-//     generator_drop;
-// }
-// bb7: {
-//     StorageDead(_8);
-//     StorageDead(_7);
-//     StorageLive(_9);
-//     StorageLive(_10);
-//     _10 = move _4;
-//     _9 = const take::<Bar>(move _10) -> [return: bb10, unwind: bb11];
-// }
-// bb8 (cleanup): {
-//     StorageDead(_4);
-//     StorageDead(_3);
-//     drop(_1) -> bb1;
-// }
-// bb9 (cleanup): {
-//     StorageDead(_8);
-//     StorageDead(_7);
-//     goto -> bb8;
-// }
-// bb10: {
-//     StorageDead(_10);
-//     StorageDead(_9);
-//     ...
-//     StorageDead(_4);
-//     StorageDead(_3);
-//     drop(_1) -> [return: bb12, unwind: bb1];
-// }
-// bb11 (cleanup): {
-//     StorageDead(_10);
-//     StorageDead(_9);
-//     goto -> bb8;
-// }
-// bb12: {
-//     return;
-// }
-// END rustc.main-{{closure}}.StateTransform.before.mir
diff --git a/src/test/mir-opt/generator-storage-dead-unwind/rustc.main-{{closure}}.StateTransform.before.mir b/src/test/mir-opt/generator-storage-dead-unwind/rustc.main-{{closure}}.StateTransform.before.mir
new file mode 100644
index 00000000000..cc22982a515
--- /dev/null
+++ b/src/test/mir-opt/generator-storage-dead-unwind/rustc.main-{{closure}}.StateTransform.before.mir
@@ -0,0 +1,130 @@
+// MIR for `main::{{closure}}#0` before StateTransform
+
+fn main::{{closure}}#0(_1: [generator@$DIR/generator-storage-dead-unwind.rs:22:16: 28:6 {Foo, Bar, ()}], _2: ()) -> ()
+yields ()
+ {
+    let mut _0: ();                      // return place in scope 0 at $DIR/generator-storage-dead-unwind.rs:22:19: 22:19
+    let _3: Foo;                         // in scope 0 at $DIR/generator-storage-dead-unwind.rs:23:13: 23:14
+    let _5: ();                          // in scope 0 at $DIR/generator-storage-dead-unwind.rs:25:9: 25:14
+    let mut _6: ();                      // in scope 0 at $DIR/generator-storage-dead-unwind.rs:25:9: 25:14
+    let _7: ();                          // in scope 0 at $DIR/generator-storage-dead-unwind.rs:26:9: 26:16
+    let mut _8: Foo;                     // in scope 0 at $DIR/generator-storage-dead-unwind.rs:26:14: 26:15
+    let _9: ();                          // in scope 0 at $DIR/generator-storage-dead-unwind.rs:27:9: 27:16
+    let mut _10: Bar;                    // in scope 0 at $DIR/generator-storage-dead-unwind.rs:27:14: 27:15
+    scope 1 {
+        debug a => _3;                   // in scope 1 at $DIR/generator-storage-dead-unwind.rs:23:13: 23:14
+        let _4: Bar;                     // in scope 1 at $DIR/generator-storage-dead-unwind.rs:24:13: 24:14
+        scope 2 {
+            debug b => _4;               // in scope 2 at $DIR/generator-storage-dead-unwind.rs:24:13: 24:14
+        }
+    }
+
+    bb0: {
+        StorageLive(_3);                 // bb0[0]: scope 0 at $DIR/generator-storage-dead-unwind.rs:23:13: 23:14
+        _3 = Foo(const 5i32,);           // bb0[1]: scope 0 at $DIR/generator-storage-dead-unwind.rs:23:17: 23:23
+                                         // ty::Const
+                                         // + ty: i32
+                                         // + val: Value(Scalar(0x00000005))
+                                         // mir::Constant
+                                         // + span: $DIR/generator-storage-dead-unwind.rs:23:21: 23:22
+                                         // + literal: Const { ty: i32, val: Value(Scalar(0x00000005)) }
+        StorageLive(_4);                 // bb0[2]: scope 1 at $DIR/generator-storage-dead-unwind.rs:24:13: 24:14
+        _4 = Bar(const 6i32,);           // bb0[3]: scope 1 at $DIR/generator-storage-dead-unwind.rs:24:17: 24:23
+                                         // ty::Const
+                                         // + ty: i32
+                                         // + val: Value(Scalar(0x00000006))
+                                         // mir::Constant
+                                         // + span: $DIR/generator-storage-dead-unwind.rs:24:21: 24:22
+                                         // + literal: Const { ty: i32, val: Value(Scalar(0x00000006)) }
+        StorageLive(_5);                 // bb0[4]: scope 2 at $DIR/generator-storage-dead-unwind.rs:25:9: 25:14
+        StorageLive(_6);                 // bb0[5]: scope 2 at $DIR/generator-storage-dead-unwind.rs:25:9: 25:14
+        _6 = ();                         // bb0[6]: scope 2 at $DIR/generator-storage-dead-unwind.rs:25:9: 25:14
+        _5 = yield(move _6) -> [resume: bb2, drop: bb4]; // bb0[7]: scope 2 at $DIR/generator-storage-dead-unwind.rs:25:9: 25:14
+    }
+
+    bb1 (cleanup): {
+        resume;                          // bb1[0]: scope 0 at $DIR/generator-storage-dead-unwind.rs:22:16: 28:6
+    }
+
+    bb2: {
+        StorageDead(_6);                 // bb2[0]: scope 2 at $DIR/generator-storage-dead-unwind.rs:25:13: 25:14
+        StorageDead(_5);                 // bb2[1]: scope 2 at $DIR/generator-storage-dead-unwind.rs:25:14: 25:15
+        StorageLive(_7);                 // bb2[2]: scope 2 at $DIR/generator-storage-dead-unwind.rs:26:9: 26:16
+        StorageLive(_8);                 // bb2[3]: scope 2 at $DIR/generator-storage-dead-unwind.rs:26:14: 26:15
+        _8 = move _3;                    // bb2[4]: scope 2 at $DIR/generator-storage-dead-unwind.rs:26:14: 26:15
+        _7 = const take::<Foo>(move _8) -> [return: bb7, unwind: bb9]; // bb2[5]: scope 2 at $DIR/generator-storage-dead-unwind.rs:26:9: 26:16
+                                         // ty::Const
+                                         // + ty: fn(Foo) {take::<Foo>}
+                                         // + val: Value(Scalar(<ZST>))
+                                         // mir::Constant
+                                         // + span: $DIR/generator-storage-dead-unwind.rs:26:9: 26:13
+                                         // + literal: Const { ty: fn(Foo) {take::<Foo>}, val: Value(Scalar(<ZST>)) }
+    }
+
+    bb3 (cleanup): {
+        StorageDead(_3);                 // bb3[0]: scope 0 at $DIR/generator-storage-dead-unwind.rs:28:5: 28:6
+        drop(_1) -> bb1;                 // bb3[1]: scope 0 at $DIR/generator-storage-dead-unwind.rs:28:5: 28:6
+    }
+
+    bb4: {
+        StorageDead(_6);                 // bb4[0]: scope 2 at $DIR/generator-storage-dead-unwind.rs:25:13: 25:14
+        StorageDead(_5);                 // bb4[1]: scope 2 at $DIR/generator-storage-dead-unwind.rs:25:14: 25:15
+        StorageDead(_4);                 // bb4[2]: scope 1 at $DIR/generator-storage-dead-unwind.rs:28:5: 28:6
+        drop(_3) -> [return: bb5, unwind: bb3]; // bb4[3]: scope 0 at $DIR/generator-storage-dead-unwind.rs:28:5: 28:6
+    }
+
+    bb5: {
+        StorageDead(_3);                 // bb5[0]: scope 0 at $DIR/generator-storage-dead-unwind.rs:28:5: 28:6
+        drop(_1) -> [return: bb6, unwind: bb1]; // bb5[1]: scope 0 at $DIR/generator-storage-dead-unwind.rs:28:5: 28:6
+    }
+
+    bb6: {
+        generator_drop;                  // bb6[0]: scope 0 at $DIR/generator-storage-dead-unwind.rs:22:16: 28:6
+    }
+
+    bb7: {
+        StorageDead(_8);                 // bb7[0]: scope 2 at $DIR/generator-storage-dead-unwind.rs:26:15: 26:16
+        StorageDead(_7);                 // bb7[1]: scope 2 at $DIR/generator-storage-dead-unwind.rs:26:16: 26:17
+        StorageLive(_9);                 // bb7[2]: scope 2 at $DIR/generator-storage-dead-unwind.rs:27:9: 27:16
+        StorageLive(_10);                // bb7[3]: scope 2 at $DIR/generator-storage-dead-unwind.rs:27:14: 27:15
+        _10 = move _4;                   // bb7[4]: scope 2 at $DIR/generator-storage-dead-unwind.rs:27:14: 27:15
+        _9 = const take::<Bar>(move _10) -> [return: bb10, unwind: bb11]; // bb7[5]: scope 2 at $DIR/generator-storage-dead-unwind.rs:27:9: 27:16
+                                         // ty::Const
+                                         // + ty: fn(Bar) {take::<Bar>}
+                                         // + val: Value(Scalar(<ZST>))
+                                         // mir::Constant
+                                         // + span: $DIR/generator-storage-dead-unwind.rs:27:9: 27:13
+                                         // + literal: Const { ty: fn(Bar) {take::<Bar>}, val: Value(Scalar(<ZST>)) }
+    }
+
+    bb8 (cleanup): {
+        StorageDead(_4);                 // bb8[0]: scope 1 at $DIR/generator-storage-dead-unwind.rs:28:5: 28:6
+        StorageDead(_3);                 // bb8[1]: scope 0 at $DIR/generator-storage-dead-unwind.rs:28:5: 28:6
+        drop(_1) -> bb1;                 // bb8[2]: scope 0 at $DIR/generator-storage-dead-unwind.rs:28:5: 28:6
+    }
+
+    bb9 (cleanup): {
+        StorageDead(_8);                 // bb9[0]: scope 2 at $DIR/generator-storage-dead-unwind.rs:26:15: 26:16
+        StorageDead(_7);                 // bb9[1]: scope 2 at $DIR/generator-storage-dead-unwind.rs:26:16: 26:17
+        goto -> bb8;                     // bb9[2]: scope 2 at $DIR/generator-storage-dead-unwind.rs:1:1: 1:1
+    }
+
+    bb10: {
+        StorageDead(_10);                // bb10[0]: scope 2 at $DIR/generator-storage-dead-unwind.rs:27:15: 27:16
+        StorageDead(_9);                 // bb10[1]: scope 2 at $DIR/generator-storage-dead-unwind.rs:27:16: 27:17
+        _0 = ();                         // bb10[2]: scope 0 at $DIR/generator-storage-dead-unwind.rs:22:19: 28:6
+        StorageDead(_4);                 // bb10[3]: scope 1 at $DIR/generator-storage-dead-unwind.rs:28:5: 28:6
+        StorageDead(_3);                 // bb10[4]: scope 0 at $DIR/generator-storage-dead-unwind.rs:28:5: 28:6
+        drop(_1) -> [return: bb12, unwind: bb1]; // bb10[5]: scope 0 at $DIR/generator-storage-dead-unwind.rs:28:5: 28:6
+    }
+
+    bb11 (cleanup): {
+        StorageDead(_10);                // bb11[0]: scope 2 at $DIR/generator-storage-dead-unwind.rs:27:15: 27:16
+        StorageDead(_9);                 // bb11[1]: scope 2 at $DIR/generator-storage-dead-unwind.rs:27:16: 27:17
+        goto -> bb8;                     // bb11[2]: scope 2 at $DIR/generator-storage-dead-unwind.rs:1:1: 1:1
+    }
+
+    bb12: {
+        return;                          // bb12[0]: scope 0 at $DIR/generator-storage-dead-unwind.rs:28:6: 28:6
+    }
+}
diff --git a/src/test/mir-opt/generator-tiny.rs b/src/test/mir-opt/generator-tiny.rs
index 09e943bd962..b537263dd1b 100644
--- a/src/test/mir-opt/generator-tiny.rs
+++ b/src/test/mir-opt/generator-tiny.rs
@@ -13,6 +13,7 @@ impl Drop for HasDrop {
 
 fn callee() {}
 
+// EMIT_MIR rustc.main-{{closure}}.generator_resume.0.mir
 fn main() {
     let _gen = |_x: u8| {
         let _d = HasDrop;
@@ -22,13 +23,3 @@ fn main() {
         }
     };
 }
-
-// END RUST SOURCE
-
-// START rustc.main-{{closure}}.generator_resume.0.mir
-// bb0: {
-//     ...
-//     switchInt(move _11) -> [0u32: bb1, 3u32: bb5, otherwise: bb6];
-// }
-// ...
-// END rustc.main-{{closure}}.generator_resume.0.mir
diff --git a/src/test/mir-opt/generator-tiny/rustc.main-{{closure}}.generator_resume.0.mir b/src/test/mir-opt/generator-tiny/rustc.main-{{closure}}.generator_resume.0.mir
new file mode 100644
index 00000000000..a79f0d53f3c
--- /dev/null
+++ b/src/test/mir-opt/generator-tiny/rustc.main-{{closure}}.generator_resume.0.mir
@@ -0,0 +1,72 @@
+// MIR for `main::{{closure}}#0` 0 generator_resume
+// generator_layout = GeneratorLayout { field_tys: [HasDrop], variant_fields: [[], [], [], [_0]], storage_conflicts: BitMatrix { num_rows: 1, num_columns: 1, words: [1], marker: PhantomData } }
+
+fn main::{{closure}}#0(_1: std::pin::Pin<&mut [generator@$DIR/generator-tiny.rs:18:16: 24:6 {u8, HasDrop, ()}]>, _2: u8) -> std::ops::GeneratorState<(), ()> {
+    debug _x => _10;                     // in scope 0 at $DIR/generator-tiny.rs:18:17: 18:19
+    let mut _0: std::ops::GeneratorState<(), ()>; // return place in scope 0 at $DIR/generator-tiny.rs:18:16: 24:6
+    let _3: HasDrop;                     // in scope 0 at $DIR/generator-tiny.rs:19:13: 19:15
+    let mut _4: !;                       // in scope 0 at $DIR/generator-tiny.rs:20:9: 23:10
+    let mut _5: ();                      // in scope 0 at $DIR/generator-tiny.rs:18:16: 24:6
+    let _6: u8;                          // in scope 0 at $DIR/generator-tiny.rs:21:13: 21:18
+    let mut _7: ();                      // in scope 0 at $DIR/generator-tiny.rs:21:13: 21:18
+    let _8: ();                          // in scope 0 at $DIR/generator-tiny.rs:22:13: 22:21
+    let mut _9: ();                      // in scope 0 at $DIR/generator-tiny.rs:18:25: 18:25
+    let _10: u8;                         // in scope 0 at $DIR/generator-tiny.rs:18:17: 18:19
+    let mut _11: isize;                  // in scope 0 at $DIR/generator-tiny.rs:18:16: 24:6
+    scope 1 {
+        debug _d => (((*(_1.0: &mut [generator@$DIR/generator-tiny.rs:18:16: 24:6 {u8, HasDrop, ()}])) as variant#3).0: HasDrop); // in scope 1 at $DIR/generator-tiny.rs:19:13: 19:15
+    }
+
+    bb0: {
+        _11 = discriminant((*(_1.0: &mut [generator@$DIR/generator-tiny.rs:18:16: 24:6 {u8, HasDrop, ()}]))); // bb0[0]: scope 0 at $DIR/generator-tiny.rs:18:16: 24:6
+        switchInt(move _11) -> [0u32: bb1, 3u32: bb5, otherwise: bb6]; // bb0[1]: scope 0 at $DIR/generator-tiny.rs:18:16: 24:6
+    }
+
+    bb1: {
+        _10 = move _2;                   // bb1[0]: scope 0 at $DIR/generator-tiny.rs:18:16: 24:6
+        nop;                             // bb1[1]: scope 0 at $DIR/generator-tiny.rs:19:13: 19:15
+        (((*(_1.0: &mut [generator@$DIR/generator-tiny.rs:18:16: 24:6 {u8, HasDrop, ()}])) as variant#3).0: HasDrop) = HasDrop; // bb1[2]: scope 0 at $DIR/generator-tiny.rs:19:18: 19:25
+        StorageLive(_4);                 // bb1[3]: scope 1 at $DIR/generator-tiny.rs:20:9: 23:10
+        goto -> bb2;                     // bb1[4]: scope 1 at $DIR/generator-tiny.rs:20:9: 23:10
+    }
+
+    bb2: {
+        StorageLive(_6);                 // bb2[0]: scope 1 at $DIR/generator-tiny.rs:21:13: 21:18
+        StorageLive(_7);                 // bb2[1]: scope 1 at $DIR/generator-tiny.rs:21:13: 21:18
+        _7 = ();                         // bb2[2]: scope 1 at $DIR/generator-tiny.rs:21:13: 21:18
+        _0 = std::ops::GeneratorState::<(), ()>::Yielded(move _7,); // bb2[3]: scope 1 at $DIR/generator-tiny.rs:21:13: 21:18
+        discriminant((*(_1.0: &mut [generator@$DIR/generator-tiny.rs:18:16: 24:6 {u8, HasDrop, ()}]))) = 3; // bb2[4]: scope 1 at $DIR/generator-tiny.rs:21:13: 21:18
+        return;                          // bb2[5]: scope 1 at $DIR/generator-tiny.rs:21:13: 21:18
+    }
+
+    bb3: {
+        StorageDead(_7);                 // bb3[0]: scope 1 at $DIR/generator-tiny.rs:21:17: 21:18
+        StorageDead(_6);                 // bb3[1]: scope 1 at $DIR/generator-tiny.rs:21:18: 21:19
+        StorageLive(_8);                 // bb3[2]: scope 1 at $DIR/generator-tiny.rs:22:13: 22:21
+        _8 = const callee() -> bb4;      // bb3[3]: scope 1 at $DIR/generator-tiny.rs:22:13: 22:21
+                                         // ty::Const
+                                         // + ty: fn() {callee}
+                                         // + val: Value(Scalar(<ZST>))
+                                         // mir::Constant
+                                         // + span: $DIR/generator-tiny.rs:22:13: 22:19
+                                         // + literal: Const { ty: fn() {callee}, val: Value(Scalar(<ZST>)) }
+    }
+
+    bb4: {
+        StorageDead(_8);                 // bb4[0]: scope 1 at $DIR/generator-tiny.rs:22:21: 22:22
+        _5 = ();                         // bb4[1]: scope 1 at $DIR/generator-tiny.rs:20:14: 23:10
+        goto -> bb2;                     // bb4[2]: scope 1 at $DIR/generator-tiny.rs:20:9: 23:10
+    }
+
+    bb5: {
+        StorageLive(_4);                 // bb5[0]: scope 0 at $DIR/generator-tiny.rs:18:16: 24:6
+        StorageLive(_6);                 // bb5[1]: scope 0 at $DIR/generator-tiny.rs:18:16: 24:6
+        StorageLive(_7);                 // bb5[2]: scope 0 at $DIR/generator-tiny.rs:18:16: 24:6
+        _6 = move _2;                    // bb5[3]: scope 0 at $DIR/generator-tiny.rs:18:16: 24:6
+        goto -> bb3;                     // bb5[4]: scope 0 at $DIR/generator-tiny.rs:18:16: 24:6
+    }
+
+    bb6: {
+        unreachable;                     // bb6[0]: scope 0 at $DIR/generator-tiny.rs:18:16: 24:6
+    }
+}
diff --git a/src/test/mir-opt/graphviz.rs b/src/test/mir-opt/graphviz.rs
index fcbb189c111..b1c0f0dd3c8 100644
--- a/src/test/mir-opt/graphviz.rs
+++ b/src/test/mir-opt/graphviz.rs
@@ -1,20 +1,5 @@
 // Test graphviz output
 // compile-flags: -Z dump-mir-graphviz
 
-// ignore-tidy-linelength
-
+// EMIT_MIR rustc.main.mir_map.0.dot
 fn main() {}
-
-// END RUST SOURCE
-// START rustc.main.mir_map.0.dot
-// digraph Mir_0_3 { // The name here MUST be an ASCII identifier.
-//     graph [fontname="monospace"];
-//     node [fontname="monospace"];
-//     edge [fontname="monospace"];
-//     label=<fn main() -&gt; ()<br align="left"/>>;
-//     bb0__0_3 [shape="none", label=<<table border="0" cellborder="1" cellspacing="0"><tr><td bgcolor="gray" align="center" colspan="1">0</td></tr><tr><td align="left" balign="left">_0 = ()<br/></td></tr><tr><td align="left">goto</td></tr></table>>];
-//     bb1__0_3 [shape="none", label=<<table border="0" cellborder="1" cellspacing="0"><tr><td bgcolor="gray" align="center" colspan="1">1</td></tr><tr><td align="left">resume</td></tr></table>>];
-//     bb2__0_3 [shape="none", label=<<table border="0" cellborder="1" cellspacing="0"><tr><td bgcolor="gray" align="center" colspan="1">2</td></tr><tr><td align="left">return</td></tr></table>>];
-//     bb0__0_3 -> bb2__0_3 [label=""];
-// }
-// END rustc.main.mir_map.0.dot
diff --git a/src/test/mir-opt/graphviz/rustc.main.mir_map.0.dot b/src/test/mir-opt/graphviz/rustc.main.mir_map.0.dot
new file mode 100644
index 00000000000..2caef3459b8
--- /dev/null
+++ b/src/test/mir-opt/graphviz/rustc.main.mir_map.0.dot
@@ -0,0 +1,10 @@
+digraph Mir_0_3 {
+    graph [fontname="monospace"];
+    node [fontname="monospace"];
+    edge [fontname="monospace"];
+    label=<fn main() -&gt; ()<br align="left"/>>;
+    bb0__0_3 [shape="none", label=<<table border="0" cellborder="1" cellspacing="0"><tr><td bgcolor="gray" align="center" colspan="1">0</td></tr><tr><td align="left" balign="left">_0 = ()<br/></td></tr><tr><td align="left">goto</td></tr></table>>];
+    bb1__0_3 [shape="none", label=<<table border="0" cellborder="1" cellspacing="0"><tr><td bgcolor="gray" align="center" colspan="1">1</td></tr><tr><td align="left">resume</td></tr></table>>];
+    bb2__0_3 [shape="none", label=<<table border="0" cellborder="1" cellspacing="0"><tr><td bgcolor="gray" align="center" colspan="1">2</td></tr><tr><td align="left">return</td></tr></table>>];
+    bb0__0_3 -> bb2__0_3 [label=""];
+}
diff --git a/src/test/mir-opt/issue-38669.rs b/src/test/mir-opt/issue-38669.rs
index d980cc891dc..f6883ac8086 100644
--- a/src/test/mir-opt/issue-38669.rs
+++ b/src/test/mir-opt/issue-38669.rs
@@ -1,5 +1,6 @@
 // check that we don't StorageDead booleans before they are used
 
+// EMIT_MIR rustc.main.SimplifyCfg-initial.after.mir
 fn main() {
     let mut should_break = false;
     loop {
@@ -9,42 +10,3 @@ fn main() {
         should_break = true;
     }
 }
-
-// END RUST SOURCE
-// START rustc.main.SimplifyCfg-initial.after.mir
-//     bb0: {
-//         StorageLive(_1);
-//         _1 = const false;
-//         FakeRead(ForLet, _1);
-//         goto -> bb2;
-//     }
-//     bb1 (cleanup): {
-//         resume;
-//     }
-//     bb2: {
-//         falseUnwind -> [real: bb3, cleanup: bb1];
-//     }
-//     bb3: {
-//         StorageLive(_3);
-//         StorageLive(_4);
-//         _4 = _1;
-//         FakeRead(ForMatchedPlace, _4);
-//         switchInt(_4) -> [false: bb5, otherwise: bb4];
-//     }
-//     ...
-//     bb5: {
-//         _3 = ();
-//         StorageDead(_4);
-//         StorageDead(_3);
-//         _1 = const true;
-//         _2 = ();
-//         goto -> bb2;
-//     }
-//     bb6: {
-//         _0 = ();
-//         StorageDead(_4);
-//         StorageDead(_3);
-//         StorageDead(_1);
-//         return;
-//     }
-// END rustc.main.SimplifyCfg-initial.after.mir
diff --git a/src/test/mir-opt/issue-38669/rustc.main.SimplifyCfg-initial.after.mir b/src/test/mir-opt/issue-38669/rustc.main.SimplifyCfg-initial.after.mir
new file mode 100644
index 00000000000..5144cdd3dab
--- /dev/null
+++ b/src/test/mir-opt/issue-38669/rustc.main.SimplifyCfg-initial.after.mir
@@ -0,0 +1,69 @@
+// MIR for `main` after SimplifyCfg-initial
+
+fn main() -> () {
+    let mut _0: ();                      // return place in scope 0 at $DIR/issue-38669.rs:4:11: 4:11
+    let mut _1: bool;                    // in scope 0 at $DIR/issue-38669.rs:5:9: 5:25
+    let mut _2: ();                      // in scope 0 at $DIR/issue-38669.rs:4:1: 12:2
+    let _3: ();                          // in scope 0 at $DIR/issue-38669.rs:7:9: 9:10
+    let mut _4: bool;                    // in scope 0 at $DIR/issue-38669.rs:7:12: 7:24
+    let mut _5: !;                       // in scope 0 at $DIR/issue-38669.rs:7:25: 9:10
+    scope 1 {
+        debug should_break => _1;        // in scope 1 at $DIR/issue-38669.rs:5:9: 5:25
+    }
+
+    bb0: {
+        StorageLive(_1);                 // bb0[0]: scope 0 at $DIR/issue-38669.rs:5:9: 5:25
+        _1 = const false;                // bb0[1]: scope 0 at $DIR/issue-38669.rs:5:28: 5:33
+                                         // ty::Const
+                                         // + ty: bool
+                                         // + val: Value(Scalar(0x00))
+                                         // mir::Constant
+                                         // + span: $DIR/issue-38669.rs:5:28: 5:33
+                                         // + literal: Const { ty: bool, val: Value(Scalar(0x00)) }
+        FakeRead(ForLet, _1);            // bb0[2]: scope 0 at $DIR/issue-38669.rs:5:9: 5:25
+        goto -> bb2;                     // bb0[3]: scope 1 at $DIR/issue-38669.rs:6:5: 11:6
+    }
+
+    bb1 (cleanup): {
+        resume;                          // bb1[0]: scope 0 at $DIR/issue-38669.rs:4:1: 12:2
+    }
+
+    bb2: {
+        falseUnwind -> [real: bb3, cleanup: bb1]; // bb2[0]: scope 1 at $DIR/issue-38669.rs:6:5: 11:6
+    }
+
+    bb3: {
+        StorageLive(_3);                 // bb3[0]: scope 1 at $DIR/issue-38669.rs:7:9: 9:10
+        StorageLive(_4);                 // bb3[1]: scope 1 at $DIR/issue-38669.rs:7:12: 7:24
+        _4 = _1;                         // bb3[2]: scope 1 at $DIR/issue-38669.rs:7:12: 7:24
+        FakeRead(ForMatchedPlace, _4);   // bb3[3]: scope 1 at $DIR/issue-38669.rs:7:12: 7:24
+        switchInt(_4) -> [false: bb5, otherwise: bb4]; // bb3[4]: scope 1 at $DIR/issue-38669.rs:7:9: 9:10
+    }
+
+    bb4: {
+        falseEdges -> [real: bb6, imaginary: bb5]; // bb4[0]: scope 1 at $DIR/issue-38669.rs:7:9: 9:10
+    }
+
+    bb5: {
+        _3 = ();                         // bb5[0]: scope 1 at $DIR/issue-38669.rs:7:9: 9:10
+        StorageDead(_4);                 // bb5[1]: scope 1 at $DIR/issue-38669.rs:9:9: 9:10
+        StorageDead(_3);                 // bb5[2]: scope 1 at $DIR/issue-38669.rs:9:9: 9:10
+        _1 = const true;                 // bb5[3]: scope 1 at $DIR/issue-38669.rs:10:9: 10:28
+                                         // ty::Const
+                                         // + ty: bool
+                                         // + val: Value(Scalar(0x01))
+                                         // mir::Constant
+                                         // + span: $DIR/issue-38669.rs:10:24: 10:28
+                                         // + literal: Const { ty: bool, val: Value(Scalar(0x01)) }
+        _2 = ();                         // bb5[4]: scope 1 at $DIR/issue-38669.rs:6:10: 11:6
+        goto -> bb2;                     // bb5[5]: scope 1 at $DIR/issue-38669.rs:6:5: 11:6
+    }
+
+    bb6: {
+        _0 = ();                         // bb6[0]: scope 1 at $DIR/issue-38669.rs:8:13: 8:18
+        StorageDead(_4);                 // bb6[1]: scope 1 at $DIR/issue-38669.rs:9:9: 9:10
+        StorageDead(_3);                 // bb6[2]: scope 1 at $DIR/issue-38669.rs:9:9: 9:10
+        StorageDead(_1);                 // bb6[3]: scope 0 at $DIR/issue-38669.rs:12:1: 12:2
+        return;                          // bb6[4]: scope 0 at $DIR/issue-38669.rs:12:2: 12:2
+    }
+}
diff --git a/src/test/mir-opt/issue-41110.rs b/src/test/mir-opt/issue-41110.rs
index 5ba54f98d00..cc35b8785a7 100644
--- a/src/test/mir-opt/issue-41110.rs
+++ b/src/test/mir-opt/issue-41110.rs
@@ -2,12 +2,15 @@
 
 // check that we don't emit multiple drop flags when they are not needed.
 
+
+// EMIT_MIR rustc.main.ElaborateDrops.after.mir
 fn main() {
     let x = S.other(S.id());
 }
 
 // no_mangle to make sure this gets instantiated even in an executable.
 #[no_mangle]
+// EMIT_MIR rustc.test.ElaborateDrops.after.mir
 pub fn test() {
     let u = S;
     let mut v = S;
@@ -25,34 +28,3 @@ impl S {
     fn id(self) -> Self { self }
     fn other(self, s: Self) {}
 }
-
-// END RUST SOURCE
-// START rustc.main.ElaborateDrops.after.mir
-//    let mut _0: ();
-//    let _1: ();
-//    let mut _2: S;
-//    let mut _3: S;
-//    let mut _4: S;
-//    let mut _5: bool;
-//    scope 1 {
-//        debug x => _1;
-//    }
-//    ...
-//    bb0: {
-// END rustc.main.ElaborateDrops.after.mir
-// START rustc.test.ElaborateDrops.after.mir
-//    let mut _0: ();
-//    let _1: S;
-//    let _3: ();
-//    let mut _4: S;
-//    let mut _5: S;
-//    let mut _6: bool;
-//    ...
-//    debug u => _1;
-//    ...
-//    let mut _2: S;
-//    ...
-//    debug v => _2;
-//    ...
-//    bb0: {
-// END rustc.test.ElaborateDrops.after.mir
diff --git a/src/test/mir-opt/issue-41110/rustc.main.ElaborateDrops.after.mir b/src/test/mir-opt/issue-41110/rustc.main.ElaborateDrops.after.mir
new file mode 100644
index 00000000000..0499054c329
--- /dev/null
+++ b/src/test/mir-opt/issue-41110/rustc.main.ElaborateDrops.after.mir
@@ -0,0 +1,111 @@
+// MIR for `main` after ElaborateDrops
+
+fn main() -> () {
+    let mut _0: ();                      // return place in scope 0 at $DIR/issue-41110.rs:7:11: 7:11
+    let _1: ();                          // in scope 0 at $DIR/issue-41110.rs:8:9: 8:10
+    let mut _2: S;                       // in scope 0 at $DIR/issue-41110.rs:8:13: 8:14
+    let mut _3: S;                       // in scope 0 at $DIR/issue-41110.rs:8:21: 8:27
+    let mut _4: S;                       // in scope 0 at $DIR/issue-41110.rs:8:21: 8:22
+    let mut _5: bool;                    // in scope 0 at $DIR/issue-41110.rs:8:27: 8:28
+    scope 1 {
+        debug x => _1;                   // in scope 1 at $DIR/issue-41110.rs:8:9: 8:10
+    }
+
+    bb0: {
+        _5 = const false;                // bb0[0]: scope 0 at $DIR/issue-41110.rs:8:9: 8:10
+                                         // ty::Const
+                                         // + ty: bool
+                                         // + val: Value(Scalar(0x00))
+                                         // mir::Constant
+                                         // + span: $DIR/issue-41110.rs:8:9: 8:10
+                                         // + literal: Const { ty: bool, val: Value(Scalar(0x00)) }
+        StorageLive(_1);                 // bb0[1]: scope 0 at $DIR/issue-41110.rs:8:9: 8:10
+        StorageLive(_2);                 // bb0[2]: scope 0 at $DIR/issue-41110.rs:8:13: 8:14
+        _5 = const true;                 // bb0[3]: scope 0 at $DIR/issue-41110.rs:8:13: 8:14
+                                         // ty::Const
+                                         // + ty: bool
+                                         // + val: Value(Scalar(0x01))
+                                         // mir::Constant
+                                         // + span: $DIR/issue-41110.rs:8:13: 8:14
+                                         // + literal: Const { ty: bool, val: Value(Scalar(0x01)) }
+        _2 = S;                          // bb0[4]: scope 0 at $DIR/issue-41110.rs:8:13: 8:14
+        StorageLive(_3);                 // bb0[5]: scope 0 at $DIR/issue-41110.rs:8:21: 8:27
+        StorageLive(_4);                 // bb0[6]: scope 0 at $DIR/issue-41110.rs:8:21: 8:22
+        _4 = S;                          // bb0[7]: scope 0 at $DIR/issue-41110.rs:8:21: 8:22
+        _3 = const S::id(move _4) -> [return: bb2, unwind: bb4]; // bb0[8]: scope 0 at $DIR/issue-41110.rs:8:21: 8:27
+                                         // ty::Const
+                                         // + ty: fn(S) -> S {S::id}
+                                         // + val: Value(Scalar(<ZST>))
+                                         // mir::Constant
+                                         // + span: $DIR/issue-41110.rs:8:23: 8:25
+                                         // + literal: Const { ty: fn(S) -> S {S::id}, val: Value(Scalar(<ZST>)) }
+    }
+
+    bb1 (cleanup): {
+        resume;                          // bb1[0]: scope 0 at $DIR/issue-41110.rs:7:1: 9:2
+    }
+
+    bb2: {
+        StorageDead(_4);                 // bb2[0]: scope 0 at $DIR/issue-41110.rs:8:26: 8:27
+        _5 = const false;                // bb2[1]: scope 0 at $DIR/issue-41110.rs:8:13: 8:28
+                                         // ty::Const
+                                         // + ty: bool
+                                         // + val: Value(Scalar(0x00))
+                                         // mir::Constant
+                                         // + span: $DIR/issue-41110.rs:8:13: 8:28
+                                         // + literal: Const { ty: bool, val: Value(Scalar(0x00)) }
+        _1 = const S::other(move _2, move _3) -> [return: bb6, unwind: bb5]; // bb2[2]: scope 0 at $DIR/issue-41110.rs:8:13: 8:28
+                                         // ty::Const
+                                         // + ty: fn(S, S) {S::other}
+                                         // + val: Value(Scalar(<ZST>))
+                                         // mir::Constant
+                                         // + span: $DIR/issue-41110.rs:8:15: 8:20
+                                         // + literal: Const { ty: fn(S, S) {S::other}, val: Value(Scalar(<ZST>)) }
+    }
+
+    bb3 (cleanup): {
+        goto -> bb9;                     // bb3[0]: scope 0 at $DIR/issue-41110.rs:8:27: 8:28
+    }
+
+    bb4 (cleanup): {
+        goto -> bb3;                     // bb4[0]: scope 0 at $DIR/issue-41110.rs:8:26: 8:27
+    }
+
+    bb5 (cleanup): {
+        goto -> bb3;                     // bb5[0]: scope 0 at $DIR/issue-41110.rs:8:27: 8:28
+    }
+
+    bb6: {
+        StorageDead(_3);                 // bb6[0]: scope 0 at $DIR/issue-41110.rs:8:27: 8:28
+        _5 = const false;                // bb6[1]: scope 0 at $DIR/issue-41110.rs:8:27: 8:28
+                                         // ty::Const
+                                         // + ty: bool
+                                         // + val: Value(Scalar(0x00))
+                                         // mir::Constant
+                                         // + span: $DIR/issue-41110.rs:8:27: 8:28
+                                         // + literal: Const { ty: bool, val: Value(Scalar(0x00)) }
+        StorageDead(_2);                 // bb6[2]: scope 0 at $DIR/issue-41110.rs:8:27: 8:28
+        _0 = ();                         // bb6[3]: scope 0 at $DIR/issue-41110.rs:7:11: 9:2
+        StorageDead(_1);                 // bb6[4]: scope 0 at $DIR/issue-41110.rs:9:1: 9:2
+        return;                          // bb6[5]: scope 0 at $DIR/issue-41110.rs:9:2: 9:2
+    }
+
+    bb7 (cleanup): {
+        drop(_2) -> bb1;                 // bb7[0]: scope 0 at $DIR/issue-41110.rs:8:27: 8:28
+    }
+
+    bb8 (cleanup): {
+        _5 = const false;                // bb8[0]: scope 0 at $DIR/issue-41110.rs:8:27: 8:28
+                                         // ty::Const
+                                         // + ty: bool
+                                         // + val: Value(Scalar(0x00))
+                                         // mir::Constant
+                                         // + span: $DIR/issue-41110.rs:8:27: 8:28
+                                         // + literal: Const { ty: bool, val: Value(Scalar(0x00)) }
+        goto -> bb7;                     // bb8[1]: scope 0 at $DIR/issue-41110.rs:8:27: 8:28
+    }
+
+    bb9 (cleanup): {
+        switchInt(_5) -> [false: bb1, otherwise: bb8]; // bb9[0]: scope 0 at $DIR/issue-41110.rs:8:27: 8:28
+    }
+}
diff --git a/src/test/mir-opt/issue-41110/rustc.test.ElaborateDrops.after.mir b/src/test/mir-opt/issue-41110/rustc.test.ElaborateDrops.after.mir
new file mode 100644
index 00000000000..b6623fcd4d9
--- /dev/null
+++ b/src/test/mir-opt/issue-41110/rustc.test.ElaborateDrops.after.mir
@@ -0,0 +1,139 @@
+// MIR for `test` after ElaborateDrops
+
+fn test() -> () {
+    let mut _0: ();                      // return place in scope 0 at $DIR/issue-41110.rs:14:15: 14:15
+    let _1: S;                           // in scope 0 at $DIR/issue-41110.rs:15:9: 15:10
+    let _3: ();                          // in scope 0 at $DIR/issue-41110.rs:17:5: 17:12
+    let mut _4: S;                       // in scope 0 at $DIR/issue-41110.rs:17:10: 17:11
+    let mut _5: S;                       // in scope 0 at $DIR/issue-41110.rs:18:9: 18:10
+    let mut _6: bool;                    // in scope 0 at $DIR/issue-41110.rs:19:1: 19:2
+    scope 1 {
+        debug u => _1;                   // in scope 1 at $DIR/issue-41110.rs:15:9: 15:10
+        let mut _2: S;                   // in scope 1 at $DIR/issue-41110.rs:16:9: 16:14
+        scope 2 {
+            debug v => _2;               // in scope 2 at $DIR/issue-41110.rs:16:9: 16:14
+        }
+    }
+
+    bb0: {
+        _6 = const false;                // bb0[0]: scope 0 at $DIR/issue-41110.rs:15:9: 15:10
+                                         // ty::Const
+                                         // + ty: bool
+                                         // + val: Value(Scalar(0x00))
+                                         // mir::Constant
+                                         // + span: $DIR/issue-41110.rs:15:9: 15:10
+                                         // + literal: Const { ty: bool, val: Value(Scalar(0x00)) }
+        StorageLive(_1);                 // bb0[1]: scope 0 at $DIR/issue-41110.rs:15:9: 15:10
+        _6 = const true;                 // bb0[2]: scope 0 at $DIR/issue-41110.rs:15:13: 15:14
+                                         // ty::Const
+                                         // + ty: bool
+                                         // + val: Value(Scalar(0x01))
+                                         // mir::Constant
+                                         // + span: $DIR/issue-41110.rs:15:13: 15:14
+                                         // + literal: Const { ty: bool, val: Value(Scalar(0x01)) }
+        _1 = S;                          // bb0[3]: scope 0 at $DIR/issue-41110.rs:15:13: 15:14
+        StorageLive(_2);                 // bb0[4]: scope 1 at $DIR/issue-41110.rs:16:9: 16:14
+        _2 = S;                          // bb0[5]: scope 1 at $DIR/issue-41110.rs:16:17: 16:18
+        StorageLive(_3);                 // bb0[6]: scope 2 at $DIR/issue-41110.rs:17:5: 17:12
+        StorageLive(_4);                 // bb0[7]: scope 2 at $DIR/issue-41110.rs:17:10: 17:11
+        _4 = move _2;                    // bb0[8]: scope 2 at $DIR/issue-41110.rs:17:10: 17:11
+        _3 = const std::mem::drop::<S>(move _4) -> [return: bb2, unwind: bb5]; // bb0[9]: scope 2 at $DIR/issue-41110.rs:17:5: 17:12
+                                         // ty::Const
+                                         // + ty: fn(S) {std::mem::drop::<S>}
+                                         // + val: Value(Scalar(<ZST>))
+                                         // mir::Constant
+                                         // + span: $DIR/issue-41110.rs:17:5: 17:9
+                                         // + literal: Const { ty: fn(S) {std::mem::drop::<S>}, val: Value(Scalar(<ZST>)) }
+    }
+
+    bb1 (cleanup): {
+        resume;                          // bb1[0]: scope 0 at $DIR/issue-41110.rs:14:1: 19:2
+    }
+
+    bb2: {
+        StorageDead(_4);                 // bb2[0]: scope 2 at $DIR/issue-41110.rs:17:11: 17:12
+        StorageDead(_3);                 // bb2[1]: scope 2 at $DIR/issue-41110.rs:17:12: 17:13
+        StorageLive(_5);                 // bb2[2]: scope 2 at $DIR/issue-41110.rs:18:9: 18:10
+        _6 = const false;                // bb2[3]: scope 2 at $DIR/issue-41110.rs:18:9: 18:10
+                                         // ty::Const
+                                         // + ty: bool
+                                         // + val: Value(Scalar(0x00))
+                                         // mir::Constant
+                                         // + span: $DIR/issue-41110.rs:18:9: 18:10
+                                         // + literal: Const { ty: bool, val: Value(Scalar(0x00)) }
+        _5 = move _1;                    // bb2[4]: scope 2 at $DIR/issue-41110.rs:18:9: 18:10
+        goto -> bb12;                    // bb2[5]: scope 2 at $DIR/issue-41110.rs:18:5: 18:6
+    }
+
+    bb3 (cleanup): {
+        goto -> bb15;                    // bb3[0]: scope 0 at $DIR/issue-41110.rs:19:1: 19:2
+    }
+
+    bb4 (cleanup): {
+        goto -> bb3;                     // bb4[0]: scope 1 at $DIR/issue-41110.rs:19:1: 19:2
+    }
+
+    bb5 (cleanup): {
+        goto -> bb4;                     // bb5[0]: scope 2 at $DIR/issue-41110.rs:17:11: 17:12
+    }
+
+    bb6: {
+        goto -> bb8;                     // bb6[0]: scope 2 at $DIR/issue-41110.rs:18:9: 18:10
+    }
+
+    bb7 (cleanup): {
+        goto -> bb4;                     // bb7[0]: scope 2 at $DIR/issue-41110.rs:18:9: 18:10
+    }
+
+    bb8: {
+        StorageDead(_5);                 // bb8[0]: scope 2 at $DIR/issue-41110.rs:18:9: 18:10
+        _0 = ();                         // bb8[1]: scope 0 at $DIR/issue-41110.rs:14:15: 19:2
+        drop(_2) -> [return: bb9, unwind: bb3]; // bb8[2]: scope 1 at $DIR/issue-41110.rs:19:1: 19:2
+    }
+
+    bb9: {
+        StorageDead(_2);                 // bb9[0]: scope 1 at $DIR/issue-41110.rs:19:1: 19:2
+        goto -> bb10;                    // bb9[1]: scope 0 at $DIR/issue-41110.rs:19:1: 19:2
+    }
+
+    bb10: {
+        _6 = const false;                // bb10[0]: scope 0 at $DIR/issue-41110.rs:19:1: 19:2
+                                         // ty::Const
+                                         // + ty: bool
+                                         // + val: Value(Scalar(0x00))
+                                         // mir::Constant
+                                         // + span: $DIR/issue-41110.rs:19:1: 19:2
+                                         // + literal: Const { ty: bool, val: Value(Scalar(0x00)) }
+        StorageDead(_1);                 // bb10[1]: scope 0 at $DIR/issue-41110.rs:19:1: 19:2
+        return;                          // bb10[2]: scope 0 at $DIR/issue-41110.rs:19:2: 19:2
+    }
+
+    bb11 (cleanup): {
+        _2 = move _5;                    // bb11[0]: scope 2 at $DIR/issue-41110.rs:18:5: 18:6
+        goto -> bb7;                     // bb11[1]: scope 2 at $DIR/issue-41110.rs:18:5: 18:6
+    }
+
+    bb12: {
+        _2 = move _5;                    // bb12[0]: scope 2 at $DIR/issue-41110.rs:18:5: 18:6
+        goto -> bb6;                     // bb12[1]: scope 2 at $DIR/issue-41110.rs:18:5: 18:6
+    }
+
+    bb13 (cleanup): {
+        drop(_1) -> bb1;                 // bb13[0]: scope 0 at $DIR/issue-41110.rs:19:1: 19:2
+    }
+
+    bb14 (cleanup): {
+        _6 = const false;                // bb14[0]: scope 0 at $DIR/issue-41110.rs:19:1: 19:2
+                                         // ty::Const
+                                         // + ty: bool
+                                         // + val: Value(Scalar(0x00))
+                                         // mir::Constant
+                                         // + span: $DIR/issue-41110.rs:19:1: 19:2
+                                         // + literal: Const { ty: bool, val: Value(Scalar(0x00)) }
+        goto -> bb13;                    // bb14[1]: scope 0 at $DIR/issue-41110.rs:19:1: 19:2
+    }
+
+    bb15 (cleanup): {
+        switchInt(_6) -> [false: bb1, otherwise: bb14]; // bb15[0]: scope 0 at $DIR/issue-41110.rs:19:1: 19:2
+    }
+}
diff --git a/src/test/mir-opt/issue-41697.rs b/src/test/mir-opt/issue-41697.rs
index 5a461d61482..4ab25fbe860 100644
--- a/src/test/mir-opt/issue-41697.rs
+++ b/src/test/mir-opt/issue-41697.rs
@@ -13,7 +13,8 @@ trait Foo {
     fn get(&self) -> [u8; 2];
 }
 
-impl Foo for [u8; 2] {
+// EMIT_MIR rustc.{{impl}}-{{constant}}.SimplifyCfg-qualify-consts.after.mir
+impl Foo for [u8; 1+1] {
     fn get(&self) -> [u8; 2] {
         *self
     }
diff --git a/src/test/mir-opt/issue-41697/rustc.{{impl}}-{{constant}}.SimplifyCfg-qualify-consts.after.mir b/src/test/mir-opt/issue-41697/rustc.{{impl}}-{{constant}}.SimplifyCfg-qualify-consts.after.mir
new file mode 100644
index 00000000000..595015acbbd
--- /dev/null
+++ b/src/test/mir-opt/issue-41697/rustc.{{impl}}-{{constant}}.SimplifyCfg-qualify-consts.after.mir
@@ -0,0 +1,32 @@
+// MIR for `<impl at $DIR/issue-41697.rs:17:1: 21:2>::{{constant}}#0` after SimplifyCfg-qualify-consts
+
+<impl at $DIR/issue-41697.rs:17:1: 21:2>::{{constant}}#0: usize = {
+    let mut _0: usize;                   // return place in scope 0 at $DIR/issue-41697.rs:17:19: 17:22
+    let mut _1: (usize, bool);           // in scope 0 at $DIR/issue-41697.rs:17:19: 17:22
+
+    bb0: {
+        _1 = CheckedAdd(const 1usize, const 1usize); // bb0[0]: scope 0 at $DIR/issue-41697.rs:17:19: 17:22
+                                         // ty::Const
+                                         // + ty: usize
+                                         // + val: Value(Scalar(0x0000000000000001))
+                                         // mir::Constant
+                                         // + span: $DIR/issue-41697.rs:17:19: 17:20
+                                         // + literal: Const { ty: usize, val: Value(Scalar(0x0000000000000001)) }
+                                         // ty::Const
+                                         // + ty: usize
+                                         // + val: Value(Scalar(0x0000000000000001))
+                                         // mir::Constant
+                                         // + span: $DIR/issue-41697.rs:17:21: 17:22
+                                         // + literal: Const { ty: usize, val: Value(Scalar(0x0000000000000001)) }
+        assert(!move (_1.1: bool), "attempt to add with overflow") -> [success: bb2, unwind: bb1]; // bb0[1]: scope 0 at $DIR/issue-41697.rs:17:19: 17:22
+    }
+
+    bb1 (cleanup): {
+        resume;                          // bb1[0]: scope 0 at $DIR/issue-41697.rs:17:19: 17:22
+    }
+
+    bb2: {
+        _0 = move (_1.0: usize);         // bb2[0]: scope 0 at $DIR/issue-41697.rs:17:19: 17:22
+        return;                          // bb2[1]: scope 0 at $DIR/issue-41697.rs:17:19: 17:22
+    }
+}
diff --git a/src/test/mir-opt/issue-41888.rs b/src/test/mir-opt/issue-41888.rs
index efe2b249d4a..2c90f35ea6a 100644
--- a/src/test/mir-opt/issue-41888.rs
+++ b/src/test/mir-opt/issue-41888.rs
@@ -1,6 +1,7 @@
 // check that we clear the "ADT master drop flag" even when there are
 // no fields to be dropped.
 
+// EMIT_MIR rustc.main.ElaborateDrops.after.mir
 fn main() {
     let e;
     if cond() {
@@ -20,159 +21,3 @@ enum E {
     F(K),
     G(Box<E>)
 }
-
-// END RUST SOURCE
-// fn main() -> () {
-//     let mut _0: ();
-//     scope 1 {
-//         let _1: E;
-//         debug e => _1;
-//         scope 2 {
-//             let _6: K;
-//             debug _k => _6;
-//         }
-//     }
-//     let mut _2: bool;
-//     let mut _3: ();
-//     let mut _4: E;
-//     let mut _5: K;
-//     let mut _7: isize;
-//     let mut _8: bool; // drop flag for `e`
-//     let mut _9: bool;
-//     let mut _10: bool;
-//     let mut _11: isize;
-//     let mut _12: isize;
-//
-//     bb0: {
-//         _8 = const false;
-//         _10 = const false;
-//         _9 = const false;
-//         StorageLive(_1);
-//         StorageLive(_2);
-//         _2 = const cond() -> [return: bb3, unwind: bb2];
-//     }
-//
-//     bb1: {
-//         resume;
-//     }
-//
-//     bb2: {
-//         goto -> bb1;
-//     }
-//
-//     bb3: {
-//         switchInt(_2) -> [0u8: bb5, otherwise: bb4];
-//     }
-//
-//     bb4: {
-//         StorageLive(_4);
-//         StorageLive(_5);
-//         _5 = K::{{constructor}};
-//         _4 = E::F(_5,);
-//         StorageDead(_5);
-//         goto -> bb15;
-//     }
-//
-//     bb5: {
-//         _0 = ();
-//         goto -> bb12;
-//     }
-//
-//     bb6: {
-//         goto -> bb2;
-//     }
-//
-//     bb7: {
-//         goto -> bb8;
-//     }
-//
-//     bb8: {
-//         StorageDead(_4);
-//         _7 = discriminant(_1);
-//         switchInt(_7) -> [0isize: bb10, otherwise: bb9];
-//     }
-//
-//     bb9: {
-//         _0 = ();
-//         goto -> bb11;
-//     }
-//
-//     bb10: {
-//         StorageLive(_6);
-//         _10 = const false;
-//         _6 = ((_1 as F).0: K);
-//         _0 = ();
-//         goto -> bb11;
-//     }
-//
-//     bb11: {
-//         StorageDead(_6);
-//         goto -> bb12;
-//     }
-//
-//     bb12: {
-//         StorageDead(_2);
-//         goto -> bb22;
-//     }
-//
-//     bb13: {
-//         StorageDead(_1);
-//         return;
-//     }
-//
-//     bb14: {
-//         _8 = const true;
-//         _9 = const true;
-//         _10 = const true;
-//         _1 = _4;
-//         goto -> bb6;
-//     }
-//
-//     bb15: {
-//         _8 = const true;
-//         _9 = const true;
-//         _10 = const true;
-//         _1 = _4;
-//         goto -> bb7;
-//     }
-//
-//     bb16: {
-//         _8 = const false; // clear the drop flag - must always be reached
-//         goto -> bb13;
-//     }
-//
-//     bb17: {
-//         _8 = const false;
-//         goto -> bb1;
-//     }
-//
-//     bb18: {
-//         goto -> bb17;
-//     }
-//
-//     bb19: {
-//         drop(_1) -> [return: bb16, unwind: bb17];
-//     }
-//
-//     bb20: {
-//         drop(_1) -> bb17;
-//     }
-//
-//     bb21: {
-//         _11 = discriminant(_1);
-//         switchInt(_11) -> [0isize: bb16, otherwise: bb19];
-//     }
-//
-//     bb22: {
-//         switchInt(_8) -> [0u8: bb16, otherwise: bb21];
-//     }
-//
-//     bb23: {
-//         _12 = discriminant(_1);
-//         switchInt(_12) -> [0isize: bb18, otherwise: bb20];
-//     }
-//
-//     bb24: {
-//         switchInt(_8) -> [0u8: bb17, otherwise: bb23];
-//     }
-// }
diff --git a/src/test/mir-opt/issue-41888/rustc.main.ElaborateDrops.after.mir b/src/test/mir-opt/issue-41888/rustc.main.ElaborateDrops.after.mir
new file mode 100644
index 00000000000..ba2f65be365
--- /dev/null
+++ b/src/test/mir-opt/issue-41888/rustc.main.ElaborateDrops.after.mir
@@ -0,0 +1,250 @@
+// MIR for `main` after ElaborateDrops
+
+fn main() -> () {
+    let mut _0: ();                      // return place in scope 0 at $DIR/issue-41888.rs:5:11: 5:11
+    let _1: E;                           // in scope 0 at $DIR/issue-41888.rs:6:9: 6:10
+    let mut _2: bool;                    // in scope 0 at $DIR/issue-41888.rs:7:8: 7:14
+    let mut _3: E;                       // in scope 0 at $DIR/issue-41888.rs:8:13: 8:20
+    let mut _4: K;                       // in scope 0 at $DIR/issue-41888.rs:8:18: 8:19
+    let mut _5: isize;                   // in scope 0 at $DIR/issue-41888.rs:9:16: 9:24
+    let mut _7: bool;                    // in scope 0 at $DIR/issue-41888.rs:14:1: 14:2
+    let mut _8: bool;                    // in scope 0 at $DIR/issue-41888.rs:14:1: 14:2
+    let mut _9: bool;                    // in scope 0 at $DIR/issue-41888.rs:14:1: 14:2
+    let mut _10: isize;                  // in scope 0 at $DIR/issue-41888.rs:14:1: 14:2
+    let mut _11: isize;                  // in scope 0 at $DIR/issue-41888.rs:14:1: 14:2
+    scope 1 {
+        debug e => _1;                   // in scope 1 at $DIR/issue-41888.rs:6:9: 6:10
+        let _6: K;                       // in scope 1 at $DIR/issue-41888.rs:9:21: 9:23
+        scope 2 {
+            debug _k => _6;              // in scope 2 at $DIR/issue-41888.rs:9:21: 9:23
+        }
+    }
+
+    bb0: {
+        _9 = const false;                // bb0[0]: scope 0 at $DIR/issue-41888.rs:6:9: 6:10
+                                         // ty::Const
+                                         // + ty: bool
+                                         // + val: Value(Scalar(0x00))
+                                         // mir::Constant
+                                         // + span: $DIR/issue-41888.rs:6:9: 6:10
+                                         // + literal: Const { ty: bool, val: Value(Scalar(0x00)) }
+        _7 = const false;                // bb0[1]: scope 0 at $DIR/issue-41888.rs:6:9: 6:10
+                                         // ty::Const
+                                         // + ty: bool
+                                         // + val: Value(Scalar(0x00))
+                                         // mir::Constant
+                                         // + span: $DIR/issue-41888.rs:6:9: 6:10
+                                         // + literal: Const { ty: bool, val: Value(Scalar(0x00)) }
+        _8 = const false;                // bb0[2]: scope 0 at $DIR/issue-41888.rs:6:9: 6:10
+                                         // ty::Const
+                                         // + ty: bool
+                                         // + val: Value(Scalar(0x00))
+                                         // mir::Constant
+                                         // + span: $DIR/issue-41888.rs:6:9: 6:10
+                                         // + literal: Const { ty: bool, val: Value(Scalar(0x00)) }
+        StorageLive(_1);                 // bb0[3]: scope 0 at $DIR/issue-41888.rs:6:9: 6:10
+        StorageLive(_2);                 // bb0[4]: scope 1 at $DIR/issue-41888.rs:7:8: 7:14
+        _2 = const cond() -> [return: bb2, unwind: bb3]; // bb0[5]: scope 1 at $DIR/issue-41888.rs:7:8: 7:14
+                                         // ty::Const
+                                         // + ty: fn() -> bool {cond}
+                                         // + val: Value(Scalar(<ZST>))
+                                         // mir::Constant
+                                         // + span: $DIR/issue-41888.rs:7:8: 7:12
+                                         // + literal: Const { ty: fn() -> bool {cond}, val: Value(Scalar(<ZST>)) }
+    }
+
+    bb1 (cleanup): {
+        resume;                          // bb1[0]: scope 0 at $DIR/issue-41888.rs:5:1: 14:2
+    }
+
+    bb2: {
+        switchInt(_2) -> [false: bb4, otherwise: bb5]; // bb2[0]: scope 1 at $DIR/issue-41888.rs:7:5: 13:6
+    }
+
+    bb3 (cleanup): {
+        goto -> bb1;                     // bb3[0]: scope 0 at $DIR/issue-41888.rs:14:1: 14:2
+    }
+
+    bb4: {
+        _0 = ();                         // bb4[0]: scope 1 at $DIR/issue-41888.rs:7:5: 13:6
+        goto -> bb11;                    // bb4[1]: scope 1 at $DIR/issue-41888.rs:7:5: 13:6
+    }
+
+    bb5: {
+        StorageLive(_3);                 // bb5[0]: scope 1 at $DIR/issue-41888.rs:8:13: 8:20
+        StorageLive(_4);                 // bb5[1]: scope 1 at $DIR/issue-41888.rs:8:18: 8:19
+        _4 = K;                          // bb5[2]: scope 1 at $DIR/issue-41888.rs:8:18: 8:19
+        _3 = E::F(move _4,);             // bb5[3]: scope 1 at $DIR/issue-41888.rs:8:13: 8:20
+        StorageDead(_4);                 // bb5[4]: scope 1 at $DIR/issue-41888.rs:8:19: 8:20
+        goto -> bb14;                    // bb5[5]: scope 1 at $DIR/issue-41888.rs:8:9: 8:10
+    }
+
+    bb6: {
+        goto -> bb8;                     // bb6[0]: scope 1 at $DIR/issue-41888.rs:8:19: 8:20
+    }
+
+    bb7 (cleanup): {
+        goto -> bb3;                     // bb7[0]: scope 1 at $DIR/issue-41888.rs:8:19: 8:20
+    }
+
+    bb8: {
+        StorageDead(_3);                 // bb8[0]: scope 1 at $DIR/issue-41888.rs:8:19: 8:20
+        _5 = discriminant(_1);           // bb8[1]: scope 1 at $DIR/issue-41888.rs:9:16: 9:24
+        switchInt(move _5) -> [0isize: bb10, otherwise: bb9]; // bb8[2]: scope 1 at $DIR/issue-41888.rs:9:16: 9:24
+    }
+
+    bb9: {
+        _0 = ();                         // bb9[0]: scope 1 at $DIR/issue-41888.rs:9:9: 12:10
+        goto -> bb11;                    // bb9[1]: scope 1 at $DIR/issue-41888.rs:9:9: 12:10
+    }
+
+    bb10: {
+        StorageLive(_6);                 // bb10[0]: scope 1 at $DIR/issue-41888.rs:9:21: 9:23
+        _9 = const false;                // bb10[1]: scope 1 at $DIR/issue-41888.rs:9:21: 9:23
+                                         // ty::Const
+                                         // + ty: bool
+                                         // + val: Value(Scalar(0x00))
+                                         // mir::Constant
+                                         // + span: $DIR/issue-41888.rs:9:21: 9:23
+                                         // + literal: Const { ty: bool, val: Value(Scalar(0x00)) }
+        _6 = move ((_1 as F).0: K);      // bb10[2]: scope 1 at $DIR/issue-41888.rs:9:21: 9:23
+        _0 = ();                         // bb10[3]: scope 2 at $DIR/issue-41888.rs:9:29: 12:10
+        StorageDead(_6);                 // bb10[4]: scope 1 at $DIR/issue-41888.rs:12:9: 12:10
+        goto -> bb11;                    // bb10[5]: scope 1 at $DIR/issue-41888.rs:9:9: 12:10
+    }
+
+    bb11: {
+        goto -> bb21;                    // bb11[0]: scope 0 at $DIR/issue-41888.rs:14:1: 14:2
+    }
+
+    bb12: {
+        _7 = const false;                // bb12[0]: scope 0 at $DIR/issue-41888.rs:14:1: 14:2
+                                         // ty::Const
+                                         // + ty: bool
+                                         // + val: Value(Scalar(0x00))
+                                         // mir::Constant
+                                         // + span: $DIR/issue-41888.rs:14:1: 14:2
+                                         // + literal: Const { ty: bool, val: Value(Scalar(0x00)) }
+        _8 = const false;                // bb12[1]: scope 0 at $DIR/issue-41888.rs:14:1: 14:2
+                                         // ty::Const
+                                         // + ty: bool
+                                         // + val: Value(Scalar(0x00))
+                                         // mir::Constant
+                                         // + span: $DIR/issue-41888.rs:14:1: 14:2
+                                         // + literal: Const { ty: bool, val: Value(Scalar(0x00)) }
+        _9 = const false;                // bb12[2]: scope 0 at $DIR/issue-41888.rs:14:1: 14:2
+                                         // ty::Const
+                                         // + ty: bool
+                                         // + val: Value(Scalar(0x00))
+                                         // mir::Constant
+                                         // + span: $DIR/issue-41888.rs:14:1: 14:2
+                                         // + literal: Const { ty: bool, val: Value(Scalar(0x00)) }
+        StorageDead(_1);                 // bb12[3]: scope 0 at $DIR/issue-41888.rs:14:1: 14:2
+        StorageDead(_2);                 // bb12[4]: scope 0 at $DIR/issue-41888.rs:14:1: 14:2
+        return;                          // bb12[5]: scope 0 at $DIR/issue-41888.rs:14:2: 14:2
+    }
+
+    bb13 (cleanup): {
+        _7 = const true;                 // bb13[0]: scope 1 at $DIR/issue-41888.rs:8:9: 8:10
+                                         // ty::Const
+                                         // + ty: bool
+                                         // + val: Value(Scalar(0x01))
+                                         // mir::Constant
+                                         // + span: $DIR/issue-41888.rs:8:9: 8:10
+                                         // + literal: Const { ty: bool, val: Value(Scalar(0x01)) }
+        _8 = const true;                 // bb13[1]: scope 1 at $DIR/issue-41888.rs:8:9: 8:10
+                                         // ty::Const
+                                         // + ty: bool
+                                         // + val: Value(Scalar(0x01))
+                                         // mir::Constant
+                                         // + span: $DIR/issue-41888.rs:8:9: 8:10
+                                         // + literal: Const { ty: bool, val: Value(Scalar(0x01)) }
+        _9 = const true;                 // bb13[2]: scope 1 at $DIR/issue-41888.rs:8:9: 8:10
+                                         // ty::Const
+                                         // + ty: bool
+                                         // + val: Value(Scalar(0x01))
+                                         // mir::Constant
+                                         // + span: $DIR/issue-41888.rs:8:9: 8:10
+                                         // + literal: Const { ty: bool, val: Value(Scalar(0x01)) }
+        _1 = move _3;                    // bb13[3]: scope 1 at $DIR/issue-41888.rs:8:9: 8:10
+        goto -> bb7;                     // bb13[4]: scope 1 at $DIR/issue-41888.rs:8:9: 8:10
+    }
+
+    bb14: {
+        _7 = const true;                 // bb14[0]: scope 1 at $DIR/issue-41888.rs:8:9: 8:10
+                                         // ty::Const
+                                         // + ty: bool
+                                         // + val: Value(Scalar(0x01))
+                                         // mir::Constant
+                                         // + span: $DIR/issue-41888.rs:8:9: 8:10
+                                         // + literal: Const { ty: bool, val: Value(Scalar(0x01)) }
+        _8 = const true;                 // bb14[1]: scope 1 at $DIR/issue-41888.rs:8:9: 8:10
+                                         // ty::Const
+                                         // + ty: bool
+                                         // + val: Value(Scalar(0x01))
+                                         // mir::Constant
+                                         // + span: $DIR/issue-41888.rs:8:9: 8:10
+                                         // + literal: Const { ty: bool, val: Value(Scalar(0x01)) }
+        _9 = const true;                 // bb14[2]: scope 1 at $DIR/issue-41888.rs:8:9: 8:10
+                                         // ty::Const
+                                         // + ty: bool
+                                         // + val: Value(Scalar(0x01))
+                                         // mir::Constant
+                                         // + span: $DIR/issue-41888.rs:8:9: 8:10
+                                         // + literal: Const { ty: bool, val: Value(Scalar(0x01)) }
+        _1 = move _3;                    // bb14[3]: scope 1 at $DIR/issue-41888.rs:8:9: 8:10
+        goto -> bb6;                     // bb14[4]: scope 1 at $DIR/issue-41888.rs:8:9: 8:10
+    }
+
+    bb15: {
+        _7 = const false;                // bb15[0]: scope 0 at $DIR/issue-41888.rs:14:1: 14:2
+                                         // ty::Const
+                                         // + ty: bool
+                                         // + val: Value(Scalar(0x00))
+                                         // mir::Constant
+                                         // + span: $DIR/issue-41888.rs:14:1: 14:2
+                                         // + literal: Const { ty: bool, val: Value(Scalar(0x00)) }
+        goto -> bb12;                    // bb15[1]: scope 0 at $DIR/issue-41888.rs:14:1: 14:2
+    }
+
+    bb16 (cleanup): {
+        _7 = const false;                // bb16[0]: scope 0 at $DIR/issue-41888.rs:14:1: 14:2
+                                         // ty::Const
+                                         // + ty: bool
+                                         // + val: Value(Scalar(0x00))
+                                         // mir::Constant
+                                         // + span: $DIR/issue-41888.rs:14:1: 14:2
+                                         // + literal: Const { ty: bool, val: Value(Scalar(0x00)) }
+        goto -> bb1;                     // bb16[1]: scope 0 at $DIR/issue-41888.rs:14:1: 14:2
+    }
+
+    bb17 (cleanup): {
+        goto -> bb16;                    // bb17[0]: scope 0 at $DIR/issue-41888.rs:14:1: 14:2
+    }
+
+    bb18: {
+        drop(_1) -> [return: bb15, unwind: bb16]; // bb18[0]: scope 0 at $DIR/issue-41888.rs:14:1: 14:2
+    }
+
+    bb19 (cleanup): {
+        drop(_1) -> bb16;                // bb19[0]: scope 0 at $DIR/issue-41888.rs:14:1: 14:2
+    }
+
+    bb20: {
+        _10 = discriminant(_1);          // bb20[0]: scope 0 at $DIR/issue-41888.rs:14:1: 14:2
+        switchInt(move _10) -> [0isize: bb15, otherwise: bb18]; // bb20[1]: scope 0 at $DIR/issue-41888.rs:14:1: 14:2
+    }
+
+    bb21: {
+        switchInt(_7) -> [false: bb15, otherwise: bb20]; // bb21[0]: scope 0 at $DIR/issue-41888.rs:14:1: 14:2
+    }
+
+    bb22 (cleanup): {
+        _11 = discriminant(_1);          // bb22[0]: scope 0 at $DIR/issue-41888.rs:14:1: 14:2
+        switchInt(move _11) -> [0isize: bb17, otherwise: bb19]; // bb22[1]: scope 0 at $DIR/issue-41888.rs:14:1: 14:2
+    }
+
+    bb23 (cleanup): {
+        switchInt(_7) -> [false: bb16, otherwise: bb22]; // bb23[0]: scope 0 at $DIR/issue-41888.rs:14:1: 14:2
+    }
+}
diff --git a/src/test/mir-opt/issue-49232.rs b/src/test/mir-opt/issue-49232.rs
index 54c89b85f42..7d308980b90 100644
--- a/src/test/mir-opt/issue-49232.rs
+++ b/src/test/mir-opt/issue-49232.rs
@@ -1,6 +1,7 @@
 // We must mark a variable whose initialization fails due to an
 // abort statement as StorageDead.
 
+// EMIT_MIR rustc.main.mir_map.0.mir
 fn main() {
     loop {
         let beacon = {
@@ -12,82 +13,3 @@ fn main() {
         drop(&beacon);
     }
 }
-
-// END RUST SOURCE
-// START rustc.main.mir_map.0.mir
-// fn main() -> (){
-//     let mut _0: ();
-//     let mut _1: ();
-//     let _2: i32;
-//     let mut _3: bool;
-//     let mut _4: !;
-//     let _5: ();
-//     let mut _6: &i32;
-//     scope 1 {
-//         debug beacon => _2;
-//     }
-//     bb0: {
-//         goto -> bb1;
-//     }
-//     bb1: {
-//         falseUnwind -> [real: bb3, cleanup: bb4];
-//     }
-//     bb2: {
-//         goto -> bb14;
-//     }
-//     bb3: {
-//         StorageLive(_2);
-//         StorageLive(_3);
-//         _3 = const true;
-//         FakeRead(ForMatchedPlace, _3);
-//         switchInt(_3) -> [false: bb5, otherwise: bb6];
-//     }
-//     bb4 (cleanup): {
-//         resume;
-//     }
-//     bb5: {
-//         falseEdges -> [real: bb7, imaginary: bb6];
-//     }
-//     bb6: {
-//         _0 = ();
-//         goto -> bb8;
-//     }
-//     bb7: {
-//         _2 = const 4i32;
-//         goto -> bb12;
-//     }
-//     bb8: {
-//         StorageDead(_3);
-//         goto -> bb9;
-//     }
-//     bb9: {
-//         StorageDead(_2);
-//         goto -> bb2;
-//     }
-//     bb10: {
-//         _4 = ();
-//         unreachable;
-//     }
-//     bb11: {
-//         goto -> bb12;
-//     }
-//     bb12: {
-//         FakeRead(ForLet, _2);
-//         StorageDead(_3);
-//         StorageLive(_5);
-//         StorageLive(_6);
-//         _6 = &_2;
-//         _5 = const std::mem::drop::<&i32>(move _6) -> [return: bb13, unwind: bb4];
-//     }
-//     bb13: {
-//         StorageDead(_6);
-//         StorageDead(_5);
-//         _1 = ();
-//         StorageDead(_2);
-//         goto -> bb1;
-//     }
-//     bb14: {
-//         return;
-//     }
-// }
-// END rustc.main.mir_map.0.mir
diff --git a/src/test/mir-opt/issue-49232/rustc.main.mir_map.0.mir b/src/test/mir-opt/issue-49232/rustc.main.mir_map.0.mir
new file mode 100644
index 00000000000..03815d58bbc
--- /dev/null
+++ b/src/test/mir-opt/issue-49232/rustc.main.mir_map.0.mir
@@ -0,0 +1,110 @@
+// MIR for `main` 0 mir_map
+
+fn main() -> () {
+    let mut _0: ();                      // return place in scope 0 at $DIR/issue-49232.rs:5:11: 5:11
+    let mut _1: ();                      // in scope 0 at $DIR/issue-49232.rs:5:1: 15:2
+    let _2: i32;                         // in scope 0 at $DIR/issue-49232.rs:7:13: 7:19
+    let mut _3: bool;                    // in scope 0 at $DIR/issue-49232.rs:8:19: 8:23
+    let mut _4: !;                       // in scope 0 at $DIR/issue-49232.rs:10:25: 10:30
+    let _5: ();                          // in scope 0 at $DIR/issue-49232.rs:13:9: 13:22
+    let mut _6: &i32;                    // in scope 0 at $DIR/issue-49232.rs:13:14: 13:21
+    scope 1 {
+        debug beacon => _2;              // in scope 1 at $DIR/issue-49232.rs:7:13: 7:19
+    }
+
+    bb0: {
+        goto -> bb1;                     // bb0[0]: scope 0 at $DIR/issue-49232.rs:6:5: 14:6
+    }
+
+    bb1: {
+        falseUnwind -> [real: bb3, cleanup: bb4]; // bb1[0]: scope 0 at $DIR/issue-49232.rs:6:5: 14:6
+    }
+
+    bb2: {
+        goto -> bb14;                    // bb2[0]: scope 0 at $DIR/issue-49232.rs:15:2: 15:2
+    }
+
+    bb3: {
+        StorageLive(_2);                 // bb3[0]: scope 0 at $DIR/issue-49232.rs:7:13: 7:19
+        StorageLive(_3);                 // bb3[1]: scope 0 at $DIR/issue-49232.rs:8:19: 8:23
+        _3 = const true;                 // bb3[2]: scope 0 at $DIR/issue-49232.rs:8:19: 8:23
+                                         // ty::Const
+                                         // + ty: bool
+                                         // + val: Value(Scalar(0x01))
+                                         // mir::Constant
+                                         // + span: $DIR/issue-49232.rs:8:19: 8:23
+                                         // + literal: Const { ty: bool, val: Value(Scalar(0x01)) }
+        FakeRead(ForMatchedPlace, _3);   // bb3[3]: scope 0 at $DIR/issue-49232.rs:8:19: 8:23
+        switchInt(_3) -> [false: bb5, otherwise: bb6]; // bb3[4]: scope 0 at $DIR/issue-49232.rs:9:17: 9:22
+    }
+
+    bb4 (cleanup): {
+        resume;                          // bb4[0]: scope 0 at $DIR/issue-49232.rs:5:1: 15:2
+    }
+
+    bb5: {
+        falseEdges -> [real: bb7, imaginary: bb6]; // bb5[0]: scope 0 at $DIR/issue-49232.rs:9:17: 9:22
+    }
+
+    bb6: {
+        _0 = ();                         // bb6[0]: scope 0 at $DIR/issue-49232.rs:10:25: 10:30
+        goto -> bb8;                     // bb6[1]: scope 0 at $DIR/issue-49232.rs:10:25: 10:30
+    }
+
+    bb7: {
+        _2 = const 4i32;                 // bb7[0]: scope 0 at $DIR/issue-49232.rs:9:26: 9:27
+                                         // ty::Const
+                                         // + ty: i32
+                                         // + val: Value(Scalar(0x00000004))
+                                         // mir::Constant
+                                         // + span: $DIR/issue-49232.rs:9:26: 9:27
+                                         // + literal: Const { ty: i32, val: Value(Scalar(0x00000004)) }
+        goto -> bb12;                    // bb7[1]: scope 0 at $DIR/issue-49232.rs:8:13: 11:14
+    }
+
+    bb8: {
+        StorageDead(_3);                 // bb8[0]: scope 0 at $DIR/issue-49232.rs:12:10: 12:11
+        goto -> bb9;                     // bb8[1]: scope 0 at $DIR/issue-49232.rs:10:25: 10:30
+    }
+
+    bb9: {
+        StorageDead(_2);                 // bb9[0]: scope 0 at $DIR/issue-49232.rs:14:5: 14:6
+        goto -> bb2;                     // bb9[1]: scope 0 at $DIR/issue-49232.rs:10:25: 10:30
+    }
+
+    bb10: {
+        _4 = ();                         // bb10[0]: scope 0 at $DIR/issue-49232.rs:10:25: 10:30
+        unreachable;                     // bb10[1]: scope 0 at $DIR/issue-49232.rs:10:25: 10:30
+    }
+
+    bb11: {
+        goto -> bb12;                    // bb11[0]: scope 0 at $DIR/issue-49232.rs:8:13: 11:14
+    }
+
+    bb12: {
+        FakeRead(ForLet, _2);            // bb12[0]: scope 0 at $DIR/issue-49232.rs:7:13: 7:19
+        StorageDead(_3);                 // bb12[1]: scope 0 at $DIR/issue-49232.rs:12:10: 12:11
+        StorageLive(_5);                 // bb12[2]: scope 1 at $DIR/issue-49232.rs:13:9: 13:22
+        StorageLive(_6);                 // bb12[3]: scope 1 at $DIR/issue-49232.rs:13:14: 13:21
+        _6 = &_2;                        // bb12[4]: scope 1 at $DIR/issue-49232.rs:13:14: 13:21
+        _5 = const std::mem::drop::<&i32>(move _6) -> [return: bb13, unwind: bb4]; // bb12[5]: scope 1 at $DIR/issue-49232.rs:13:9: 13:22
+                                         // ty::Const
+                                         // + ty: fn(&i32) {std::mem::drop::<&i32>}
+                                         // + val: Value(Scalar(<ZST>))
+                                         // mir::Constant
+                                         // + span: $DIR/issue-49232.rs:13:9: 13:13
+                                         // + literal: Const { ty: fn(&i32) {std::mem::drop::<&i32>}, val: Value(Scalar(<ZST>)) }
+    }
+
+    bb13: {
+        StorageDead(_6);                 // bb13[0]: scope 1 at $DIR/issue-49232.rs:13:21: 13:22
+        StorageDead(_5);                 // bb13[1]: scope 1 at $DIR/issue-49232.rs:13:22: 13:23
+        _1 = ();                         // bb13[2]: scope 0 at $DIR/issue-49232.rs:6:10: 14:6
+        StorageDead(_2);                 // bb13[3]: scope 0 at $DIR/issue-49232.rs:14:5: 14:6
+        goto -> bb1;                     // bb13[4]: scope 0 at $DIR/issue-49232.rs:6:5: 14:6
+    }
+
+    bb14: {
+        return;                          // bb14[0]: scope 0 at $DIR/issue-49232.rs:15:2: 15:2
+    }
+}
diff --git a/src/test/mir-opt/issue-62289.rs b/src/test/mir-opt/issue-62289.rs
index 8e619ffdf8b..f0d57c572b3 100644
--- a/src/test/mir-opt/issue-62289.rs
+++ b/src/test/mir-opt/issue-62289.rs
@@ -1,10 +1,10 @@
 // check that we don't forget to drop the Box if we early return before
 // initializing it
-// ignore-tidy-linelength
 // ignore-wasm32-bare compiled with panic=abort by default
 
 #![feature(box_syntax)]
 
+// EMIT_MIR rustc.test.ElaborateDrops.before.mir
 fn test() -> Option<Box<u32>> {
     Some(box (None?))
 }
@@ -12,80 +12,3 @@ fn test() -> Option<Box<u32>> {
 fn main() {
     test();
 }
-
-// END RUST SOURCE
-// START rustc.test.ElaborateDrops.before.mir
-// fn test() -> std::option::Option<std::boxed::Box<u32>> {
-//     ...
-//     bb0: {
-//         StorageLive(_1);
-//         StorageLive(_2);
-//         _2 = Box(u32);
-//         StorageLive(_3);
-//         StorageLive(_4);
-//         _4 = std::option::Option::<u32>::None;
-//         _3 = const <std::option::Option<u32> as std::ops::Try>::into_result(move _4) -> [return: bb2, unwind: bb3];
-//     }
-//     bb1 (cleanup): {
-//         resume;
-//     }
-//     bb2: {
-//         StorageDead(_4);
-//         _5 = discriminant(_3);
-//         switchInt(move _5) -> [0isize: bb4, 1isize: bb6, otherwise: bb5];
-//     }
-//     bb3 (cleanup): {
-//         drop(_2) -> bb1;
-//     }
-//     bb4: {
-//         StorageLive(_10);
-//         _10 = ((_3 as Ok).0: u32);
-//         (*_2) = _10;
-//         StorageDead(_10);
-//         _1 = move _2;
-//         drop(_2) -> [return: bb12, unwind: bb11];
-//     }
-//     bb5: {
-//         unreachable;
-//     }
-//     bb6: {
-//         StorageLive(_6);
-//         _6 = ((_3 as Err).0: std::option::NoneError);
-//         StorageLive(_8);
-//         StorageLive(_9);
-//         _9 = _6;
-//         _8 = const <std::option::NoneError as std::convert::From<std::option::NoneError>>::from(move _9) -> [return: bb8, unwind: bb3];
-//     }
-//     bb7: {
-//         return;
-//     }
-//     bb8: {
-//         StorageDead(_9);
-//         _0 = const <std::option::Option<std::boxed::Box<u32>> as std::ops::Try>::from_error(move _8) -> [return: bb9, unwind: bb3];
-//     }
-//     bb9: {
-//         StorageDead(_8);
-//         StorageDead(_6);
-//         drop(_2) -> bb10;
-//     }
-//     bb10: {
-//         StorageDead(_2);
-//         StorageDead(_1);
-//         StorageDead(_3);
-//         goto -> bb7;
-//     }
-//     bb11 (cleanup): {
-//         drop(_1) -> bb1;
-//     }
-//     bb12: {
-//         StorageDead(_2);
-//         _0 = std::option::Option::<std::boxed::Box<u32>>::Some(move _1,);
-//         drop(_1) -> bb13;
-//     }
-//     bb13: {
-//         StorageDead(_1);
-//         StorageDead(_3);
-//         goto -> bb7;
-//     }
-// }
-// END rustc.test.ElaborateDrops.before.mir
diff --git a/src/test/mir-opt/issue-62289/rustc.test.ElaborateDrops.before.mir b/src/test/mir-opt/issue-62289/rustc.test.ElaborateDrops.before.mir
new file mode 100644
index 00000000000..c2f91980021
--- /dev/null
+++ b/src/test/mir-opt/issue-62289/rustc.test.ElaborateDrops.before.mir
@@ -0,0 +1,127 @@
+// MIR for `test` before ElaborateDrops
+
+fn test() -> std::option::Option<std::boxed::Box<u32>> {
+    let mut _0: std::option::Option<std::boxed::Box<u32>>; // return place in scope 0 at $DIR/issue-62289.rs:8:14: 8:30
+    let mut _1: std::boxed::Box<u32>;    // in scope 0 at $DIR/issue-62289.rs:9:10: 9:21
+    let mut _2: std::boxed::Box<u32>;    // in scope 0 at $DIR/issue-62289.rs:9:10: 9:21
+    let mut _3: std::result::Result<u32, std::option::NoneError>; // in scope 0 at $DIR/issue-62289.rs:9:15: 9:20
+    let mut _4: std::option::Option<u32>; // in scope 0 at $DIR/issue-62289.rs:9:15: 9:19
+    let mut _5: isize;                   // in scope 0 at $DIR/issue-62289.rs:9:19: 9:20
+    let _6: std::option::NoneError;      // in scope 0 at $DIR/issue-62289.rs:9:19: 9:20
+    let mut _7: !;                       // in scope 0 at $DIR/issue-62289.rs:9:19: 9:20
+    let mut _8: std::option::NoneError;  // in scope 0 at $DIR/issue-62289.rs:9:19: 9:20
+    let mut _9: std::option::NoneError;  // in scope 0 at $DIR/issue-62289.rs:9:19: 9:20
+    let _10: u32;                        // in scope 0 at $DIR/issue-62289.rs:9:15: 9:20
+    scope 1 {
+        debug err => _6;                 // in scope 1 at $DIR/issue-62289.rs:9:19: 9:20
+        scope 2 {
+        }
+    }
+    scope 3 {
+        debug val => _10;                // in scope 3 at $DIR/issue-62289.rs:9:15: 9:20
+        scope 4 {
+        }
+    }
+
+    bb0: {
+        StorageLive(_1);                 // bb0[0]: scope 0 at $DIR/issue-62289.rs:9:10: 9:21
+        StorageLive(_2);                 // bb0[1]: scope 0 at $DIR/issue-62289.rs:9:10: 9:21
+        _2 = Box(u32);                   // bb0[2]: scope 0 at $DIR/issue-62289.rs:9:10: 9:21
+        StorageLive(_3);                 // bb0[3]: scope 0 at $DIR/issue-62289.rs:9:15: 9:20
+        StorageLive(_4);                 // bb0[4]: scope 0 at $DIR/issue-62289.rs:9:15: 9:19
+        _4 = std::option::Option::<u32>::None; // bb0[5]: scope 0 at $DIR/issue-62289.rs:9:15: 9:19
+        _3 = const <std::option::Option<u32> as std::ops::Try>::into_result(move _4) -> [return: bb2, unwind: bb3]; // bb0[6]: scope 0 at $DIR/issue-62289.rs:9:15: 9:20
+                                         // ty::Const
+                                         // + ty: fn(std::option::Option<u32>) -> std::result::Result<<std::option::Option<u32> as std::ops::Try>::Ok, <std::option::Option<u32> as std::ops::Try>::Error> {<std::option::Option<u32> as std::ops::Try>::into_result}
+                                         // + val: Value(Scalar(<ZST>))
+                                         // mir::Constant
+                                         // + span: $DIR/issue-62289.rs:9:15: 9:20
+                                         // + literal: Const { ty: fn(std::option::Option<u32>) -> std::result::Result<<std::option::Option<u32> as std::ops::Try>::Ok, <std::option::Option<u32> as std::ops::Try>::Error> {<std::option::Option<u32> as std::ops::Try>::into_result}, val: Value(Scalar(<ZST>)) }
+    }
+
+    bb1 (cleanup): {
+        resume;                          // bb1[0]: scope 0 at $DIR/issue-62289.rs:8:1: 10:2
+    }
+
+    bb2: {
+        StorageDead(_4);                 // bb2[0]: scope 0 at $DIR/issue-62289.rs:9:19: 9:20
+        _5 = discriminant(_3);           // bb2[1]: scope 0 at $DIR/issue-62289.rs:9:19: 9:20
+        switchInt(move _5) -> [0isize: bb4, 1isize: bb6, otherwise: bb5]; // bb2[2]: scope 0 at $DIR/issue-62289.rs:9:19: 9:20
+    }
+
+    bb3 (cleanup): {
+        drop(_2) -> bb1;                 // bb3[0]: scope 0 at $DIR/issue-62289.rs:9:20: 9:21
+    }
+
+    bb4: {
+        StorageLive(_10);                // bb4[0]: scope 0 at $DIR/issue-62289.rs:9:15: 9:20
+        _10 = ((_3 as Ok).0: u32);       // bb4[1]: scope 0 at $DIR/issue-62289.rs:9:15: 9:20
+        (*_2) = _10;                     // bb4[2]: scope 4 at $DIR/issue-62289.rs:9:15: 9:20
+        StorageDead(_10);                // bb4[3]: scope 0 at $DIR/issue-62289.rs:9:19: 9:20
+        _1 = move _2;                    // bb4[4]: scope 0 at $DIR/issue-62289.rs:9:10: 9:21
+        drop(_2) -> [return: bb12, unwind: bb11]; // bb4[5]: scope 0 at $DIR/issue-62289.rs:9:20: 9:21
+    }
+
+    bb5: {
+        unreachable;                     // bb5[0]: scope 0 at $DIR/issue-62289.rs:9:15: 9:20
+    }
+
+    bb6: {
+        StorageLive(_6);                 // bb6[0]: scope 0 at $DIR/issue-62289.rs:9:19: 9:20
+        _6 = ((_3 as Err).0: std::option::NoneError); // bb6[1]: scope 0 at $DIR/issue-62289.rs:9:19: 9:20
+        StorageLive(_8);                 // bb6[2]: scope 2 at $DIR/issue-62289.rs:9:19: 9:20
+        StorageLive(_9);                 // bb6[3]: scope 2 at $DIR/issue-62289.rs:9:19: 9:20
+        _9 = _6;                         // bb6[4]: scope 2 at $DIR/issue-62289.rs:9:19: 9:20
+        _8 = const <std::option::NoneError as std::convert::From<std::option::NoneError>>::from(move _9) -> [return: bb8, unwind: bb3]; // bb6[5]: scope 2 at $DIR/issue-62289.rs:9:19: 9:20
+                                         // ty::Const
+                                         // + ty: fn(std::option::NoneError) -> std::option::NoneError {<std::option::NoneError as std::convert::From<std::option::NoneError>>::from}
+                                         // + val: Value(Scalar(<ZST>))
+                                         // mir::Constant
+                                         // + span: $DIR/issue-62289.rs:9:19: 9:20
+                                         // + literal: Const { ty: fn(std::option::NoneError) -> std::option::NoneError {<std::option::NoneError as std::convert::From<std::option::NoneError>>::from}, val: Value(Scalar(<ZST>)) }
+    }
+
+    bb7: {
+        return;                          // bb7[0]: scope 0 at $DIR/issue-62289.rs:10:2: 10:2
+    }
+
+    bb8: {
+        StorageDead(_9);                 // bb8[0]: scope 2 at $DIR/issue-62289.rs:9:19: 9:20
+        _0 = const <std::option::Option<std::boxed::Box<u32>> as std::ops::Try>::from_error(move _8) -> [return: bb9, unwind: bb3]; // bb8[1]: scope 2 at $DIR/issue-62289.rs:9:19: 9:20
+                                         // ty::Const
+                                         // + ty: fn(<std::option::Option<std::boxed::Box<u32>> as std::ops::Try>::Error) -> std::option::Option<std::boxed::Box<u32>> {<std::option::Option<std::boxed::Box<u32>> as std::ops::Try>::from_error}
+                                         // + val: Value(Scalar(<ZST>))
+                                         // mir::Constant
+                                         // + span: $DIR/issue-62289.rs:9:15: 9:20
+                                         // + literal: Const { ty: fn(<std::option::Option<std::boxed::Box<u32>> as std::ops::Try>::Error) -> std::option::Option<std::boxed::Box<u32>> {<std::option::Option<std::boxed::Box<u32>> as std::ops::Try>::from_error}, val: Value(Scalar(<ZST>)) }
+    }
+
+    bb9: {
+        StorageDead(_8);                 // bb9[0]: scope 2 at $DIR/issue-62289.rs:9:19: 9:20
+        StorageDead(_6);                 // bb9[1]: scope 0 at $DIR/issue-62289.rs:9:19: 9:20
+        drop(_2) -> bb10;                // bb9[2]: scope 0 at $DIR/issue-62289.rs:9:20: 9:21
+    }
+
+    bb10: {
+        StorageDead(_2);                 // bb10[0]: scope 0 at $DIR/issue-62289.rs:9:20: 9:21
+        StorageDead(_1);                 // bb10[1]: scope 0 at $DIR/issue-62289.rs:9:21: 9:22
+        StorageDead(_3);                 // bb10[2]: scope 0 at $DIR/issue-62289.rs:10:1: 10:2
+        goto -> bb7;                     // bb10[3]: scope 0 at $DIR/issue-62289.rs:9:19: 9:20
+    }
+
+    bb11 (cleanup): {
+        drop(_1) -> bb1;                 // bb11[0]: scope 0 at $DIR/issue-62289.rs:9:21: 9:22
+    }
+
+    bb12: {
+        StorageDead(_2);                 // bb12[0]: scope 0 at $DIR/issue-62289.rs:9:20: 9:21
+        _0 = std::option::Option::<std::boxed::Box<u32>>::Some(move _1,); // bb12[1]: scope 0 at $DIR/issue-62289.rs:9:5: 9:22
+        drop(_1) -> bb13;                // bb12[2]: scope 0 at $DIR/issue-62289.rs:9:21: 9:22
+    }
+
+    bb13: {
+        StorageDead(_1);                 // bb13[0]: scope 0 at $DIR/issue-62289.rs:9:21: 9:22
+        StorageDead(_3);                 // bb13[1]: scope 0 at $DIR/issue-62289.rs:10:1: 10:2
+        goto -> bb7;                     // bb13[2]: scope 0 at $DIR/issue-62289.rs:10:2: 10:2
+    }
+}
diff --git a/src/test/mir-opt/loop_test.rs b/src/test/mir-opt/loop_test.rs
index 418febbdc01..cb23a4c671b 100644
--- a/src/test/mir-opt/loop_test.rs
+++ b/src/test/mir-opt/loop_test.rs
@@ -2,6 +2,7 @@
 
 // Tests to make sure we correctly generate falseUnwind edges in loops
 
+// EMIT_MIR rustc.main.SimplifyCfg-qualify-consts.after.mir
 fn main() {
     // Exit early at runtime. Since only care about the generated MIR
     // and not the runtime behavior (which is exercised by other tests)
@@ -14,31 +15,3 @@ fn main() {
         continue;
     }
 }
-
-// END RUST SOURCE
-// START rustc.main.SimplifyCfg-qualify-consts.after.mir
-//    ...
-//    bb1 (cleanup): {
-//        resume;
-//    }
-//    ...
-//    bb3: { // Entry into the loop
-//        _1 = ();
-//        StorageDead(_2);
-//        StorageDead(_1);
-//        StorageLive(_4);
-//        goto -> bb5;
-//    }
-//    ...
-//    bb5: { // The loop_block
-//        falseUnwind -> [real: bb6, cleanup: bb1];
-//    }
-//    bb6: { // The loop body (body_block)
-//        StorageLive(_6);
-//        _6 = const 1i32;
-//        FakeRead(ForLet, _6);
-//        StorageDead(_6);
-//        goto -> bb5;
-//    }
-//    ...
-// END rustc.main.SimplifyCfg-qualify-consts.after.mir
diff --git a/src/test/mir-opt/loop_test/rustc.main.SimplifyCfg-qualify-consts.after.mir b/src/test/mir-opt/loop_test/rustc.main.SimplifyCfg-qualify-consts.after.mir
new file mode 100644
index 00000000000..c458592e920
--- /dev/null
+++ b/src/test/mir-opt/loop_test/rustc.main.SimplifyCfg-qualify-consts.after.mir
@@ -0,0 +1,69 @@
+// MIR for `main` after SimplifyCfg-qualify-consts
+
+fn main() -> () {
+    let mut _0: ();                      // return place in scope 0 at $DIR/loop_test.rs:6:11: 6:11
+    let _1: ();                          // in scope 0 at $DIR/loop_test.rs:10:5: 12:6
+    let mut _2: bool;                    // in scope 0 at $DIR/loop_test.rs:10:8: 10:12
+    let mut _3: !;                       // in scope 0 at $DIR/loop_test.rs:10:13: 12:6
+    let mut _4: !;                       // in scope 0 at $DIR/loop_test.rs:13:5: 16:6
+    let mut _5: ();                      // in scope 0 at $DIR/loop_test.rs:6:1: 17:2
+    let _6: i32;                         // in scope 0 at $DIR/loop_test.rs:14:13: 14:14
+    scope 1 {
+        debug x => _6;                   // in scope 1 at $DIR/loop_test.rs:14:13: 14:14
+    }
+
+    bb0: {
+        StorageLive(_1);                 // bb0[0]: scope 0 at $DIR/loop_test.rs:10:5: 12:6
+        StorageLive(_2);                 // bb0[1]: scope 0 at $DIR/loop_test.rs:10:8: 10:12
+        _2 = const true;                 // bb0[2]: scope 0 at $DIR/loop_test.rs:10:8: 10:12
+                                         // ty::Const
+                                         // + ty: bool
+                                         // + val: Value(Scalar(0x01))
+                                         // mir::Constant
+                                         // + span: $DIR/loop_test.rs:10:8: 10:12
+                                         // + literal: Const { ty: bool, val: Value(Scalar(0x01)) }
+        FakeRead(ForMatchedPlace, _2);   // bb0[3]: scope 0 at $DIR/loop_test.rs:10:8: 10:12
+        switchInt(_2) -> [false: bb3, otherwise: bb2]; // bb0[4]: scope 0 at $DIR/loop_test.rs:10:5: 12:6
+    }
+
+    bb1 (cleanup): {
+        resume;                          // bb1[0]: scope 0 at $DIR/loop_test.rs:6:1: 17:2
+    }
+
+    bb2: {
+        falseEdges -> [real: bb4, imaginary: bb3]; // bb2[0]: scope 0 at $DIR/loop_test.rs:10:5: 12:6
+    }
+
+    bb3: {
+        _1 = ();                         // bb3[0]: scope 0 at $DIR/loop_test.rs:10:5: 12:6
+        StorageDead(_2);                 // bb3[1]: scope 0 at $DIR/loop_test.rs:12:5: 12:6
+        StorageDead(_1);                 // bb3[2]: scope 0 at $DIR/loop_test.rs:12:5: 12:6
+        StorageLive(_4);                 // bb3[3]: scope 0 at $DIR/loop_test.rs:13:5: 16:6
+        goto -> bb5;                     // bb3[4]: scope 0 at $DIR/loop_test.rs:13:5: 16:6
+    }
+
+    bb4: {
+        _0 = ();                         // bb4[0]: scope 0 at $DIR/loop_test.rs:11:9: 11:15
+        StorageDead(_2);                 // bb4[1]: scope 0 at $DIR/loop_test.rs:12:5: 12:6
+        StorageDead(_1);                 // bb4[2]: scope 0 at $DIR/loop_test.rs:12:5: 12:6
+        return;                          // bb4[3]: scope 0 at $DIR/loop_test.rs:17:2: 17:2
+    }
+
+    bb5: {
+        falseUnwind -> [real: bb6, cleanup: bb1]; // bb5[0]: scope 0 at $DIR/loop_test.rs:13:5: 16:6
+    }
+
+    bb6: {
+        StorageLive(_6);                 // bb6[0]: scope 0 at $DIR/loop_test.rs:14:13: 14:14
+        _6 = const 1i32;                 // bb6[1]: scope 0 at $DIR/loop_test.rs:14:17: 14:18
+                                         // ty::Const
+                                         // + ty: i32
+                                         // + val: Value(Scalar(0x00000001))
+                                         // mir::Constant
+                                         // + span: $DIR/loop_test.rs:14:17: 14:18
+                                         // + literal: Const { ty: i32, val: Value(Scalar(0x00000001)) }
+        FakeRead(ForLet, _6);            // bb6[2]: scope 0 at $DIR/loop_test.rs:14:13: 14:14
+        StorageDead(_6);                 // bb6[3]: scope 0 at $DIR/loop_test.rs:16:5: 16:6
+        goto -> bb5;                     // bb6[4]: scope 0 at $DIR/loop_test.rs:15:9: 15:17
+    }
+}
diff --git a/src/test/mir-opt/match-arm-scopes.rs b/src/test/mir-opt/match-arm-scopes.rs
index 7afc3bbd6fa..8efca2dd7ab 100644
--- a/src/test/mir-opt/match-arm-scopes.rs
+++ b/src/test/mir-opt/match-arm-scopes.rs
@@ -8,6 +8,8 @@
 //   all of the bindings for that scope.
 // * No drop flags are used.
 
+// EMIT_MIR rustc.complicated_match.SimplifyCfg-initial.after.mir
+// EMIT_MIR rustc.complicated_match.ElaborateDrops.after.mir
 fn complicated_match(cond: bool, items: (bool, bool, String)) -> i32 {
     match items {
         (false, a, s) | (a, false, s) if if cond { return 3 } else { a } => 1,
@@ -31,199 +33,3 @@ fn main() {
         assert_eq!(complicated_match(cond, (items_1, items_2, String::new())), result,);
     }
 }
-
-// END RUST SOURCE
-// START rustc.complicated_match.SimplifyCfg-initial.after.mir
-// let mut _0: i32;
-// let mut _3: &bool;                   // Temp for fake borrow of `items.0`
-// let mut _4: &bool;                   // Temp for fake borrow of `items.1`
-// let _5: bool;                        // `a` in arm
-// let _6: &bool;                       // `a` in guard
-// let _7: std::string::String;         // `s` in arm
-// let _8: &std::string::String;        // `s` in guard
-// let mut _9: bool;                    // `if cond { return 3 } else { a }`
-// let mut _10: bool;                   // `cond`
-// let mut _11: !;                      // `return 3`
-// let mut _12: bool;                   // `if cond { return 3 } else { a }`
-// let mut _13: bool;                   // `cond`
-// let mut _14: !;                      // `return 3`
-// let _15: bool;                       // `b`
-// let _16: std::string::String;        // `t`
-// scope 1 {
-//     debug a => _5;
-//     debug a => _6;
-//     debug s => _7;
-//     debug s => _8;
-// }
-// scope 2 {
-//     debug b => _15;
-//     debug t => _16;
-// }
-// bb0: {
-//     FakeRead(ForMatchedPlace, _2);
-//     switchInt((_2.0: bool)) -> [false: bb2, otherwise: bb3];
-// }
-// bb1 (cleanup): {
-//     resume;
-// }
-// bb2: {                               // pre-binding for arm 1 first pattern
-//     falseEdges -> [real: bb9, imaginary: bb4];
-// }
-// bb3: {
-//     switchInt((_2.1: bool)) -> [false: bb4, otherwise: bb5];
-// }
-// bb4: {                               // pre-binding for arm 1 second pattern
-//     falseEdges -> [real: bb18, imaginary: bb6];
-// }
-// bb5: {
-//     switchInt((_2.0: bool)) -> [false: bb7, otherwise: bb6];
-// }
-// bb6: {                               // pre-binding for arm 2 first pattern
-//     falseEdges -> [real: bb26, imaginary: bb7];
-// }
-// bb7: {                               // bindings for arm 2 - second pattern
-//     StorageLive(_15);
-//     _15 = (_2.1: bool);
-//     StorageLive(_16);
-//     _16 = move (_2.2: std::string::String);
-//     goto -> bb25;
-// }
-// bb8: {                               // arm 1
-//     _0 = const 1i32;
-//     drop(_7) -> [return: bb24, unwind: bb14];
-// }
-// bb9: {                               // guard - first time
-//     StorageLive(_6);
-//     _6 = &(_2.1: bool);
-//     StorageLive(_8);
-//     _8 = &(_2.2: std::string::String);
-//     _3 = &shallow (_2.0: bool);
-//     _4 = &shallow (_2.1: bool);
-//     StorageLive(_9);
-//     StorageLive(_10);
-//     _10 = _1;
-//     FakeRead(ForMatchedPlace, _10);
-//     switchInt(_10) -> [false: bb11, otherwise: bb10];
-// }
-// bb10: {
-//     falseEdges -> [real: bb12, imaginary: bb11];
-// }
-// bb11: {                              // `else` block - first time
-//     _9 = (*_6);
-//     StorageDead(_10);
-//     switchInt(move _9) -> [false: bb17, otherwise: bb16];
-// }
-// bb12: {                              // `return 3` - first time
-//     _0 = const 3i32;
-//     StorageDead(_10);
-//     StorageDead(_9);
-//     StorageDead(_8);
-//     StorageDead(_6);
-//     goto -> bb15;
-// }
-// bb13: {
-//     return;
-// }
-// bb14 (cleanup): {
-//     drop(_2) -> bb1;
-// }
-// bb15: {
-//     drop(_2) -> [return: bb13, unwind: bb1];
-// }
-// bb16: {
-//     StorageDead(_9);
-//     FakeRead(ForMatchGuard, _3);
-//     FakeRead(ForMatchGuard, _4);
-//     FakeRead(ForGuardBinding, _6);
-//     FakeRead(ForGuardBinding, _8);
-//     StorageLive(_5);
-//     _5 = (_2.1: bool);
-//     StorageLive(_7);
-//     _7 = move (_2.2: std::string::String);
-//     goto -> bb8;
-// }
-// bb17: {                              // guard otherwise case - first time
-//     StorageDead(_9);
-//     StorageDead(_8);
-//     StorageDead(_6);
-//     falseEdges -> [real: bb3, imaginary: bb4];
-// }
-// bb18: {                              // guard - second time
-//     StorageLive(_6);
-//     _6 = &(_2.0: bool);
-//     StorageLive(_8);
-//     _8 = &(_2.2: std::string::String);
-//     _3 = &shallow (_2.0: bool);
-//     _4 = &shallow (_2.1: bool);
-//     StorageLive(_12);
-//     StorageLive(_13);
-//     _13 = _1;
-//     FakeRead(ForMatchedPlace, _13);
-//     switchInt(_13) -> [false: bb20, otherwise: bb19];
-// }
-// bb19: {
-//     falseEdges -> [real: bb21, imaginary: bb20];
-// }
-// bb20: {                              // `else` block - second time
-//     _12 = (*_6);
-//     StorageDead(_13);
-//     switchInt(move _12) -> [false: bb23, otherwise: bb22];
-// }
-// bb21: {
-//     _0 = const 3i32;
-//     StorageDead(_13);
-//     StorageDead(_12);
-//     StorageDead(_8);
-//     StorageDead(_6);
-//     goto -> bb15;
-// }
-// bb22: {                              // bindings for arm 1
-//     StorageDead(_12);
-//     FakeRead(ForMatchGuard, _3);
-//     FakeRead(ForMatchGuard, _4);
-//     FakeRead(ForGuardBinding, _6);
-//     FakeRead(ForGuardBinding, _8);
-//     StorageLive(_5);
-//     _5 = (_2.0: bool);
-//     StorageLive(_7);
-//     _7 = move (_2.2: std::string::String);
-//     goto -> bb8;
-// }
-// bb23: {                              // Guard otherwise case - second time
-//     StorageDead(_12);
-//     StorageDead(_8);
-//     StorageDead(_6);
-//     falseEdges -> [real: bb5, imaginary: bb6];
-// }
-// bb24: {                              // rest of arm 1
-//     StorageDead(_7);
-//     StorageDead(_5);
-//     StorageDead(_8);
-//     StorageDead(_6);
-//     goto -> bb28;
-// }
-// bb25: {                              // arm 2
-//     _0 = const 2i32;
-//     drop(_16) -> [return: bb27, unwind: bb14];
-// }
-// bb26: {                              // bindings for arm 2 - first pattern
-//     StorageLive(_15);
-//     _15 = (_2.1: bool);
-//     StorageLive(_16);
-//     _16 = move (_2.2: std::string::String);
-//     goto -> bb25;
-// }
-
-// bb27: {                              // rest of arm 2
-//     StorageDead(_16);
-//     StorageDead(_15);
-//     goto -> bb28;
-// }
-// bb28: {
-//     drop(_2) -> [return: bb13, unwind: bb1];
-// }
-// END rustc.complicated_match.SimplifyCfg-initial.after.mir
-// START rustc.complicated_match.ElaborateDrops.after.mir
-// let _16: std::string::String;      // No drop flags, which would come after this.
-// scope 1 {
-// END rustc.complicated_match.ElaborateDrops.after.mir
diff --git a/src/test/mir-opt/match-arm-scopes/rustc.complicated_match.ElaborateDrops.after.mir b/src/test/mir-opt/match-arm-scopes/rustc.complicated_match.ElaborateDrops.after.mir
new file mode 100644
index 00000000000..807df5be31a
--- /dev/null
+++ b/src/test/mir-opt/match-arm-scopes/rustc.complicated_match.ElaborateDrops.after.mir
@@ -0,0 +1,235 @@
+// MIR for `complicated_match` after ElaborateDrops
+
+fn complicated_match(_1: bool, _2: (bool, bool, std::string::String)) -> i32 {
+    debug cond => _1;                    // in scope 0 at $DIR/match-arm-scopes.rs:13:22: 13:26
+    debug items => _2;                   // in scope 0 at $DIR/match-arm-scopes.rs:13:34: 13:39
+    let mut _0: i32;                     // return place in scope 0 at $DIR/match-arm-scopes.rs:13:66: 13:69
+    let mut _3: &bool;                   // in scope 0 at $DIR/match-arm-scopes.rs:14:11: 14:16
+    let mut _4: &bool;                   // in scope 0 at $DIR/match-arm-scopes.rs:14:11: 14:16
+    let _5: bool;                        // in scope 0 at $DIR/match-arm-scopes.rs:15:17: 15:18
+    let _6: &bool;                       // in scope 0 at $DIR/match-arm-scopes.rs:15:17: 15:18
+    let _7: std::string::String;         // in scope 0 at $DIR/match-arm-scopes.rs:15:20: 15:21
+    let _8: &std::string::String;        // in scope 0 at $DIR/match-arm-scopes.rs:15:20: 15:21
+    let mut _9: bool;                    // in scope 0 at $DIR/match-arm-scopes.rs:15:42: 15:73
+    let mut _10: bool;                   // in scope 0 at $DIR/match-arm-scopes.rs:15:45: 15:49
+    let mut _11: !;                      // in scope 0 at $DIR/match-arm-scopes.rs:15:52: 15:60
+    let mut _12: bool;                   // in scope 0 at $DIR/match-arm-scopes.rs:15:42: 15:73
+    let mut _13: bool;                   // in scope 0 at $DIR/match-arm-scopes.rs:15:45: 15:49
+    let mut _14: !;                      // in scope 0 at $DIR/match-arm-scopes.rs:15:52: 15:60
+    let _15: bool;                       // in scope 0 at $DIR/match-arm-scopes.rs:16:16: 16:17
+    let _16: std::string::String;        // in scope 0 at $DIR/match-arm-scopes.rs:16:19: 16:20
+    scope 1 {
+        debug a => _5;                   // in scope 1 at $DIR/match-arm-scopes.rs:15:17: 15:18
+        debug a => _6;                   // in scope 1 at $DIR/match-arm-scopes.rs:15:17: 15:18
+        debug s => _7;                   // in scope 1 at $DIR/match-arm-scopes.rs:15:20: 15:21
+        debug s => _8;                   // in scope 1 at $DIR/match-arm-scopes.rs:15:20: 15:21
+    }
+    scope 2 {
+        debug b => _15;                  // in scope 2 at $DIR/match-arm-scopes.rs:16:16: 16:17
+        debug t => _16;                  // in scope 2 at $DIR/match-arm-scopes.rs:16:19: 16:20
+    }
+
+    bb0: {
+        switchInt((_2.0: bool)) -> [false: bb6, otherwise: bb2]; // bb0[0]: scope 0 at $DIR/match-arm-scopes.rs:15:10: 15:15
+    }
+
+    bb1 (cleanup): {
+        resume;                          // bb1[0]: scope 0 at $DIR/match-arm-scopes.rs:13:1: 18:2
+    }
+
+    bb2: {
+        switchInt((_2.1: bool)) -> [false: bb14, otherwise: bb3]; // bb2[0]: scope 0 at $DIR/match-arm-scopes.rs:15:29: 15:34
+    }
+
+    bb3: {
+        switchInt((_2.0: bool)) -> [false: bb4, otherwise: bb21]; // bb3[0]: scope 0 at $DIR/match-arm-scopes.rs:16:10: 16:14
+    }
+
+    bb4: {
+        StorageLive(_15);                // bb4[0]: scope 0 at $DIR/match-arm-scopes.rs:16:32: 16:33
+        _15 = (_2.1: bool);              // bb4[1]: scope 0 at $DIR/match-arm-scopes.rs:16:32: 16:33
+        StorageLive(_16);                // bb4[2]: scope 0 at $DIR/match-arm-scopes.rs:16:35: 16:36
+        _16 = move (_2.2: std::string::String); // bb4[3]: scope 0 at $DIR/match-arm-scopes.rs:16:35: 16:36
+        goto -> bb20;                    // bb4[4]: scope 0 at $DIR/match-arm-scopes.rs:14:5: 17:6
+    }
+
+    bb5: {
+        _0 = const 1i32;                 // bb5[0]: scope 1 at $DIR/match-arm-scopes.rs:15:77: 15:78
+                                         // ty::Const
+                                         // + ty: i32
+                                         // + val: Value(Scalar(0x00000001))
+                                         // mir::Constant
+                                         // + span: $DIR/match-arm-scopes.rs:15:77: 15:78
+                                         // + literal: Const { ty: i32, val: Value(Scalar(0x00000001)) }
+        drop(_7) -> [return: bb19, unwind: bb10]; // bb5[1]: scope 0 at $DIR/match-arm-scopes.rs:15:78: 15:79
+    }
+
+    bb6: {
+        StorageLive(_6);                 // bb6[0]: scope 0 at $DIR/match-arm-scopes.rs:15:17: 15:18
+        _6 = &(_2.1: bool);              // bb6[1]: scope 0 at $DIR/match-arm-scopes.rs:15:17: 15:18
+        StorageLive(_8);                 // bb6[2]: scope 0 at $DIR/match-arm-scopes.rs:15:20: 15:21
+        _8 = &(_2.2: std::string::String); // bb6[3]: scope 0 at $DIR/match-arm-scopes.rs:15:20: 15:21
+        StorageLive(_9);                 // bb6[4]: scope 0 at $DIR/match-arm-scopes.rs:15:42: 15:73
+        StorageLive(_10);                // bb6[5]: scope 0 at $DIR/match-arm-scopes.rs:15:45: 15:49
+        _10 = _1;                        // bb6[6]: scope 0 at $DIR/match-arm-scopes.rs:15:45: 15:49
+        switchInt(_10) -> [false: bb7, otherwise: bb8]; // bb6[7]: scope 0 at $DIR/match-arm-scopes.rs:15:42: 15:73
+    }
+
+    bb7: {
+        _9 = (*_6);                      // bb7[0]: scope 0 at $DIR/match-arm-scopes.rs:15:70: 15:71
+        StorageDead(_10);                // bb7[1]: scope 0 at $DIR/match-arm-scopes.rs:15:72: 15:73
+        switchInt(move _9) -> [false: bb13, otherwise: bb12]; // bb7[2]: scope 0 at $DIR/match-arm-scopes.rs:15:42: 15:73
+    }
+
+    bb8: {
+        _0 = const 3i32;                 // bb8[0]: scope 0 at $DIR/match-arm-scopes.rs:15:59: 15:60
+                                         // ty::Const
+                                         // + ty: i32
+                                         // + val: Value(Scalar(0x00000003))
+                                         // mir::Constant
+                                         // + span: $DIR/match-arm-scopes.rs:15:59: 15:60
+                                         // + literal: Const { ty: i32, val: Value(Scalar(0x00000003)) }
+        StorageDead(_10);                // bb8[1]: scope 0 at $DIR/match-arm-scopes.rs:15:72: 15:73
+        StorageDead(_9);                 // bb8[2]: scope 0 at $DIR/match-arm-scopes.rs:15:78: 15:79
+        StorageDead(_8);                 // bb8[3]: scope 0 at $DIR/match-arm-scopes.rs:15:78: 15:79
+        StorageDead(_6);                 // bb8[4]: scope 0 at $DIR/match-arm-scopes.rs:15:78: 15:79
+        goto -> bb11;                    // bb8[5]: scope 0 at $DIR/match-arm-scopes.rs:15:52: 15:60
+    }
+
+    bb9: {
+        return;                          // bb9[0]: scope 0 at $DIR/match-arm-scopes.rs:18:2: 18:2
+    }
+
+    bb10 (cleanup): {
+        goto -> bb25;                    // bb10[0]: scope 0 at $DIR/match-arm-scopes.rs:18:1: 18:2
+    }
+
+    bb11: {
+        drop(_2) -> [return: bb9, unwind: bb1]; // bb11[0]: scope 0 at $DIR/match-arm-scopes.rs:18:1: 18:2
+    }
+
+    bb12: {
+        StorageDead(_9);                 // bb12[0]: scope 0 at $DIR/match-arm-scopes.rs:15:78: 15:79
+        StorageLive(_5);                 // bb12[1]: scope 0 at $DIR/match-arm-scopes.rs:15:17: 15:18
+        _5 = (_2.1: bool);               // bb12[2]: scope 0 at $DIR/match-arm-scopes.rs:15:17: 15:18
+        StorageLive(_7);                 // bb12[3]: scope 0 at $DIR/match-arm-scopes.rs:15:20: 15:21
+        _7 = move (_2.2: std::string::String); // bb12[4]: scope 0 at $DIR/match-arm-scopes.rs:15:20: 15:21
+        goto -> bb5;                     // bb12[5]: scope 0 at $DIR/match-arm-scopes.rs:14:5: 17:6
+    }
+
+    bb13: {
+        StorageDead(_9);                 // bb13[0]: scope 0 at $DIR/match-arm-scopes.rs:15:78: 15:79
+        StorageDead(_8);                 // bb13[1]: scope 0 at $DIR/match-arm-scopes.rs:15:78: 15:79
+        StorageDead(_6);                 // bb13[2]: scope 0 at $DIR/match-arm-scopes.rs:15:78: 15:79
+        goto -> bb2;                     // bb13[3]: scope 0 at $DIR/match-arm-scopes.rs:15:42: 15:73
+    }
+
+    bb14: {
+        StorageLive(_6);                 // bb14[0]: scope 0 at $DIR/match-arm-scopes.rs:15:26: 15:27
+        _6 = &(_2.0: bool);              // bb14[1]: scope 0 at $DIR/match-arm-scopes.rs:15:26: 15:27
+        StorageLive(_8);                 // bb14[2]: scope 0 at $DIR/match-arm-scopes.rs:15:36: 15:37
+        _8 = &(_2.2: std::string::String); // bb14[3]: scope 0 at $DIR/match-arm-scopes.rs:15:36: 15:37
+        StorageLive(_12);                // bb14[4]: scope 0 at $DIR/match-arm-scopes.rs:15:42: 15:73
+        StorageLive(_13);                // bb14[5]: scope 0 at $DIR/match-arm-scopes.rs:15:45: 15:49
+        _13 = _1;                        // bb14[6]: scope 0 at $DIR/match-arm-scopes.rs:15:45: 15:49
+        switchInt(_13) -> [false: bb15, otherwise: bb16]; // bb14[7]: scope 0 at $DIR/match-arm-scopes.rs:15:42: 15:73
+    }
+
+    bb15: {
+        _12 = (*_6);                     // bb15[0]: scope 0 at $DIR/match-arm-scopes.rs:15:70: 15:71
+        StorageDead(_13);                // bb15[1]: scope 0 at $DIR/match-arm-scopes.rs:15:72: 15:73
+        switchInt(move _12) -> [false: bb18, otherwise: bb17]; // bb15[2]: scope 0 at $DIR/match-arm-scopes.rs:15:42: 15:73
+    }
+
+    bb16: {
+        _0 = const 3i32;                 // bb16[0]: scope 0 at $DIR/match-arm-scopes.rs:15:59: 15:60
+                                         // ty::Const
+                                         // + ty: i32
+                                         // + val: Value(Scalar(0x00000003))
+                                         // mir::Constant
+                                         // + span: $DIR/match-arm-scopes.rs:15:59: 15:60
+                                         // + literal: Const { ty: i32, val: Value(Scalar(0x00000003)) }
+        StorageDead(_13);                // bb16[1]: scope 0 at $DIR/match-arm-scopes.rs:15:72: 15:73
+        StorageDead(_12);                // bb16[2]: scope 0 at $DIR/match-arm-scopes.rs:15:78: 15:79
+        StorageDead(_8);                 // bb16[3]: scope 0 at $DIR/match-arm-scopes.rs:15:78: 15:79
+        StorageDead(_6);                 // bb16[4]: scope 0 at $DIR/match-arm-scopes.rs:15:78: 15:79
+        goto -> bb11;                    // bb16[5]: scope 0 at $DIR/match-arm-scopes.rs:15:52: 15:60
+    }
+
+    bb17: {
+        StorageDead(_12);                // bb17[0]: scope 0 at $DIR/match-arm-scopes.rs:15:78: 15:79
+        StorageLive(_5);                 // bb17[1]: scope 0 at $DIR/match-arm-scopes.rs:15:26: 15:27
+        _5 = (_2.0: bool);               // bb17[2]: scope 0 at $DIR/match-arm-scopes.rs:15:26: 15:27
+        StorageLive(_7);                 // bb17[3]: scope 0 at $DIR/match-arm-scopes.rs:15:36: 15:37
+        _7 = move (_2.2: std::string::String); // bb17[4]: scope 0 at $DIR/match-arm-scopes.rs:15:36: 15:37
+        goto -> bb5;                     // bb17[5]: scope 0 at $DIR/match-arm-scopes.rs:14:5: 17:6
+    }
+
+    bb18: {
+        StorageDead(_12);                // bb18[0]: scope 0 at $DIR/match-arm-scopes.rs:15:78: 15:79
+        StorageDead(_8);                 // bb18[1]: scope 0 at $DIR/match-arm-scopes.rs:15:78: 15:79
+        StorageDead(_6);                 // bb18[2]: scope 0 at $DIR/match-arm-scopes.rs:15:78: 15:79
+        goto -> bb3;                     // bb18[3]: scope 0 at $DIR/match-arm-scopes.rs:15:42: 15:73
+    }
+
+    bb19: {
+        StorageDead(_7);                 // bb19[0]: scope 0 at $DIR/match-arm-scopes.rs:15:78: 15:79
+        StorageDead(_5);                 // bb19[1]: scope 0 at $DIR/match-arm-scopes.rs:15:78: 15:79
+        StorageDead(_8);                 // bb19[2]: scope 0 at $DIR/match-arm-scopes.rs:15:78: 15:79
+        StorageDead(_6);                 // bb19[3]: scope 0 at $DIR/match-arm-scopes.rs:15:78: 15:79
+        goto -> bb23;                    // bb19[4]: scope 0 at $DIR/match-arm-scopes.rs:14:5: 17:6
+    }
+
+    bb20: {
+        _0 = const 2i32;                 // bb20[0]: scope 2 at $DIR/match-arm-scopes.rs:16:41: 16:42
+                                         // ty::Const
+                                         // + ty: i32
+                                         // + val: Value(Scalar(0x00000002))
+                                         // mir::Constant
+                                         // + span: $DIR/match-arm-scopes.rs:16:41: 16:42
+                                         // + literal: Const { ty: i32, val: Value(Scalar(0x00000002)) }
+        drop(_16) -> [return: bb22, unwind: bb10]; // bb20[1]: scope 0 at $DIR/match-arm-scopes.rs:16:42: 16:43
+    }
+
+    bb21: {
+        StorageLive(_15);                // bb21[0]: scope 0 at $DIR/match-arm-scopes.rs:16:16: 16:17
+        _15 = (_2.1: bool);              // bb21[1]: scope 0 at $DIR/match-arm-scopes.rs:16:16: 16:17
+        StorageLive(_16);                // bb21[2]: scope 0 at $DIR/match-arm-scopes.rs:16:19: 16:20
+        _16 = move (_2.2: std::string::String); // bb21[3]: scope 0 at $DIR/match-arm-scopes.rs:16:19: 16:20
+        goto -> bb20;                    // bb21[4]: scope 0 at $DIR/match-arm-scopes.rs:14:5: 17:6
+    }
+
+    bb22: {
+        StorageDead(_16);                // bb22[0]: scope 0 at $DIR/match-arm-scopes.rs:16:42: 16:43
+        StorageDead(_15);                // bb22[1]: scope 0 at $DIR/match-arm-scopes.rs:16:42: 16:43
+        goto -> bb23;                    // bb22[2]: scope 0 at $DIR/match-arm-scopes.rs:14:5: 17:6
+    }
+
+    bb23: {
+        goto -> bb29;                    // bb23[0]: scope 0 at $DIR/match-arm-scopes.rs:18:1: 18:2
+    }
+
+    bb24 (cleanup): {
+        goto -> bb1;                     // bb24[0]: scope 0 at $DIR/match-arm-scopes.rs:18:1: 18:2
+    }
+
+    bb25 (cleanup): {
+        goto -> bb24;                    // bb25[0]: scope 0 at $DIR/match-arm-scopes.rs:18:1: 18:2
+    }
+
+    bb26: {
+        goto -> bb9;                     // bb26[0]: scope 0 at $DIR/match-arm-scopes.rs:18:1: 18:2
+    }
+
+    bb27 (cleanup): {
+        goto -> bb1;                     // bb27[0]: scope 0 at $DIR/match-arm-scopes.rs:18:1: 18:2
+    }
+
+    bb28 (cleanup): {
+        goto -> bb27;                    // bb28[0]: scope 0 at $DIR/match-arm-scopes.rs:18:1: 18:2
+    }
+
+    bb29: {
+        goto -> bb26;                    // bb29[0]: scope 0 at $DIR/match-arm-scopes.rs:18:1: 18:2
+    }
+}
diff --git a/src/test/mir-opt/match-arm-scopes/rustc.complicated_match.SimplifyCfg-initial.after.mir b/src/test/mir-opt/match-arm-scopes/rustc.complicated_match.SimplifyCfg-initial.after.mir
new file mode 100644
index 00000000000..ad42a853174
--- /dev/null
+++ b/src/test/mir-opt/match-arm-scopes/rustc.complicated_match.SimplifyCfg-initial.after.mir
@@ -0,0 +1,246 @@
+// MIR for `complicated_match` after SimplifyCfg-initial
+
+fn complicated_match(_1: bool, _2: (bool, bool, std::string::String)) -> i32 {
+    debug cond => _1;                    // in scope 0 at $DIR/match-arm-scopes.rs:13:22: 13:26
+    debug items => _2;                   // in scope 0 at $DIR/match-arm-scopes.rs:13:34: 13:39
+    let mut _0: i32;                     // return place in scope 0 at $DIR/match-arm-scopes.rs:13:66: 13:69
+    let mut _3: &bool;                   // in scope 0 at $DIR/match-arm-scopes.rs:14:11: 14:16
+    let mut _4: &bool;                   // in scope 0 at $DIR/match-arm-scopes.rs:14:11: 14:16
+    let _5: bool;                        // in scope 0 at $DIR/match-arm-scopes.rs:15:17: 15:18
+    let _6: &bool;                       // in scope 0 at $DIR/match-arm-scopes.rs:15:17: 15:18
+    let _7: std::string::String;         // in scope 0 at $DIR/match-arm-scopes.rs:15:20: 15:21
+    let _8: &std::string::String;        // in scope 0 at $DIR/match-arm-scopes.rs:15:20: 15:21
+    let mut _9: bool;                    // in scope 0 at $DIR/match-arm-scopes.rs:15:42: 15:73
+    let mut _10: bool;                   // in scope 0 at $DIR/match-arm-scopes.rs:15:45: 15:49
+    let mut _11: !;                      // in scope 0 at $DIR/match-arm-scopes.rs:15:52: 15:60
+    let mut _12: bool;                   // in scope 0 at $DIR/match-arm-scopes.rs:15:42: 15:73
+    let mut _13: bool;                   // in scope 0 at $DIR/match-arm-scopes.rs:15:45: 15:49
+    let mut _14: !;                      // in scope 0 at $DIR/match-arm-scopes.rs:15:52: 15:60
+    let _15: bool;                       // in scope 0 at $DIR/match-arm-scopes.rs:16:16: 16:17
+    let _16: std::string::String;        // in scope 0 at $DIR/match-arm-scopes.rs:16:19: 16:20
+    scope 1 {
+        debug a => _5;                   // in scope 1 at $DIR/match-arm-scopes.rs:15:17: 15:18
+        debug a => _6;                   // in scope 1 at $DIR/match-arm-scopes.rs:15:17: 15:18
+        debug s => _7;                   // in scope 1 at $DIR/match-arm-scopes.rs:15:20: 15:21
+        debug s => _8;                   // in scope 1 at $DIR/match-arm-scopes.rs:15:20: 15:21
+    }
+    scope 2 {
+        debug b => _15;                  // in scope 2 at $DIR/match-arm-scopes.rs:16:16: 16:17
+        debug t => _16;                  // in scope 2 at $DIR/match-arm-scopes.rs:16:19: 16:20
+    }
+
+    bb0: {
+        FakeRead(ForMatchedPlace, _2);   // bb0[0]: scope 0 at $DIR/match-arm-scopes.rs:14:11: 14:16
+        switchInt((_2.0: bool)) -> [false: bb2, otherwise: bb3]; // bb0[1]: scope 0 at $DIR/match-arm-scopes.rs:15:10: 15:15
+    }
+
+    bb1 (cleanup): {
+        resume;                          // bb1[0]: scope 0 at $DIR/match-arm-scopes.rs:13:1: 18:2
+    }
+
+    bb2: {
+        falseEdges -> [real: bb9, imaginary: bb4]; // bb2[0]: scope 0 at $DIR/match-arm-scopes.rs:15:9: 15:22
+    }
+
+    bb3: {
+        switchInt((_2.1: bool)) -> [false: bb4, otherwise: bb5]; // bb3[0]: scope 0 at $DIR/match-arm-scopes.rs:15:29: 15:34
+    }
+
+    bb4: {
+        falseEdges -> [real: bb18, imaginary: bb6]; // bb4[0]: scope 0 at $DIR/match-arm-scopes.rs:15:25: 15:38
+    }
+
+    bb5: {
+        switchInt((_2.0: bool)) -> [false: bb7, otherwise: bb6]; // bb5[0]: scope 0 at $DIR/match-arm-scopes.rs:16:10: 16:14
+    }
+
+    bb6: {
+        falseEdges -> [real: bb26, imaginary: bb7]; // bb6[0]: scope 0 at $DIR/match-arm-scopes.rs:16:9: 16:21
+    }
+
+    bb7: {
+        StorageLive(_15);                // bb7[0]: scope 0 at $DIR/match-arm-scopes.rs:16:32: 16:33
+        _15 = (_2.1: bool);              // bb7[1]: scope 0 at $DIR/match-arm-scopes.rs:16:32: 16:33
+        StorageLive(_16);                // bb7[2]: scope 0 at $DIR/match-arm-scopes.rs:16:35: 16:36
+        _16 = move (_2.2: std::string::String); // bb7[3]: scope 0 at $DIR/match-arm-scopes.rs:16:35: 16:36
+        goto -> bb25;                    // bb7[4]: scope 0 at $DIR/match-arm-scopes.rs:14:5: 17:6
+    }
+
+    bb8: {
+        _0 = const 1i32;                 // bb8[0]: scope 1 at $DIR/match-arm-scopes.rs:15:77: 15:78
+                                         // ty::Const
+                                         // + ty: i32
+                                         // + val: Value(Scalar(0x00000001))
+                                         // mir::Constant
+                                         // + span: $DIR/match-arm-scopes.rs:15:77: 15:78
+                                         // + literal: Const { ty: i32, val: Value(Scalar(0x00000001)) }
+        drop(_7) -> [return: bb24, unwind: bb14]; // bb8[1]: scope 0 at $DIR/match-arm-scopes.rs:15:78: 15:79
+    }
+
+    bb9: {
+        StorageLive(_6);                 // bb9[0]: scope 0 at $DIR/match-arm-scopes.rs:15:17: 15:18
+        _6 = &(_2.1: bool);              // bb9[1]: scope 0 at $DIR/match-arm-scopes.rs:15:17: 15:18
+        StorageLive(_8);                 // bb9[2]: scope 0 at $DIR/match-arm-scopes.rs:15:20: 15:21
+        _8 = &(_2.2: std::string::String); // bb9[3]: scope 0 at $DIR/match-arm-scopes.rs:15:20: 15:21
+        _3 = &shallow (_2.0: bool);      // bb9[4]: scope 0 at $DIR/match-arm-scopes.rs:14:11: 14:16
+        _4 = &shallow (_2.1: bool);      // bb9[5]: scope 0 at $DIR/match-arm-scopes.rs:14:11: 14:16
+        StorageLive(_9);                 // bb9[6]: scope 0 at $DIR/match-arm-scopes.rs:15:42: 15:73
+        StorageLive(_10);                // bb9[7]: scope 0 at $DIR/match-arm-scopes.rs:15:45: 15:49
+        _10 = _1;                        // bb9[8]: scope 0 at $DIR/match-arm-scopes.rs:15:45: 15:49
+        FakeRead(ForMatchedPlace, _10);  // bb9[9]: scope 0 at $DIR/match-arm-scopes.rs:15:45: 15:49
+        switchInt(_10) -> [false: bb11, otherwise: bb10]; // bb9[10]: scope 0 at $DIR/match-arm-scopes.rs:15:42: 15:73
+    }
+
+    bb10: {
+        falseEdges -> [real: bb12, imaginary: bb11]; // bb10[0]: scope 0 at $DIR/match-arm-scopes.rs:15:42: 15:73
+    }
+
+    bb11: {
+        _9 = (*_6);                      // bb11[0]: scope 0 at $DIR/match-arm-scopes.rs:15:70: 15:71
+        StorageDead(_10);                // bb11[1]: scope 0 at $DIR/match-arm-scopes.rs:15:72: 15:73
+        switchInt(move _9) -> [false: bb17, otherwise: bb16]; // bb11[2]: scope 0 at $DIR/match-arm-scopes.rs:15:42: 15:73
+    }
+
+    bb12: {
+        _0 = const 3i32;                 // bb12[0]: scope 0 at $DIR/match-arm-scopes.rs:15:59: 15:60
+                                         // ty::Const
+                                         // + ty: i32
+                                         // + val: Value(Scalar(0x00000003))
+                                         // mir::Constant
+                                         // + span: $DIR/match-arm-scopes.rs:15:59: 15:60
+                                         // + literal: Const { ty: i32, val: Value(Scalar(0x00000003)) }
+        StorageDead(_10);                // bb12[1]: scope 0 at $DIR/match-arm-scopes.rs:15:72: 15:73
+        StorageDead(_9);                 // bb12[2]: scope 0 at $DIR/match-arm-scopes.rs:15:78: 15:79
+        StorageDead(_8);                 // bb12[3]: scope 0 at $DIR/match-arm-scopes.rs:15:78: 15:79
+        StorageDead(_6);                 // bb12[4]: scope 0 at $DIR/match-arm-scopes.rs:15:78: 15:79
+        goto -> bb15;                    // bb12[5]: scope 0 at $DIR/match-arm-scopes.rs:15:52: 15:60
+    }
+
+    bb13: {
+        return;                          // bb13[0]: scope 0 at $DIR/match-arm-scopes.rs:18:2: 18:2
+    }
+
+    bb14 (cleanup): {
+        drop(_2) -> bb1;                 // bb14[0]: scope 0 at $DIR/match-arm-scopes.rs:18:1: 18:2
+    }
+
+    bb15: {
+        drop(_2) -> [return: bb13, unwind: bb1]; // bb15[0]: scope 0 at $DIR/match-arm-scopes.rs:18:1: 18:2
+    }
+
+    bb16: {
+        StorageDead(_9);                 // bb16[0]: scope 0 at $DIR/match-arm-scopes.rs:15:78: 15:79
+        FakeRead(ForMatchGuard, _3);     // bb16[1]: scope 0 at $DIR/match-arm-scopes.rs:15:72: 15:73
+        FakeRead(ForMatchGuard, _4);     // bb16[2]: scope 0 at $DIR/match-arm-scopes.rs:15:72: 15:73
+        FakeRead(ForGuardBinding, _6);   // bb16[3]: scope 0 at $DIR/match-arm-scopes.rs:15:72: 15:73
+        FakeRead(ForGuardBinding, _8);   // bb16[4]: scope 0 at $DIR/match-arm-scopes.rs:15:72: 15:73
+        StorageLive(_5);                 // bb16[5]: scope 0 at $DIR/match-arm-scopes.rs:15:17: 15:18
+        _5 = (_2.1: bool);               // bb16[6]: scope 0 at $DIR/match-arm-scopes.rs:15:17: 15:18
+        StorageLive(_7);                 // bb16[7]: scope 0 at $DIR/match-arm-scopes.rs:15:20: 15:21
+        _7 = move (_2.2: std::string::String); // bb16[8]: scope 0 at $DIR/match-arm-scopes.rs:15:20: 15:21
+        goto -> bb8;                     // bb16[9]: scope 0 at $DIR/match-arm-scopes.rs:14:5: 17:6
+    }
+
+    bb17: {
+        StorageDead(_9);                 // bb17[0]: scope 0 at $DIR/match-arm-scopes.rs:15:78: 15:79
+        StorageDead(_8);                 // bb17[1]: scope 0 at $DIR/match-arm-scopes.rs:15:78: 15:79
+        StorageDead(_6);                 // bb17[2]: scope 0 at $DIR/match-arm-scopes.rs:15:78: 15:79
+        falseEdges -> [real: bb3, imaginary: bb4]; // bb17[3]: scope 0 at $DIR/match-arm-scopes.rs:15:42: 15:73
+    }
+
+    bb18: {
+        StorageLive(_6);                 // bb18[0]: scope 0 at $DIR/match-arm-scopes.rs:15:26: 15:27
+        _6 = &(_2.0: bool);              // bb18[1]: scope 0 at $DIR/match-arm-scopes.rs:15:26: 15:27
+        StorageLive(_8);                 // bb18[2]: scope 0 at $DIR/match-arm-scopes.rs:15:36: 15:37
+        _8 = &(_2.2: std::string::String); // bb18[3]: scope 0 at $DIR/match-arm-scopes.rs:15:36: 15:37
+        _3 = &shallow (_2.0: bool);      // bb18[4]: scope 0 at $DIR/match-arm-scopes.rs:14:11: 14:16
+        _4 = &shallow (_2.1: bool);      // bb18[5]: scope 0 at $DIR/match-arm-scopes.rs:14:11: 14:16
+        StorageLive(_12);                // bb18[6]: scope 0 at $DIR/match-arm-scopes.rs:15:42: 15:73
+        StorageLive(_13);                // bb18[7]: scope 0 at $DIR/match-arm-scopes.rs:15:45: 15:49
+        _13 = _1;                        // bb18[8]: scope 0 at $DIR/match-arm-scopes.rs:15:45: 15:49
+        FakeRead(ForMatchedPlace, _13);  // bb18[9]: scope 0 at $DIR/match-arm-scopes.rs:15:45: 15:49
+        switchInt(_13) -> [false: bb20, otherwise: bb19]; // bb18[10]: scope 0 at $DIR/match-arm-scopes.rs:15:42: 15:73
+    }
+
+    bb19: {
+        falseEdges -> [real: bb21, imaginary: bb20]; // bb19[0]: scope 0 at $DIR/match-arm-scopes.rs:15:42: 15:73
+    }
+
+    bb20: {
+        _12 = (*_6);                     // bb20[0]: scope 0 at $DIR/match-arm-scopes.rs:15:70: 15:71
+        StorageDead(_13);                // bb20[1]: scope 0 at $DIR/match-arm-scopes.rs:15:72: 15:73
+        switchInt(move _12) -> [false: bb23, otherwise: bb22]; // bb20[2]: scope 0 at $DIR/match-arm-scopes.rs:15:42: 15:73
+    }
+
+    bb21: {
+        _0 = const 3i32;                 // bb21[0]: scope 0 at $DIR/match-arm-scopes.rs:15:59: 15:60
+                                         // ty::Const
+                                         // + ty: i32
+                                         // + val: Value(Scalar(0x00000003))
+                                         // mir::Constant
+                                         // + span: $DIR/match-arm-scopes.rs:15:59: 15:60
+                                         // + literal: Const { ty: i32, val: Value(Scalar(0x00000003)) }
+        StorageDead(_13);                // bb21[1]: scope 0 at $DIR/match-arm-scopes.rs:15:72: 15:73
+        StorageDead(_12);                // bb21[2]: scope 0 at $DIR/match-arm-scopes.rs:15:78: 15:79
+        StorageDead(_8);                 // bb21[3]: scope 0 at $DIR/match-arm-scopes.rs:15:78: 15:79
+        StorageDead(_6);                 // bb21[4]: scope 0 at $DIR/match-arm-scopes.rs:15:78: 15:79
+        goto -> bb15;                    // bb21[5]: scope 0 at $DIR/match-arm-scopes.rs:15:52: 15:60
+    }
+
+    bb22: {
+        StorageDead(_12);                // bb22[0]: scope 0 at $DIR/match-arm-scopes.rs:15:78: 15:79
+        FakeRead(ForMatchGuard, _3);     // bb22[1]: scope 0 at $DIR/match-arm-scopes.rs:15:72: 15:73
+        FakeRead(ForMatchGuard, _4);     // bb22[2]: scope 0 at $DIR/match-arm-scopes.rs:15:72: 15:73
+        FakeRead(ForGuardBinding, _6);   // bb22[3]: scope 0 at $DIR/match-arm-scopes.rs:15:72: 15:73
+        FakeRead(ForGuardBinding, _8);   // bb22[4]: scope 0 at $DIR/match-arm-scopes.rs:15:72: 15:73
+        StorageLive(_5);                 // bb22[5]: scope 0 at $DIR/match-arm-scopes.rs:15:26: 15:27
+        _5 = (_2.0: bool);               // bb22[6]: scope 0 at $DIR/match-arm-scopes.rs:15:26: 15:27
+        StorageLive(_7);                 // bb22[7]: scope 0 at $DIR/match-arm-scopes.rs:15:36: 15:37
+        _7 = move (_2.2: std::string::String); // bb22[8]: scope 0 at $DIR/match-arm-scopes.rs:15:36: 15:37
+        goto -> bb8;                     // bb22[9]: scope 0 at $DIR/match-arm-scopes.rs:14:5: 17:6
+    }
+
+    bb23: {
+        StorageDead(_12);                // bb23[0]: scope 0 at $DIR/match-arm-scopes.rs:15:78: 15:79
+        StorageDead(_8);                 // bb23[1]: scope 0 at $DIR/match-arm-scopes.rs:15:78: 15:79
+        StorageDead(_6);                 // bb23[2]: scope 0 at $DIR/match-arm-scopes.rs:15:78: 15:79
+        falseEdges -> [real: bb5, imaginary: bb6]; // bb23[3]: scope 0 at $DIR/match-arm-scopes.rs:15:42: 15:73
+    }
+
+    bb24: {
+        StorageDead(_7);                 // bb24[0]: scope 0 at $DIR/match-arm-scopes.rs:15:78: 15:79
+        StorageDead(_5);                 // bb24[1]: scope 0 at $DIR/match-arm-scopes.rs:15:78: 15:79
+        StorageDead(_8);                 // bb24[2]: scope 0 at $DIR/match-arm-scopes.rs:15:78: 15:79
+        StorageDead(_6);                 // bb24[3]: scope 0 at $DIR/match-arm-scopes.rs:15:78: 15:79
+        goto -> bb28;                    // bb24[4]: scope 0 at $DIR/match-arm-scopes.rs:14:5: 17:6
+    }
+
+    bb25: {
+        _0 = const 2i32;                 // bb25[0]: scope 2 at $DIR/match-arm-scopes.rs:16:41: 16:42
+                                         // ty::Const
+                                         // + ty: i32
+                                         // + val: Value(Scalar(0x00000002))
+                                         // mir::Constant
+                                         // + span: $DIR/match-arm-scopes.rs:16:41: 16:42
+                                         // + literal: Const { ty: i32, val: Value(Scalar(0x00000002)) }
+        drop(_16) -> [return: bb27, unwind: bb14]; // bb25[1]: scope 0 at $DIR/match-arm-scopes.rs:16:42: 16:43
+    }
+
+    bb26: {
+        StorageLive(_15);                // bb26[0]: scope 0 at $DIR/match-arm-scopes.rs:16:16: 16:17
+        _15 = (_2.1: bool);              // bb26[1]: scope 0 at $DIR/match-arm-scopes.rs:16:16: 16:17
+        StorageLive(_16);                // bb26[2]: scope 0 at $DIR/match-arm-scopes.rs:16:19: 16:20
+        _16 = move (_2.2: std::string::String); // bb26[3]: scope 0 at $DIR/match-arm-scopes.rs:16:19: 16:20
+        goto -> bb25;                    // bb26[4]: scope 0 at $DIR/match-arm-scopes.rs:14:5: 17:6
+    }
+
+    bb27: {
+        StorageDead(_16);                // bb27[0]: scope 0 at $DIR/match-arm-scopes.rs:16:42: 16:43
+        StorageDead(_15);                // bb27[1]: scope 0 at $DIR/match-arm-scopes.rs:16:42: 16:43
+        goto -> bb28;                    // bb27[2]: scope 0 at $DIR/match-arm-scopes.rs:14:5: 17:6
+    }
+
+    bb28: {
+        drop(_2) -> [return: bb13, unwind: bb1]; // bb28[0]: scope 0 at $DIR/match-arm-scopes.rs:18:1: 18:2
+    }
+}
diff --git a/src/test/mir-opt/match_false_edges.rs b/src/test/mir-opt/match_false_edges.rs
index 237828d9020..91f4aad165e 100644
--- a/src/test/mir-opt/match_false_edges.rs
+++ b/src/test/mir-opt/match_false_edges.rs
@@ -10,6 +10,7 @@ fn guard2(_: i32) -> bool {
 
 // no_mangle to make sure this gets instantiated even in an executable.
 #[no_mangle]
+// EMIT_MIR rustc.full_tested_match.PromoteTemps.after.mir
 pub fn full_tested_match() {
     let _ = match Some(42) {
         Some(x) if guard() => (1, x),
@@ -20,6 +21,7 @@ pub fn full_tested_match() {
 
 // no_mangle to make sure this gets instantiated even in an executable.
 #[no_mangle]
+// EMIT_MIR rustc.full_tested_match2.PromoteTemps.before.mir
 pub fn full_tested_match2() {
     let _ = match Some(42) {
         Some(x) if guard() => (1, x),
@@ -28,6 +30,7 @@ pub fn full_tested_match2() {
     };
 }
 
+// EMIT_MIR rustc.main.PromoteTemps.before.mir
 fn main() {
     let _ = match Some(1) {
         Some(_w) if guard() => 1,
@@ -36,245 +39,3 @@ fn main() {
         _z => 4,
     };
 }
-
-// END RUST SOURCE
-//
-// START rustc.full_tested_match.PromoteTemps.after.mir
-//  bb0: {
-//      ...
-//      _2 = std::option::Option::<i32>::Some(const 42i32,);
-//      FakeRead(ForMatchedPlace, _2);
-//      _3 = discriminant(_2);
-//      switchInt(move _3) -> [0isize: bb2, 1isize: bb3, otherwise: bb5];
-//  }
-//  bb1 (cleanup): {
-//      resume;
-//  }
-//  bb2: {  // pre_binding3 and arm3
-//      _1 = (const 3i32, const 3i32);
-//      goto -> bb11;
-//  }
-//  bb3: {
-//      falseEdges -> [real: bb6, imaginary: bb4]; //pre_binding1
-//  }
-//  bb4: {
-//      falseEdges -> [real: bb10, imaginary: bb2]; //pre_binding2
-//  }
-//  bb5: {
-//      unreachable;
-//  }
-//  bb6: { // binding1 and guard
-//      StorageLive(_6);
-//      _11 = const full_tested_match::promoted[0];
-//      _6 = &(((*_11) as Some).0: i32);
-//      _4 = &shallow _2;
-//      StorageLive(_7);
-//      _7 = const guard() -> [return: bb7, unwind: bb1];
-//  }
-//  bb7: { // end of guard
-//      switchInt(move _7) -> [false: bb9, otherwise: bb8];
-//  }
-//  bb8: { // arm1
-//      StorageDead(_7);
-//      FakeRead(ForMatchGuard, _4);
-//      FakeRead(ForGuardBinding, _6);
-//      StorageLive(_5);
-//      _5 = ((_2 as Some).0: i32);
-//      StorageLive(_8);
-//      _8 = _5;
-//      _1 = (const 1i32, move _8);
-//      StorageDead(_8);
-//      StorageDead(_5);
-//      StorageDead(_6);
-//      goto -> bb11;
-//  }
-//  bb9: { // to pre_binding2
-//      StorageDead(_7);
-//      StorageDead(_6);
-//      goto -> bb4;
-//  }
-//  bb10: { // arm2
-//      StorageLive(_9);
-//      _9 = ((_2 as Some).0: i32);
-//      StorageLive(_10);
-//      _10 = _9;
-//      _1 = (const 2i32, move _10);
-//      StorageDead(_10);
-//      StorageDead(_9);
-//      goto -> bb11;
-//  }
-//  bb11: {
-//      StorageDead(_2);
-//      StorageDead(_1);
-//      _0 = ();
-//      return;
-//  }
-// END rustc.full_tested_match.PromoteTemps.after.mir
-//
-// START rustc.full_tested_match2.PromoteTemps.before.mir
-//  bb0: {
-//      ...
-//      _2 = std::option::Option::<i32>::Some(const 42i32,);
-//      FakeRead(ForMatchedPlace, _2);
-//      _3 = discriminant(_2);
-//      switchInt(move _3) -> [0isize: bb2, 1isize: bb3, otherwise: bb5];
-//  }
-//  bb1 (cleanup): {
-//      resume;
-//  }
-//  bb2: { // pre_binding2
-//      falseEdges -> [real: bb10, imaginary: bb4];
-//  }
-//  bb3: { // pre_binding1
-//      falseEdges -> [real: bb6, imaginary: bb2];
-//  }
-//  bb4: { // binding3 and arm3
-//      StorageLive(_9);
-//      _9 = ((_2 as Some).0: i32);
-//      StorageLive(_10);
-//      _10 = _9;
-//      _1 = (const 2i32, move _10);
-//      StorageDead(_10);
-//      StorageDead(_9);
-//      goto -> bb11;
-//  }
-//  bb5: {
-//      unreachable;
-//  }
-//  bb6: {
-//      StorageLive(_6);
-//      _6 = &((_2 as Some).0: i32);
-//      _4 = &shallow _2;
-//      StorageLive(_7);
-//      _7 = const guard() -> [return: bb7, unwind: bb1];
-//  }
-//  bb7: { // end of guard
-//      switchInt(move _7) -> [false: bb9, otherwise: bb8];
-//  }
-//  bb8: {
-//      StorageDead(_7);
-//      FakeRead(ForMatchGuard, _4);
-//      FakeRead(ForGuardBinding, _6);
-//      StorageLive(_5);
-//      _5 = ((_2 as Some).0: i32);
-//      StorageLive(_8);
-//      _8 = _5;
-//      _1 = (const 1i32, move _8);
-//      StorageDead(_8);
-//      StorageDead(_5);
-//      StorageDead(_6);
-//      goto -> bb11;
-//  }
-//  bb9: { // to pre_binding3 (can skip 2 since this is `Some`)
-//      StorageDead(_7);
-//      StorageDead(_6);
-//      falseEdges -> [real: bb4, imaginary: bb2];
-//  }
-//  bb10: { // arm2
-//      _1 = (const 3i32, const 3i32);
-//      goto -> bb11;
-//  }
-//  bb11: {
-//      StorageDead(_2);
-//      StorageDead(_1);
-//      _0 = ();
-//      return;
-//  }
-// END rustc.full_tested_match2.PromoteTemps.before.mir
-//
-// START rustc.main.PromoteTemps.before.mir
-//  bb0: {
-//     ...
-//      _2 = std::option::Option::<i32>::Some(const 1i32,);
-//      FakeRead(ForMatchedPlace, _2);
-//      _4 = discriminant(_2);
-//      switchInt(move _4) -> [1isize: bb3, otherwise: bb2];
-//  }
-//  bb1 (cleanup): {
-//      resume;
-//  }
-//  bb2: {
-//      falseEdges -> [real: bb10, imaginary: bb5];
-//  }
-//  bb3: {
-//      falseEdges -> [real: bb6, imaginary: bb2];
-//  }
-//  bb4: {
-//      StorageLive(_14);
-//      _14 = _2;
-//      _1 = const 4i32;
-//      StorageDead(_14);
-//      goto -> bb15;
-//  }
-//  bb5: {
-//      falseEdges -> [real: bb11, imaginary: bb4];
-//  }
-//  bb6: { //end of guard1
-//      StorageLive(_7);
-//      _7 = &((_2 as Some).0: i32);
-//      _5 = &shallow _2;
-//      StorageLive(_8);
-//      _8 = const guard() -> [return: bb7, unwind: bb1];
-//  }
-//  bb7: {
-//      switchInt(move _8) -> [false: bb9, otherwise: bb8];
-//  }
-//  bb8: {
-//      StorageDead(_8);
-//      FakeRead(ForMatchGuard, _5);
-//      FakeRead(ForGuardBinding, _7);
-//      StorageLive(_6);
-//      _6 = ((_2 as Some).0: i32);
-//      _1 = const 1i32;
-//      StorageDead(_6);
-//      StorageDead(_7);
-//      goto -> bb15;
-//  }
-//  bb9: {
-//      StorageDead(_8);
-//      StorageDead(_7);
-//      falseEdges -> [real: bb2, imaginary: bb2];
-//  }
-//  bb10: {  // binding2 & arm2
-//      StorageLive(_9);
-//      _9 = _2;
-//      _1 = const 2i32;
-//      StorageDead(_9);
-//      goto -> bb15;
-//  }
-//  bb11: { // binding3: Some(y) if guard2(y)
-//      StorageLive(_11);
-//      _11 = &((_2 as Some).0: i32);
-//      _5 = &shallow _2;
-//      StorageLive(_12);
-//      StorageLive(_13);
-//      _13 = (*_11);
-//      _12 = const guard2(move _13) -> [return: bb12, unwind: bb1];
-//  }
-//  bb12: { // end of guard2
-//      StorageDead(_13);
-//      switchInt(move _12) -> [false: bb14, otherwise: bb13];
-//  }
-//  bb13: { // binding4 & arm4
-//      StorageDead(_12);
-//      FakeRead(ForMatchGuard, _5);
-//      FakeRead(ForGuardBinding, _11);
-//      StorageLive(_10);
-//      _10 = ((_2 as Some).0: i32);
-//      _1 = const 3i32;
-//      StorageDead(_10);
-//      StorageDead(_11);
-//      goto -> bb15;
-//  }
-//  bb14: {
-//      StorageDead(_12);
-//      StorageDead(_11);
-//      falseEdges -> [real: bb4, imaginary: bb4];
-//  }
-//  bb15: {
-//      StorageDead(_2);
-//      StorageDead(_1);
-//      _0 = ();
-//      return;
-//  }
-// END rustc.main.PromoteTemps.before.mir
diff --git a/src/test/mir-opt/match_false_edges/rustc.full_tested_match.PromoteTemps.after.mir b/src/test/mir-opt/match_false_edges/rustc.full_tested_match.PromoteTemps.after.mir
new file mode 100644
index 00000000000..acc03cce46e
--- /dev/null
+++ b/src/test/mir-opt/match_false_edges/rustc.full_tested_match.PromoteTemps.after.mir
@@ -0,0 +1,149 @@
+// MIR for `full_tested_match` after PromoteTemps
+
+fn full_tested_match() -> () {
+    let mut _0: ();                      // return place in scope 0 at $DIR/match_false_edges.rs:14:28: 14:28
+    let mut _1: (i32, i32);              // in scope 0 at $DIR/match_false_edges.rs:15:13: 19:6
+    let mut _2: std::option::Option<i32>; // in scope 0 at $DIR/match_false_edges.rs:15:19: 15:27
+    let mut _3: isize;                   // in scope 0 at $DIR/match_false_edges.rs:16:9: 16:16
+    let mut _4: &std::option::Option<i32>; // in scope 0 at $DIR/match_false_edges.rs:15:19: 15:27
+    let _5: i32;                         // in scope 0 at $DIR/match_false_edges.rs:16:14: 16:15
+    let _6: &i32;                        // in scope 0 at $DIR/match_false_edges.rs:16:14: 16:15
+    let mut _7: bool;                    // in scope 0 at $DIR/match_false_edges.rs:16:20: 16:27
+    let mut _8: i32;                     // in scope 0 at $DIR/match_false_edges.rs:16:35: 16:36
+    let _9: i32;                         // in scope 0 at $DIR/match_false_edges.rs:17:14: 17:15
+    let mut _10: i32;                    // in scope 0 at $DIR/match_false_edges.rs:17:24: 17:25
+    let mut _11: &std::option::Option<i32>; // in scope 0 at $DIR/match_false_edges.rs:16:14: 16:15
+    scope 1 {
+    }
+    scope 2 {
+        debug x => _5;                   // in scope 2 at $DIR/match_false_edges.rs:16:14: 16:15
+        debug x => _6;                   // in scope 2 at $DIR/match_false_edges.rs:16:14: 16:15
+    }
+    scope 3 {
+        debug y => _9;                   // in scope 3 at $DIR/match_false_edges.rs:17:14: 17:15
+    }
+
+    bb0: {
+        StorageLive(_1);                 // bb0[0]: scope 0 at $DIR/match_false_edges.rs:15:13: 19:6
+        StorageLive(_2);                 // bb0[1]: scope 0 at $DIR/match_false_edges.rs:15:19: 15:27
+        _2 = std::option::Option::<i32>::Some(const 42i32,); // bb0[2]: scope 0 at $DIR/match_false_edges.rs:15:19: 15:27
+                                         // ty::Const
+                                         // + ty: i32
+                                         // + val: Value(Scalar(0x0000002a))
+                                         // mir::Constant
+                                         // + span: $DIR/match_false_edges.rs:15:24: 15:26
+                                         // + literal: Const { ty: i32, val: Value(Scalar(0x0000002a)) }
+        FakeRead(ForMatchedPlace, _2);   // bb0[3]: scope 0 at $DIR/match_false_edges.rs:15:19: 15:27
+        _3 = discriminant(_2);           // bb0[4]: scope 0 at $DIR/match_false_edges.rs:16:9: 16:16
+        switchInt(move _3) -> [0isize: bb2, 1isize: bb3, otherwise: bb5]; // bb0[5]: scope 0 at $DIR/match_false_edges.rs:16:9: 16:16
+    }
+
+    bb1 (cleanup): {
+        resume;                          // bb1[0]: scope 0 at $DIR/match_false_edges.rs:14:1: 20:2
+    }
+
+    bb2: {
+        _1 = (const 3i32, const 3i32);   // bb2[0]: scope 0 at $DIR/match_false_edges.rs:18:17: 18:23
+                                         // ty::Const
+                                         // + ty: i32
+                                         // + val: Value(Scalar(0x00000003))
+                                         // mir::Constant
+                                         // + span: $DIR/match_false_edges.rs:18:18: 18:19
+                                         // + literal: Const { ty: i32, val: Value(Scalar(0x00000003)) }
+                                         // ty::Const
+                                         // + ty: i32
+                                         // + val: Value(Scalar(0x00000003))
+                                         // mir::Constant
+                                         // + span: $DIR/match_false_edges.rs:18:21: 18:22
+                                         // + literal: Const { ty: i32, val: Value(Scalar(0x00000003)) }
+        goto -> bb11;                    // bb2[1]: scope 0 at $DIR/match_false_edges.rs:15:13: 19:6
+    }
+
+    bb3: {
+        falseEdges -> [real: bb6, imaginary: bb4]; // bb3[0]: scope 0 at $DIR/match_false_edges.rs:16:9: 16:16
+    }
+
+    bb4: {
+        falseEdges -> [real: bb10, imaginary: bb2]; // bb4[0]: scope 0 at $DIR/match_false_edges.rs:17:9: 17:16
+    }
+
+    bb5: {
+        unreachable;                     // bb5[0]: scope 0 at $DIR/match_false_edges.rs:15:19: 15:27
+    }
+
+    bb6: {
+        StorageLive(_6);                 // bb6[0]: scope 0 at $DIR/match_false_edges.rs:16:14: 16:15
+        _11 = const full_tested_match::promoted[0]; // bb6[1]: scope 0 at $DIR/match_false_edges.rs:16:14: 16:15
+                                         // ty::Const
+                                         // + ty: &std::option::Option<i32>
+                                         // + val: Unevaluated(DefId(0:5 ~ match_false_edges[317d]::full_tested_match[0]), [], Some(promoted[0]))
+                                         // mir::Constant
+                                         // + span: $DIR/match_false_edges.rs:16:14: 16:15
+                                         // + literal: Const { ty: &std::option::Option<i32>, val: Unevaluated(DefId(0:5 ~ match_false_edges[317d]::full_tested_match[0]), [], Some(promoted[0])) }
+        _6 = &(((*_11) as Some).0: i32); // bb6[2]: scope 0 at $DIR/match_false_edges.rs:16:14: 16:15
+        _4 = &shallow _2;                // bb6[3]: scope 0 at $DIR/match_false_edges.rs:15:19: 15:27
+        StorageLive(_7);                 // bb6[4]: scope 0 at $DIR/match_false_edges.rs:16:20: 16:27
+        _7 = const guard() -> [return: bb7, unwind: bb1]; // bb6[5]: scope 0 at $DIR/match_false_edges.rs:16:20: 16:27
+                                         // ty::Const
+                                         // + ty: fn() -> bool {guard}
+                                         // + val: Value(Scalar(<ZST>))
+                                         // mir::Constant
+                                         // + span: $DIR/match_false_edges.rs:16:20: 16:25
+                                         // + literal: Const { ty: fn() -> bool {guard}, val: Value(Scalar(<ZST>)) }
+    }
+
+    bb7: {
+        switchInt(move _7) -> [false: bb9, otherwise: bb8]; // bb7[0]: scope 0 at $DIR/match_false_edges.rs:16:20: 16:27
+    }
+
+    bb8: {
+        StorageDead(_7);                 // bb8[0]: scope 0 at $DIR/match_false_edges.rs:16:37: 16:38
+        FakeRead(ForMatchGuard, _4);     // bb8[1]: scope 0 at $DIR/match_false_edges.rs:16:26: 16:27
+        FakeRead(ForGuardBinding, _6);   // bb8[2]: scope 0 at $DIR/match_false_edges.rs:16:26: 16:27
+        StorageLive(_5);                 // bb8[3]: scope 0 at $DIR/match_false_edges.rs:16:14: 16:15
+        _5 = ((_2 as Some).0: i32);      // bb8[4]: scope 0 at $DIR/match_false_edges.rs:16:14: 16:15
+        StorageLive(_8);                 // bb8[5]: scope 2 at $DIR/match_false_edges.rs:16:35: 16:36
+        _8 = _5;                         // bb8[6]: scope 2 at $DIR/match_false_edges.rs:16:35: 16:36
+        _1 = (const 1i32, move _8);      // bb8[7]: scope 2 at $DIR/match_false_edges.rs:16:31: 16:37
+                                         // ty::Const
+                                         // + ty: i32
+                                         // + val: Value(Scalar(0x00000001))
+                                         // mir::Constant
+                                         // + span: $DIR/match_false_edges.rs:16:32: 16:33
+                                         // + literal: Const { ty: i32, val: Value(Scalar(0x00000001)) }
+        StorageDead(_8);                 // bb8[8]: scope 2 at $DIR/match_false_edges.rs:16:36: 16:37
+        StorageDead(_5);                 // bb8[9]: scope 0 at $DIR/match_false_edges.rs:16:37: 16:38
+        StorageDead(_6);                 // bb8[10]: scope 0 at $DIR/match_false_edges.rs:16:37: 16:38
+        goto -> bb11;                    // bb8[11]: scope 0 at $DIR/match_false_edges.rs:15:13: 19:6
+    }
+
+    bb9: {
+        StorageDead(_7);                 // bb9[0]: scope 0 at $DIR/match_false_edges.rs:16:37: 16:38
+        StorageDead(_6);                 // bb9[1]: scope 0 at $DIR/match_false_edges.rs:16:37: 16:38
+        goto -> bb4;                     // bb9[2]: scope 0 at $DIR/match_false_edges.rs:16:20: 16:27
+    }
+
+    bb10: {
+        StorageLive(_9);                 // bb10[0]: scope 0 at $DIR/match_false_edges.rs:17:14: 17:15
+        _9 = ((_2 as Some).0: i32);      // bb10[1]: scope 0 at $DIR/match_false_edges.rs:17:14: 17:15
+        StorageLive(_10);                // bb10[2]: scope 3 at $DIR/match_false_edges.rs:17:24: 17:25
+        _10 = _9;                        // bb10[3]: scope 3 at $DIR/match_false_edges.rs:17:24: 17:25
+        _1 = (const 2i32, move _10);     // bb10[4]: scope 3 at $DIR/match_false_edges.rs:17:20: 17:26
+                                         // ty::Const
+                                         // + ty: i32
+                                         // + val: Value(Scalar(0x00000002))
+                                         // mir::Constant
+                                         // + span: $DIR/match_false_edges.rs:17:21: 17:22
+                                         // + literal: Const { ty: i32, val: Value(Scalar(0x00000002)) }
+        StorageDead(_10);                // bb10[5]: scope 3 at $DIR/match_false_edges.rs:17:25: 17:26
+        StorageDead(_9);                 // bb10[6]: scope 0 at $DIR/match_false_edges.rs:17:26: 17:27
+        goto -> bb11;                    // bb10[7]: scope 0 at $DIR/match_false_edges.rs:15:13: 19:6
+    }
+
+    bb11: {
+        StorageDead(_2);                 // bb11[0]: scope 0 at $DIR/match_false_edges.rs:19:6: 19:7
+        StorageDead(_1);                 // bb11[1]: scope 0 at $DIR/match_false_edges.rs:19:6: 19:7
+        _0 = ();                         // bb11[2]: scope 0 at $DIR/match_false_edges.rs:14:28: 20:2
+        return;                          // bb11[3]: scope 0 at $DIR/match_false_edges.rs:20:2: 20:2
+    }
+}
diff --git a/src/test/mir-opt/match_false_edges/rustc.full_tested_match2.PromoteTemps.before.mir b/src/test/mir-opt/match_false_edges/rustc.full_tested_match2.PromoteTemps.before.mir
new file mode 100644
index 00000000000..cc1fa562645
--- /dev/null
+++ b/src/test/mir-opt/match_false_edges/rustc.full_tested_match2.PromoteTemps.before.mir
@@ -0,0 +1,141 @@
+// MIR for `full_tested_match2` before PromoteTemps
+
+fn full_tested_match2() -> () {
+    let mut _0: ();                      // return place in scope 0 at $DIR/match_false_edges.rs:25:29: 25:29
+    let mut _1: (i32, i32);              // in scope 0 at $DIR/match_false_edges.rs:26:13: 30:6
+    let mut _2: std::option::Option<i32>; // in scope 0 at $DIR/match_false_edges.rs:26:19: 26:27
+    let mut _3: isize;                   // in scope 0 at $DIR/match_false_edges.rs:27:9: 27:16
+    let mut _4: &std::option::Option<i32>; // in scope 0 at $DIR/match_false_edges.rs:26:19: 26:27
+    let _5: i32;                         // in scope 0 at $DIR/match_false_edges.rs:27:14: 27:15
+    let _6: &i32;                        // in scope 0 at $DIR/match_false_edges.rs:27:14: 27:15
+    let mut _7: bool;                    // in scope 0 at $DIR/match_false_edges.rs:27:20: 27:27
+    let mut _8: i32;                     // in scope 0 at $DIR/match_false_edges.rs:27:35: 27:36
+    let _9: i32;                         // in scope 0 at $DIR/match_false_edges.rs:29:14: 29:15
+    let mut _10: i32;                    // in scope 0 at $DIR/match_false_edges.rs:29:24: 29:25
+    scope 1 {
+    }
+    scope 2 {
+        debug x => _5;                   // in scope 2 at $DIR/match_false_edges.rs:27:14: 27:15
+        debug x => _6;                   // in scope 2 at $DIR/match_false_edges.rs:27:14: 27:15
+    }
+    scope 3 {
+        debug y => _9;                   // in scope 3 at $DIR/match_false_edges.rs:29:14: 29:15
+    }
+
+    bb0: {
+        StorageLive(_1);                 // bb0[0]: scope 0 at $DIR/match_false_edges.rs:26:13: 30:6
+        StorageLive(_2);                 // bb0[1]: scope 0 at $DIR/match_false_edges.rs:26:19: 26:27
+        _2 = std::option::Option::<i32>::Some(const 42i32,); // bb0[2]: scope 0 at $DIR/match_false_edges.rs:26:19: 26:27
+                                         // ty::Const
+                                         // + ty: i32
+                                         // + val: Value(Scalar(0x0000002a))
+                                         // mir::Constant
+                                         // + span: $DIR/match_false_edges.rs:26:24: 26:26
+                                         // + literal: Const { ty: i32, val: Value(Scalar(0x0000002a)) }
+        FakeRead(ForMatchedPlace, _2);   // bb0[3]: scope 0 at $DIR/match_false_edges.rs:26:19: 26:27
+        _3 = discriminant(_2);           // bb0[4]: scope 0 at $DIR/match_false_edges.rs:27:9: 27:16
+        switchInt(move _3) -> [0isize: bb2, 1isize: bb3, otherwise: bb5]; // bb0[5]: scope 0 at $DIR/match_false_edges.rs:27:9: 27:16
+    }
+
+    bb1 (cleanup): {
+        resume;                          // bb1[0]: scope 0 at $DIR/match_false_edges.rs:25:1: 31:2
+    }
+
+    bb2: {
+        falseEdges -> [real: bb10, imaginary: bb4]; // bb2[0]: scope 0 at $DIR/match_false_edges.rs:28:9: 28:13
+    }
+
+    bb3: {
+        falseEdges -> [real: bb6, imaginary: bb2]; // bb3[0]: scope 0 at $DIR/match_false_edges.rs:27:9: 27:16
+    }
+
+    bb4: {
+        StorageLive(_9);                 // bb4[0]: scope 0 at $DIR/match_false_edges.rs:29:14: 29:15
+        _9 = ((_2 as Some).0: i32);      // bb4[1]: scope 0 at $DIR/match_false_edges.rs:29:14: 29:15
+        StorageLive(_10);                // bb4[2]: scope 3 at $DIR/match_false_edges.rs:29:24: 29:25
+        _10 = _9;                        // bb4[3]: scope 3 at $DIR/match_false_edges.rs:29:24: 29:25
+        _1 = (const 2i32, move _10);     // bb4[4]: scope 3 at $DIR/match_false_edges.rs:29:20: 29:26
+                                         // ty::Const
+                                         // + ty: i32
+                                         // + val: Value(Scalar(0x00000002))
+                                         // mir::Constant
+                                         // + span: $DIR/match_false_edges.rs:29:21: 29:22
+                                         // + literal: Const { ty: i32, val: Value(Scalar(0x00000002)) }
+        StorageDead(_10);                // bb4[5]: scope 3 at $DIR/match_false_edges.rs:29:25: 29:26
+        StorageDead(_9);                 // bb4[6]: scope 0 at $DIR/match_false_edges.rs:29:26: 29:27
+        goto -> bb11;                    // bb4[7]: scope 0 at $DIR/match_false_edges.rs:26:13: 30:6
+    }
+
+    bb5: {
+        unreachable;                     // bb5[0]: scope 0 at $DIR/match_false_edges.rs:26:19: 26:27
+    }
+
+    bb6: {
+        StorageLive(_6);                 // bb6[0]: scope 0 at $DIR/match_false_edges.rs:27:14: 27:15
+        _6 = &((_2 as Some).0: i32);     // bb6[1]: scope 0 at $DIR/match_false_edges.rs:27:14: 27:15
+        _4 = &shallow _2;                // bb6[2]: scope 0 at $DIR/match_false_edges.rs:26:19: 26:27
+        StorageLive(_7);                 // bb6[3]: scope 0 at $DIR/match_false_edges.rs:27:20: 27:27
+        _7 = const guard() -> [return: bb7, unwind: bb1]; // bb6[4]: scope 0 at $DIR/match_false_edges.rs:27:20: 27:27
+                                         // ty::Const
+                                         // + ty: fn() -> bool {guard}
+                                         // + val: Value(Scalar(<ZST>))
+                                         // mir::Constant
+                                         // + span: $DIR/match_false_edges.rs:27:20: 27:25
+                                         // + literal: Const { ty: fn() -> bool {guard}, val: Value(Scalar(<ZST>)) }
+    }
+
+    bb7: {
+        switchInt(move _7) -> [false: bb9, otherwise: bb8]; // bb7[0]: scope 0 at $DIR/match_false_edges.rs:27:20: 27:27
+    }
+
+    bb8: {
+        StorageDead(_7);                 // bb8[0]: scope 0 at $DIR/match_false_edges.rs:27:37: 27:38
+        FakeRead(ForMatchGuard, _4);     // bb8[1]: scope 0 at $DIR/match_false_edges.rs:27:26: 27:27
+        FakeRead(ForGuardBinding, _6);   // bb8[2]: scope 0 at $DIR/match_false_edges.rs:27:26: 27:27
+        StorageLive(_5);                 // bb8[3]: scope 0 at $DIR/match_false_edges.rs:27:14: 27:15
+        _5 = ((_2 as Some).0: i32);      // bb8[4]: scope 0 at $DIR/match_false_edges.rs:27:14: 27:15
+        StorageLive(_8);                 // bb8[5]: scope 2 at $DIR/match_false_edges.rs:27:35: 27:36
+        _8 = _5;                         // bb8[6]: scope 2 at $DIR/match_false_edges.rs:27:35: 27:36
+        _1 = (const 1i32, move _8);      // bb8[7]: scope 2 at $DIR/match_false_edges.rs:27:31: 27:37
+                                         // ty::Const
+                                         // + ty: i32
+                                         // + val: Value(Scalar(0x00000001))
+                                         // mir::Constant
+                                         // + span: $DIR/match_false_edges.rs:27:32: 27:33
+                                         // + literal: Const { ty: i32, val: Value(Scalar(0x00000001)) }
+        StorageDead(_8);                 // bb8[8]: scope 2 at $DIR/match_false_edges.rs:27:36: 27:37
+        StorageDead(_5);                 // bb8[9]: scope 0 at $DIR/match_false_edges.rs:27:37: 27:38
+        StorageDead(_6);                 // bb8[10]: scope 0 at $DIR/match_false_edges.rs:27:37: 27:38
+        goto -> bb11;                    // bb8[11]: scope 0 at $DIR/match_false_edges.rs:26:13: 30:6
+    }
+
+    bb9: {
+        StorageDead(_7);                 // bb9[0]: scope 0 at $DIR/match_false_edges.rs:27:37: 27:38
+        StorageDead(_6);                 // bb9[1]: scope 0 at $DIR/match_false_edges.rs:27:37: 27:38
+        falseEdges -> [real: bb4, imaginary: bb2]; // bb9[2]: scope 0 at $DIR/match_false_edges.rs:27:20: 27:27
+    }
+
+    bb10: {
+        _1 = (const 3i32, const 3i32);   // bb10[0]: scope 0 at $DIR/match_false_edges.rs:28:17: 28:23
+                                         // ty::Const
+                                         // + ty: i32
+                                         // + val: Value(Scalar(0x00000003))
+                                         // mir::Constant
+                                         // + span: $DIR/match_false_edges.rs:28:18: 28:19
+                                         // + literal: Const { ty: i32, val: Value(Scalar(0x00000003)) }
+                                         // ty::Const
+                                         // + ty: i32
+                                         // + val: Value(Scalar(0x00000003))
+                                         // mir::Constant
+                                         // + span: $DIR/match_false_edges.rs:28:21: 28:22
+                                         // + literal: Const { ty: i32, val: Value(Scalar(0x00000003)) }
+        goto -> bb11;                    // bb10[1]: scope 0 at $DIR/match_false_edges.rs:26:13: 30:6
+    }
+
+    bb11: {
+        StorageDead(_2);                 // bb11[0]: scope 0 at $DIR/match_false_edges.rs:30:6: 30:7
+        StorageDead(_1);                 // bb11[1]: scope 0 at $DIR/match_false_edges.rs:30:6: 30:7
+        _0 = ();                         // bb11[2]: scope 0 at $DIR/match_false_edges.rs:25:29: 31:2
+        return;                          // bb11[3]: scope 0 at $DIR/match_false_edges.rs:31:2: 31:2
+    }
+}
diff --git a/src/test/mir-opt/match_false_edges/rustc.main.PromoteTemps.before.mir b/src/test/mir-opt/match_false_edges/rustc.main.PromoteTemps.before.mir
new file mode 100644
index 00000000000..fce497df982
--- /dev/null
+++ b/src/test/mir-opt/match_false_edges/rustc.main.PromoteTemps.before.mir
@@ -0,0 +1,188 @@
+// MIR for `main` before PromoteTemps
+
+fn main() -> () {
+    let mut _0: ();                      // return place in scope 0 at $DIR/match_false_edges.rs:34:11: 34:11
+    let mut _1: i32;                     // in scope 0 at $DIR/match_false_edges.rs:35:13: 40:6
+    let mut _2: std::option::Option<i32>; // in scope 0 at $DIR/match_false_edges.rs:35:19: 35:26
+    let mut _3: isize;                   // in scope 0 at $DIR/match_false_edges.rs:38:9: 38:16
+    let mut _4: isize;                   // in scope 0 at $DIR/match_false_edges.rs:36:9: 36:17
+    let mut _5: &std::option::Option<i32>; // in scope 0 at $DIR/match_false_edges.rs:35:19: 35:26
+    let _6: i32;                         // in scope 0 at $DIR/match_false_edges.rs:36:14: 36:16
+    let _7: &i32;                        // in scope 0 at $DIR/match_false_edges.rs:36:14: 36:16
+    let mut _8: bool;                    // in scope 0 at $DIR/match_false_edges.rs:36:21: 36:28
+    let _9: std::option::Option<i32>;    // in scope 0 at $DIR/match_false_edges.rs:37:9: 37:11
+    let _10: i32;                        // in scope 0 at $DIR/match_false_edges.rs:38:14: 38:15
+    let _11: &i32;                       // in scope 0 at $DIR/match_false_edges.rs:38:14: 38:15
+    let mut _12: bool;                   // in scope 0 at $DIR/match_false_edges.rs:38:20: 38:29
+    let mut _13: i32;                    // in scope 0 at $DIR/match_false_edges.rs:38:27: 38:28
+    let _14: std::option::Option<i32>;   // in scope 0 at $DIR/match_false_edges.rs:39:9: 39:11
+    scope 1 {
+    }
+    scope 2 {
+        debug _w => _6;                  // in scope 2 at $DIR/match_false_edges.rs:36:14: 36:16
+        debug _w => _7;                  // in scope 2 at $DIR/match_false_edges.rs:36:14: 36:16
+    }
+    scope 3 {
+        debug _x => _9;                  // in scope 3 at $DIR/match_false_edges.rs:37:9: 37:11
+    }
+    scope 4 {
+        debug y => _10;                  // in scope 4 at $DIR/match_false_edges.rs:38:14: 38:15
+        debug y => _11;                  // in scope 4 at $DIR/match_false_edges.rs:38:14: 38:15
+    }
+    scope 5 {
+        debug _z => _14;                 // in scope 5 at $DIR/match_false_edges.rs:39:9: 39:11
+    }
+
+    bb0: {
+        StorageLive(_1);                 // bb0[0]: scope 0 at $DIR/match_false_edges.rs:35:13: 40:6
+        StorageLive(_2);                 // bb0[1]: scope 0 at $DIR/match_false_edges.rs:35:19: 35:26
+        _2 = std::option::Option::<i32>::Some(const 1i32,); // bb0[2]: scope 0 at $DIR/match_false_edges.rs:35:19: 35:26
+                                         // ty::Const
+                                         // + ty: i32
+                                         // + val: Value(Scalar(0x00000001))
+                                         // mir::Constant
+                                         // + span: $DIR/match_false_edges.rs:35:24: 35:25
+                                         // + literal: Const { ty: i32, val: Value(Scalar(0x00000001)) }
+        FakeRead(ForMatchedPlace, _2);   // bb0[3]: scope 0 at $DIR/match_false_edges.rs:35:19: 35:26
+        _4 = discriminant(_2);           // bb0[4]: scope 0 at $DIR/match_false_edges.rs:36:9: 36:17
+        switchInt(move _4) -> [1isize: bb3, otherwise: bb2]; // bb0[5]: scope 0 at $DIR/match_false_edges.rs:36:9: 36:17
+    }
+
+    bb1 (cleanup): {
+        resume;                          // bb1[0]: scope 0 at $DIR/match_false_edges.rs:34:1: 41:2
+    }
+
+    bb2: {
+        falseEdges -> [real: bb10, imaginary: bb5]; // bb2[0]: scope 0 at $DIR/match_false_edges.rs:37:9: 37:11
+    }
+
+    bb3: {
+        falseEdges -> [real: bb6, imaginary: bb2]; // bb3[0]: scope 0 at $DIR/match_false_edges.rs:36:9: 36:17
+    }
+
+    bb4: {
+        StorageLive(_14);                // bb4[0]: scope 0 at $DIR/match_false_edges.rs:39:9: 39:11
+        _14 = _2;                        // bb4[1]: scope 0 at $DIR/match_false_edges.rs:39:9: 39:11
+        _1 = const 4i32;                 // bb4[2]: scope 5 at $DIR/match_false_edges.rs:39:15: 39:16
+                                         // ty::Const
+                                         // + ty: i32
+                                         // + val: Value(Scalar(0x00000004))
+                                         // mir::Constant
+                                         // + span: $DIR/match_false_edges.rs:39:15: 39:16
+                                         // + literal: Const { ty: i32, val: Value(Scalar(0x00000004)) }
+        StorageDead(_14);                // bb4[3]: scope 0 at $DIR/match_false_edges.rs:39:16: 39:17
+        goto -> bb15;                    // bb4[4]: scope 0 at $DIR/match_false_edges.rs:35:13: 40:6
+    }
+
+    bb5: {
+        falseEdges -> [real: bb11, imaginary: bb4]; // bb5[0]: scope 0 at $DIR/match_false_edges.rs:38:9: 38:16
+    }
+
+    bb6: {
+        StorageLive(_7);                 // bb6[0]: scope 0 at $DIR/match_false_edges.rs:36:14: 36:16
+        _7 = &((_2 as Some).0: i32);     // bb6[1]: scope 0 at $DIR/match_false_edges.rs:36:14: 36:16
+        _5 = &shallow _2;                // bb6[2]: scope 0 at $DIR/match_false_edges.rs:35:19: 35:26
+        StorageLive(_8);                 // bb6[3]: scope 0 at $DIR/match_false_edges.rs:36:21: 36:28
+        _8 = const guard() -> [return: bb7, unwind: bb1]; // bb6[4]: scope 0 at $DIR/match_false_edges.rs:36:21: 36:28
+                                         // ty::Const
+                                         // + ty: fn() -> bool {guard}
+                                         // + val: Value(Scalar(<ZST>))
+                                         // mir::Constant
+                                         // + span: $DIR/match_false_edges.rs:36:21: 36:26
+                                         // + literal: Const { ty: fn() -> bool {guard}, val: Value(Scalar(<ZST>)) }
+    }
+
+    bb7: {
+        switchInt(move _8) -> [false: bb9, otherwise: bb8]; // bb7[0]: scope 0 at $DIR/match_false_edges.rs:36:21: 36:28
+    }
+
+    bb8: {
+        StorageDead(_8);                 // bb8[0]: scope 0 at $DIR/match_false_edges.rs:36:33: 36:34
+        FakeRead(ForMatchGuard, _5);     // bb8[1]: scope 0 at $DIR/match_false_edges.rs:36:27: 36:28
+        FakeRead(ForGuardBinding, _7);   // bb8[2]: scope 0 at $DIR/match_false_edges.rs:36:27: 36:28
+        StorageLive(_6);                 // bb8[3]: scope 0 at $DIR/match_false_edges.rs:36:14: 36:16
+        _6 = ((_2 as Some).0: i32);      // bb8[4]: scope 0 at $DIR/match_false_edges.rs:36:14: 36:16
+        _1 = const 1i32;                 // bb8[5]: scope 2 at $DIR/match_false_edges.rs:36:32: 36:33
+                                         // ty::Const
+                                         // + ty: i32
+                                         // + val: Value(Scalar(0x00000001))
+                                         // mir::Constant
+                                         // + span: $DIR/match_false_edges.rs:36:32: 36:33
+                                         // + literal: Const { ty: i32, val: Value(Scalar(0x00000001)) }
+        StorageDead(_6);                 // bb8[6]: scope 0 at $DIR/match_false_edges.rs:36:33: 36:34
+        StorageDead(_7);                 // bb8[7]: scope 0 at $DIR/match_false_edges.rs:36:33: 36:34
+        goto -> bb15;                    // bb8[8]: scope 0 at $DIR/match_false_edges.rs:35:13: 40:6
+    }
+
+    bb9: {
+        StorageDead(_8);                 // bb9[0]: scope 0 at $DIR/match_false_edges.rs:36:33: 36:34
+        StorageDead(_7);                 // bb9[1]: scope 0 at $DIR/match_false_edges.rs:36:33: 36:34
+        falseEdges -> [real: bb2, imaginary: bb2]; // bb9[2]: scope 0 at $DIR/match_false_edges.rs:36:21: 36:28
+    }
+
+    bb10: {
+        StorageLive(_9);                 // bb10[0]: scope 0 at $DIR/match_false_edges.rs:37:9: 37:11
+        _9 = _2;                         // bb10[1]: scope 0 at $DIR/match_false_edges.rs:37:9: 37:11
+        _1 = const 2i32;                 // bb10[2]: scope 3 at $DIR/match_false_edges.rs:37:15: 37:16
+                                         // ty::Const
+                                         // + ty: i32
+                                         // + val: Value(Scalar(0x00000002))
+                                         // mir::Constant
+                                         // + span: $DIR/match_false_edges.rs:37:15: 37:16
+                                         // + literal: Const { ty: i32, val: Value(Scalar(0x00000002)) }
+        StorageDead(_9);                 // bb10[3]: scope 0 at $DIR/match_false_edges.rs:37:16: 37:17
+        goto -> bb15;                    // bb10[4]: scope 0 at $DIR/match_false_edges.rs:35:13: 40:6
+    }
+
+    bb11: {
+        StorageLive(_11);                // bb11[0]: scope 0 at $DIR/match_false_edges.rs:38:14: 38:15
+        _11 = &((_2 as Some).0: i32);    // bb11[1]: scope 0 at $DIR/match_false_edges.rs:38:14: 38:15
+        _5 = &shallow _2;                // bb11[2]: scope 0 at $DIR/match_false_edges.rs:35:19: 35:26
+        StorageLive(_12);                // bb11[3]: scope 0 at $DIR/match_false_edges.rs:38:20: 38:29
+        StorageLive(_13);                // bb11[4]: scope 0 at $DIR/match_false_edges.rs:38:27: 38:28
+        _13 = (*_11);                    // bb11[5]: scope 0 at $DIR/match_false_edges.rs:38:27: 38:28
+        _12 = const guard2(move _13) -> [return: bb12, unwind: bb1]; // bb11[6]: scope 0 at $DIR/match_false_edges.rs:38:20: 38:29
+                                         // ty::Const
+                                         // + ty: fn(i32) -> bool {guard2}
+                                         // + val: Value(Scalar(<ZST>))
+                                         // mir::Constant
+                                         // + span: $DIR/match_false_edges.rs:38:20: 38:26
+                                         // + literal: Const { ty: fn(i32) -> bool {guard2}, val: Value(Scalar(<ZST>)) }
+    }
+
+    bb12: {
+        StorageDead(_13);                // bb12[0]: scope 0 at $DIR/match_false_edges.rs:38:28: 38:29
+        switchInt(move _12) -> [false: bb14, otherwise: bb13]; // bb12[1]: scope 0 at $DIR/match_false_edges.rs:38:20: 38:29
+    }
+
+    bb13: {
+        StorageDead(_12);                // bb13[0]: scope 0 at $DIR/match_false_edges.rs:38:34: 38:35
+        FakeRead(ForMatchGuard, _5);     // bb13[1]: scope 0 at $DIR/match_false_edges.rs:38:28: 38:29
+        FakeRead(ForGuardBinding, _11);  // bb13[2]: scope 0 at $DIR/match_false_edges.rs:38:28: 38:29
+        StorageLive(_10);                // bb13[3]: scope 0 at $DIR/match_false_edges.rs:38:14: 38:15
+        _10 = ((_2 as Some).0: i32);     // bb13[4]: scope 0 at $DIR/match_false_edges.rs:38:14: 38:15
+        _1 = const 3i32;                 // bb13[5]: scope 4 at $DIR/match_false_edges.rs:38:33: 38:34
+                                         // ty::Const
+                                         // + ty: i32
+                                         // + val: Value(Scalar(0x00000003))
+                                         // mir::Constant
+                                         // + span: $DIR/match_false_edges.rs:38:33: 38:34
+                                         // + literal: Const { ty: i32, val: Value(Scalar(0x00000003)) }
+        StorageDead(_10);                // bb13[6]: scope 0 at $DIR/match_false_edges.rs:38:34: 38:35
+        StorageDead(_11);                // bb13[7]: scope 0 at $DIR/match_false_edges.rs:38:34: 38:35
+        goto -> bb15;                    // bb13[8]: scope 0 at $DIR/match_false_edges.rs:35:13: 40:6
+    }
+
+    bb14: {
+        StorageDead(_12);                // bb14[0]: scope 0 at $DIR/match_false_edges.rs:38:34: 38:35
+        StorageDead(_11);                // bb14[1]: scope 0 at $DIR/match_false_edges.rs:38:34: 38:35
+        falseEdges -> [real: bb4, imaginary: bb4]; // bb14[2]: scope 0 at $DIR/match_false_edges.rs:38:20: 38:29
+    }
+
+    bb15: {
+        StorageDead(_2);                 // bb15[0]: scope 0 at $DIR/match_false_edges.rs:40:6: 40:7
+        StorageDead(_1);                 // bb15[1]: scope 0 at $DIR/match_false_edges.rs:40:6: 40:7
+        _0 = ();                         // bb15[2]: scope 0 at $DIR/match_false_edges.rs:34:11: 41:2
+        return;                          // bb15[3]: scope 0 at $DIR/match_false_edges.rs:41:2: 41:2
+    }
+}
diff --git a/src/test/mir-opt/match_test.rs b/src/test/mir-opt/match_test.rs
index 5ee3e1447d8..c3b07d42f5e 100644
--- a/src/test/mir-opt/match_test.rs
+++ b/src/test/mir-opt/match_test.rs
@@ -2,6 +2,7 @@
 
 #![feature(exclusive_range_pattern)]
 
+// EMIT_MIR rustc.main.SimplifyCfg-initial.after.mir
 fn main() {
     let x = 3;
     let b = true;
@@ -15,70 +16,3 @@ fn main() {
         _ => 3,
     };
 }
-
-// END RUST SOURCE
-// START rustc.main.SimplifyCfg-initial.after.mir
-//    bb0: {
-//        ...
-//        switchInt(move _6) -> [false: bb4, otherwise: bb1];
-//    }
-//    bb1: {
-//        _7 = Lt(_1, const 10i32);
-//        switchInt(move _7) -> [false: bb4, otherwise: bb2];
-//    }
-//    bb2: {
-//        falseEdges -> [real: bb9, imaginary: bb6];
-//    }
-//    bb3: {
-//        _3 = const 3i32;
-//        goto -> bb14;
-//    }
-//    bb4: {
-//        _4 = Le(const 10i32, _1);
-//        switchInt(move _4) -> [false: bb7, otherwise: bb5];
-//    }
-//    bb5: {
-//        _5 = Le(_1, const 20i32);
-//        switchInt(move _5) -> [false: bb7, otherwise: bb6];
-//    }
-//    bb6: {
-//        falseEdges -> [real: bb12, imaginary: bb8];
-//    }
-//    bb7: {
-//        switchInt(_1) -> [-1i32: bb8, otherwise: bb3];
-//    }
-//    bb8: {
-//        falseEdges -> [real: bb13, imaginary: bb3];
-//    }
-//    bb9: {
-//        _8 = &shallow _1;
-//        StorageLive(_9);
-//        _9 = _2;
-//        switchInt(move _9) -> [false: bb11, otherwise: bb10];
-//    }
-//    bb10: {
-//        StorageDead(_9);
-//        FakeRead(ForMatchGuard, _8);
-//        _3 = const 0i32;
-//        goto -> bb14;
-//    }
-//    bb11: {
-//        StorageDead(_9);
-//        falseEdges -> [real: bb3, imaginary: bb6];
-//    }
-//    bb12: {
-//        _3 = const 1i32;
-//        goto -> bb14;
-//    }
-//    bb13: {
-//        _3 = const 2i32;
-//        goto -> bb14;
-//    }
-//    bb14: {
-//        StorageDead(_3);
-//        _0 = ();
-//        StorageDead(_2);
-//        StorageDead(_1);
-//        return;
-//    }
-// END rustc.main.SimplifyCfg-initial.after.mir
diff --git a/src/test/mir-opt/match_test/rustc.main.SimplifyCfg-initial.after.mir b/src/test/mir-opt/match_test/rustc.main.SimplifyCfg-initial.after.mir
new file mode 100644
index 00000000000..ef5feb79bec
--- /dev/null
+++ b/src/test/mir-opt/match_test/rustc.main.SimplifyCfg-initial.after.mir
@@ -0,0 +1,166 @@
+// MIR for `main` after SimplifyCfg-initial
+
+fn main() -> () {
+    let mut _0: ();                      // return place in scope 0 at $DIR/match_test.rs:6:11: 6:11
+    let _1: i32;                         // in scope 0 at $DIR/match_test.rs:7:9: 7:10
+    let _3: i32;                         // in scope 0 at $DIR/match_test.rs:12:5: 17:6
+    let mut _4: bool;                    // in scope 0 at $DIR/match_test.rs:14:9: 14:16
+    let mut _5: bool;                    // in scope 0 at $DIR/match_test.rs:14:9: 14:16
+    let mut _6: bool;                    // in scope 0 at $DIR/match_test.rs:13:9: 13:14
+    let mut _7: bool;                    // in scope 0 at $DIR/match_test.rs:13:9: 13:14
+    let mut _8: &i32;                    // in scope 0 at $DIR/match_test.rs:12:11: 12:12
+    let mut _9: bool;                    // in scope 0 at $DIR/match_test.rs:13:18: 13:19
+    scope 1 {
+        debug x => _1;                   // in scope 1 at $DIR/match_test.rs:7:9: 7:10
+        let _2: bool;                    // in scope 1 at $DIR/match_test.rs:8:9: 8:10
+        scope 2 {
+            debug b => _2;               // in scope 2 at $DIR/match_test.rs:8:9: 8:10
+        }
+    }
+
+    bb0: {
+        StorageLive(_1);                 // bb0[0]: scope 0 at $DIR/match_test.rs:7:9: 7:10
+        _1 = const 3i32;                 // bb0[1]: scope 0 at $DIR/match_test.rs:7:13: 7:14
+                                         // ty::Const
+                                         // + ty: i32
+                                         // + val: Value(Scalar(0x00000003))
+                                         // mir::Constant
+                                         // + span: $DIR/match_test.rs:7:13: 7:14
+                                         // + literal: Const { ty: i32, val: Value(Scalar(0x00000003)) }
+        FakeRead(ForLet, _1);            // bb0[2]: scope 0 at $DIR/match_test.rs:7:9: 7:10
+        StorageLive(_2);                 // bb0[3]: scope 1 at $DIR/match_test.rs:8:9: 8:10
+        _2 = const true;                 // bb0[4]: scope 1 at $DIR/match_test.rs:8:13: 8:17
+                                         // ty::Const
+                                         // + ty: bool
+                                         // + val: Value(Scalar(0x01))
+                                         // mir::Constant
+                                         // + span: $DIR/match_test.rs:8:13: 8:17
+                                         // + literal: Const { ty: bool, val: Value(Scalar(0x01)) }
+        FakeRead(ForLet, _2);            // bb0[5]: scope 1 at $DIR/match_test.rs:8:9: 8:10
+        StorageLive(_3);                 // bb0[6]: scope 2 at $DIR/match_test.rs:12:5: 17:6
+        FakeRead(ForMatchedPlace, _1);   // bb0[7]: scope 2 at $DIR/match_test.rs:12:11: 12:12
+        _6 = Le(const 0i32, _1);         // bb0[8]: scope 2 at $DIR/match_test.rs:13:9: 13:14
+                                         // ty::Const
+                                         // + ty: i32
+                                         // + val: Value(Scalar(0x00000000))
+                                         // mir::Constant
+                                         // + span: $DIR/match_test.rs:13:9: 13:14
+                                         // + literal: Const { ty: i32, val: Value(Scalar(0x00000000)) }
+        switchInt(move _6) -> [false: bb4, otherwise: bb1]; // bb0[9]: scope 2 at $DIR/match_test.rs:13:9: 13:14
+    }
+
+    bb1: {
+        _7 = Lt(_1, const 10i32);        // bb1[0]: scope 2 at $DIR/match_test.rs:13:9: 13:14
+                                         // ty::Const
+                                         // + ty: i32
+                                         // + val: Value(Scalar(0x0000000a))
+                                         // mir::Constant
+                                         // + span: $DIR/match_test.rs:13:9: 13:14
+                                         // + literal: Const { ty: i32, val: Value(Scalar(0x0000000a)) }
+        switchInt(move _7) -> [false: bb4, otherwise: bb2]; // bb1[1]: scope 2 at $DIR/match_test.rs:13:9: 13:14
+    }
+
+    bb2: {
+        falseEdges -> [real: bb9, imaginary: bb6]; // bb2[0]: scope 2 at $DIR/match_test.rs:13:9: 13:14
+    }
+
+    bb3: {
+        _3 = const 3i32;                 // bb3[0]: scope 2 at $DIR/match_test.rs:16:14: 16:15
+                                         // ty::Const
+                                         // + ty: i32
+                                         // + val: Value(Scalar(0x00000003))
+                                         // mir::Constant
+                                         // + span: $DIR/match_test.rs:16:14: 16:15
+                                         // + literal: Const { ty: i32, val: Value(Scalar(0x00000003)) }
+        goto -> bb14;                    // bb3[1]: scope 2 at $DIR/match_test.rs:12:5: 17:6
+    }
+
+    bb4: {
+        _4 = Le(const 10i32, _1);        // bb4[0]: scope 2 at $DIR/match_test.rs:14:9: 14:16
+                                         // ty::Const
+                                         // + ty: i32
+                                         // + val: Value(Scalar(0x0000000a))
+                                         // mir::Constant
+                                         // + span: $DIR/match_test.rs:14:9: 14:16
+                                         // + literal: Const { ty: i32, val: Value(Scalar(0x0000000a)) }
+        switchInt(move _4) -> [false: bb7, otherwise: bb5]; // bb4[1]: scope 2 at $DIR/match_test.rs:14:9: 14:16
+    }
+
+    bb5: {
+        _5 = Le(_1, const 20i32);        // bb5[0]: scope 2 at $DIR/match_test.rs:14:9: 14:16
+                                         // ty::Const
+                                         // + ty: i32
+                                         // + val: Value(Scalar(0x00000014))
+                                         // mir::Constant
+                                         // + span: $DIR/match_test.rs:14:9: 14:16
+                                         // + literal: Const { ty: i32, val: Value(Scalar(0x00000014)) }
+        switchInt(move _5) -> [false: bb7, otherwise: bb6]; // bb5[1]: scope 2 at $DIR/match_test.rs:14:9: 14:16
+    }
+
+    bb6: {
+        falseEdges -> [real: bb12, imaginary: bb8]; // bb6[0]: scope 2 at $DIR/match_test.rs:14:9: 14:16
+    }
+
+    bb7: {
+        switchInt(_1) -> [-1i32: bb8, otherwise: bb3]; // bb7[0]: scope 2 at $DIR/match_test.rs:15:9: 15:11
+    }
+
+    bb8: {
+        falseEdges -> [real: bb13, imaginary: bb3]; // bb8[0]: scope 2 at $DIR/match_test.rs:15:9: 15:11
+    }
+
+    bb9: {
+        _8 = &shallow _1;                // bb9[0]: scope 2 at $DIR/match_test.rs:12:11: 12:12
+        StorageLive(_9);                 // bb9[1]: scope 2 at $DIR/match_test.rs:13:18: 13:19
+        _9 = _2;                         // bb9[2]: scope 2 at $DIR/match_test.rs:13:18: 13:19
+        switchInt(move _9) -> [false: bb11, otherwise: bb10]; // bb9[3]: scope 2 at $DIR/match_test.rs:13:18: 13:19
+    }
+
+    bb10: {
+        StorageDead(_9);                 // bb10[0]: scope 2 at $DIR/match_test.rs:13:24: 13:25
+        FakeRead(ForMatchGuard, _8);     // bb10[1]: scope 2 at $DIR/match_test.rs:13:18: 13:19
+        _3 = const 0i32;                 // bb10[2]: scope 2 at $DIR/match_test.rs:13:23: 13:24
+                                         // ty::Const
+                                         // + ty: i32
+                                         // + val: Value(Scalar(0x00000000))
+                                         // mir::Constant
+                                         // + span: $DIR/match_test.rs:13:23: 13:24
+                                         // + literal: Const { ty: i32, val: Value(Scalar(0x00000000)) }
+        goto -> bb14;                    // bb10[3]: scope 2 at $DIR/match_test.rs:12:5: 17:6
+    }
+
+    bb11: {
+        StorageDead(_9);                 // bb11[0]: scope 2 at $DIR/match_test.rs:13:24: 13:25
+        falseEdges -> [real: bb3, imaginary: bb6]; // bb11[1]: scope 2 at $DIR/match_test.rs:13:18: 13:19
+    }
+
+    bb12: {
+        _3 = const 1i32;                 // bb12[0]: scope 2 at $DIR/match_test.rs:14:20: 14:21
+                                         // ty::Const
+                                         // + ty: i32
+                                         // + val: Value(Scalar(0x00000001))
+                                         // mir::Constant
+                                         // + span: $DIR/match_test.rs:14:20: 14:21
+                                         // + literal: Const { ty: i32, val: Value(Scalar(0x00000001)) }
+        goto -> bb14;                    // bb12[1]: scope 2 at $DIR/match_test.rs:12:5: 17:6
+    }
+
+    bb13: {
+        _3 = const 2i32;                 // bb13[0]: scope 2 at $DIR/match_test.rs:15:15: 15:16
+                                         // ty::Const
+                                         // + ty: i32
+                                         // + val: Value(Scalar(0x00000002))
+                                         // mir::Constant
+                                         // + span: $DIR/match_test.rs:15:15: 15:16
+                                         // + literal: Const { ty: i32, val: Value(Scalar(0x00000002)) }
+        goto -> bb14;                    // bb13[1]: scope 2 at $DIR/match_test.rs:12:5: 17:6
+    }
+
+    bb14: {
+        StorageDead(_3);                 // bb14[0]: scope 2 at $DIR/match_test.rs:17:6: 17:7
+        _0 = ();                         // bb14[1]: scope 0 at $DIR/match_test.rs:6:11: 18:2
+        StorageDead(_2);                 // bb14[2]: scope 1 at $DIR/match_test.rs:18:1: 18:2
+        StorageDead(_1);                 // bb14[3]: scope 0 at $DIR/match_test.rs:18:1: 18:2
+        return;                          // bb14[4]: scope 0 at $DIR/match_test.rs:18:2: 18:2
+    }
+}
diff --git a/src/test/mir-opt/no-drop-for-inactive-variant.rs b/src/test/mir-opt/no-drop-for-inactive-variant.rs
index 74a606af28f..cf6426b878a 100644
--- a/src/test/mir-opt/no-drop-for-inactive-variant.rs
+++ b/src/test/mir-opt/no-drop-for-inactive-variant.rs
@@ -3,6 +3,7 @@
 // Ensure that there are no drop terminators in `unwrap<T>` (except the one along the cleanup
 // path).
 
+// EMIT_MIR rustc.unwrap.SimplifyCfg-elaborate-drops.after.mir
 fn unwrap<T>(opt: Option<T>) -> T {
     match opt {
         Some(x) => x,
@@ -13,31 +14,3 @@ fn unwrap<T>(opt: Option<T>) -> T {
 fn main() {
     let _ = unwrap(Some(1i32));
 }
-
-// END RUST SOURCE
-// START rustc.unwrap.SimplifyCfg-elaborate-drops.after.mir
-// fn unwrap(_1: std::option::Option<T>) -> T {
-//     ...
-//     bb0: {
-//         ...
-//         switchInt(move _2) -> [0isize: bb2, 1isize: bb4, otherwise: bb3];
-//     }
-//     bb1 (cleanup): {
-//         resume;
-//     }
-//     bb2: {
-//         ...
-//         const std::rt::begin_panic::<&str>(const "explicit panic") -> bb5;
-//     }
-//     bb3: {
-//         unreachable;
-//     }
-//     bb4: {
-//         ...
-//         return;
-//     }
-//     bb5 (cleanup): {
-//         drop(_1) -> bb1;
-//     }
-// }
-// END rustc.unwrap.SimplifyCfg-elaborate-drops.after.mir
diff --git a/src/test/mir-opt/no-drop-for-inactive-variant/rustc.unwrap.SimplifyCfg-elaborate-drops.after.mir b/src/test/mir-opt/no-drop-for-inactive-variant/rustc.unwrap.SimplifyCfg-elaborate-drops.after.mir
new file mode 100644
index 00000000000..b60d2d032d3
--- /dev/null
+++ b/src/test/mir-opt/no-drop-for-inactive-variant/rustc.unwrap.SimplifyCfg-elaborate-drops.after.mir
@@ -0,0 +1,57 @@
+// MIR for `unwrap` after SimplifyCfg-elaborate-drops
+
+fn unwrap(_1: std::option::Option<T>) -> T {
+    debug opt => _1;                     // in scope 0 at $DIR/no-drop-for-inactive-variant.rs:7:14: 7:17
+    let mut _0: T;                       // return place in scope 0 at $DIR/no-drop-for-inactive-variant.rs:7:33: 7:34
+    let mut _2: isize;                   // in scope 0 at $DIR/no-drop-for-inactive-variant.rs:9:9: 9:16
+    let _3: T;                           // in scope 0 at $DIR/no-drop-for-inactive-variant.rs:9:14: 9:15
+    let mut _4: !;                       // in scope 0 at $SRC_DIR/libstd/macros.rs:LL:COL: 13:52
+    let mut _5: isize;                   // in scope 0 at $DIR/no-drop-for-inactive-variant.rs:12:1: 12:2
+    let mut _6: isize;                   // in scope 0 at $DIR/no-drop-for-inactive-variant.rs:12:1: 12:2
+    scope 1 {
+        debug x => _3;                   // in scope 1 at $DIR/no-drop-for-inactive-variant.rs:9:14: 9:15
+    }
+
+    bb0: {
+        _2 = discriminant(_1);           // bb0[0]: scope 0 at $DIR/no-drop-for-inactive-variant.rs:9:9: 9:16
+        switchInt(move _2) -> [0isize: bb2, 1isize: bb4, otherwise: bb3]; // bb0[1]: scope 0 at $DIR/no-drop-for-inactive-variant.rs:9:9: 9:16
+    }
+
+    bb1 (cleanup): {
+        resume;                          // bb1[0]: scope 0 at $DIR/no-drop-for-inactive-variant.rs:7:1: 12:2
+    }
+
+    bb2: {
+        StorageLive(_4);                 // bb2[0]: scope 0 at $SRC_DIR/libstd/macros.rs:LL:COL: 13:52
+        const std::rt::begin_panic::<&str>(const "explicit panic") -> bb5; // bb2[1]: scope 0 at $SRC_DIR/libstd/macros.rs:LL:COL: 13:52
+                                         // ty::Const
+                                         // + ty: fn(&str) -> ! {std::rt::begin_panic::<&str>}
+                                         // + val: Value(Scalar(<ZST>))
+                                         // mir::Constant
+                                         // + span: $SRC_DIR/libstd/macros.rs:LL:COL: 13:46
+                                         // + literal: Const { ty: fn(&str) -> ! {std::rt::begin_panic::<&str>}, val: Value(Scalar(<ZST>)) }
+                                         // ty::Const
+                                         // + ty: &str
+                                         // + val: Value(Slice { data: Allocation { bytes: [101, 120, 112, 108, 105, 99, 105, 116, 32, 112, 97, 110, 105, 99], relocations: Relocations(SortedMap { data: [] }), undef_mask: UndefMask { blocks: [16383], len: Size { raw: 14 } }, size: Size { raw: 14 }, align: Align { pow2: 0 }, mutability: Not, extra: () }, start: 0, end: 14 })
+                                         // mir::Constant
+                                         // + span: $SRC_DIR/libstd/macros.rs:LL:COL: 12:45
+                                         // + literal: Const { ty: &str, val: Value(Slice { data: Allocation { bytes: [101, 120, 112, 108, 105, 99, 105, 116, 32, 112, 97, 110, 105, 99], relocations: Relocations(SortedMap { data: [] }), undef_mask: UndefMask { blocks: [16383], len: Size { raw: 14 } }, size: Size { raw: 14 }, align: Align { pow2: 0 }, mutability: Not, extra: () }, start: 0, end: 14 }) }
+    }
+
+    bb3: {
+        unreachable;                     // bb3[0]: scope 0 at $DIR/no-drop-for-inactive-variant.rs:8:11: 8:14
+    }
+
+    bb4: {
+        StorageLive(_3);                 // bb4[0]: scope 0 at $DIR/no-drop-for-inactive-variant.rs:9:14: 9:15
+        _3 = move ((_1 as Some).0: T);   // bb4[1]: scope 0 at $DIR/no-drop-for-inactive-variant.rs:9:14: 9:15
+        _0 = move _3;                    // bb4[2]: scope 1 at $DIR/no-drop-for-inactive-variant.rs:9:20: 9:21
+        StorageDead(_3);                 // bb4[3]: scope 0 at $DIR/no-drop-for-inactive-variant.rs:9:21: 9:22
+        _5 = discriminant(_1);           // bb4[4]: scope 0 at $DIR/no-drop-for-inactive-variant.rs:12:1: 12:2
+        return;                          // bb4[5]: scope 0 at $DIR/no-drop-for-inactive-variant.rs:12:2: 12:2
+    }
+
+    bb5 (cleanup): {
+        drop(_1) -> bb1;                 // bb5[0]: scope 0 at $DIR/no-drop-for-inactive-variant.rs:12:1: 12:2
+    }
+}
diff --git a/src/test/mir-opt/no-spurious-drop-after-call.rs b/src/test/mir-opt/no-spurious-drop-after-call.rs
index 782bc31186c..ab58654e07c 100644
--- a/src/test/mir-opt/no-spurious-drop-after-call.rs
+++ b/src/test/mir-opt/no-spurious-drop-after-call.rs
@@ -4,21 +4,7 @@
 // MIR drop of the argument. (We used to have a `DROP(_2)` in the code
 // below, as part of bb3.)
 
+// EMIT_MIR rustc.main.ElaborateDrops.before.mir
 fn main() {
     std::mem::drop("".to_string());
 }
-
-// END RUST SOURCE
-// START rustc.main.ElaborateDrops.before.mir
-//    bb2: {
-//        StorageDead(_3);
-//        _1 = const std::mem::drop::<std::string::String>(move _2) -> [return: bb3, unwind: bb4];
-//    }
-//    bb3: {
-//        StorageDead(_2);
-//        StorageDead(_4);
-//        StorageDead(_1);
-//        _0 = ();
-//        return;
-//    }
-// END rustc.main.ElaborateDrops.before.mir
diff --git a/src/test/mir-opt/no-spurious-drop-after-call/rustc.main.ElaborateDrops.before.mir b/src/test/mir-opt/no-spurious-drop-after-call/rustc.main.ElaborateDrops.before.mir
new file mode 100644
index 00000000000..b65bc760330
--- /dev/null
+++ b/src/test/mir-opt/no-spurious-drop-after-call/rustc.main.ElaborateDrops.before.mir
@@ -0,0 +1,58 @@
+// MIR for `main` before ElaborateDrops
+
+fn main() -> () {
+    let mut _0: ();                      // return place in scope 0 at $DIR/no-spurious-drop-after-call.rs:8:11: 8:11
+    let _1: ();                          // in scope 0 at $DIR/no-spurious-drop-after-call.rs:9:5: 9:35
+    let mut _2: std::string::String;     // in scope 0 at $DIR/no-spurious-drop-after-call.rs:9:20: 9:34
+    let mut _3: &str;                    // in scope 0 at $DIR/no-spurious-drop-after-call.rs:9:20: 9:22
+    let _4: &str;                        // in scope 0 at $DIR/no-spurious-drop-after-call.rs:9:20: 9:22
+
+    bb0: {
+        StorageLive(_1);                 // bb0[0]: scope 0 at $DIR/no-spurious-drop-after-call.rs:9:5: 9:35
+        StorageLive(_2);                 // bb0[1]: scope 0 at $DIR/no-spurious-drop-after-call.rs:9:20: 9:34
+        StorageLive(_3);                 // bb0[2]: scope 0 at $DIR/no-spurious-drop-after-call.rs:9:20: 9:22
+        StorageLive(_4);                 // bb0[3]: scope 0 at $DIR/no-spurious-drop-after-call.rs:9:20: 9:22
+        _4 = const "";                   // bb0[4]: scope 0 at $DIR/no-spurious-drop-after-call.rs:9:20: 9:22
+                                         // ty::Const
+                                         // + ty: &str
+                                         // + val: Value(Slice { data: Allocation { bytes: [], relocations: Relocations(SortedMap { data: [] }), undef_mask: UndefMask { blocks: [], len: Size { raw: 0 } }, size: Size { raw: 0 }, align: Align { pow2: 0 }, mutability: Not, extra: () }, start: 0, end: 0 })
+                                         // mir::Constant
+                                         // + span: $DIR/no-spurious-drop-after-call.rs:9:20: 9:22
+                                         // + literal: Const { ty: &str, val: Value(Slice { data: Allocation { bytes: [], relocations: Relocations(SortedMap { data: [] }), undef_mask: UndefMask { blocks: [], len: Size { raw: 0 } }, size: Size { raw: 0 }, align: Align { pow2: 0 }, mutability: Not, extra: () }, start: 0, end: 0 }) }
+        _3 = &(*_4);                     // bb0[5]: scope 0 at $DIR/no-spurious-drop-after-call.rs:9:20: 9:22
+        _2 = const <str as std::string::ToString>::to_string(move _3) -> bb2; // bb0[6]: scope 0 at $DIR/no-spurious-drop-after-call.rs:9:20: 9:34
+                                         // ty::Const
+                                         // + ty: for<'r> fn(&'r str) -> std::string::String {<str as std::string::ToString>::to_string}
+                                         // + val: Value(Scalar(<ZST>))
+                                         // mir::Constant
+                                         // + span: $DIR/no-spurious-drop-after-call.rs:9:23: 9:32
+                                         // + literal: Const { ty: for<'r> fn(&'r str) -> std::string::String {<str as std::string::ToString>::to_string}, val: Value(Scalar(<ZST>)) }
+    }
+
+    bb1 (cleanup): {
+        resume;                          // bb1[0]: scope 0 at $DIR/no-spurious-drop-after-call.rs:8:1: 10:2
+    }
+
+    bb2: {
+        StorageDead(_3);                 // bb2[0]: scope 0 at $DIR/no-spurious-drop-after-call.rs:9:33: 9:34
+        _1 = const std::mem::drop::<std::string::String>(move _2) -> [return: bb3, unwind: bb4]; // bb2[1]: scope 0 at $DIR/no-spurious-drop-after-call.rs:9:5: 9:35
+                                         // ty::Const
+                                         // + ty: fn(std::string::String) {std::mem::drop::<std::string::String>}
+                                         // + val: Value(Scalar(<ZST>))
+                                         // mir::Constant
+                                         // + span: $DIR/no-spurious-drop-after-call.rs:9:5: 9:19
+                                         // + literal: Const { ty: fn(std::string::String) {std::mem::drop::<std::string::String>}, val: Value(Scalar(<ZST>)) }
+    }
+
+    bb3: {
+        StorageDead(_2);                 // bb3[0]: scope 0 at $DIR/no-spurious-drop-after-call.rs:9:34: 9:35
+        StorageDead(_4);                 // bb3[1]: scope 0 at $DIR/no-spurious-drop-after-call.rs:9:35: 9:36
+        StorageDead(_1);                 // bb3[2]: scope 0 at $DIR/no-spurious-drop-after-call.rs:9:35: 9:36
+        _0 = ();                         // bb3[3]: scope 0 at $DIR/no-spurious-drop-after-call.rs:8:11: 10:2
+        return;                          // bb3[4]: scope 0 at $DIR/no-spurious-drop-after-call.rs:10:2: 10:2
+    }
+
+    bb4 (cleanup): {
+        drop(_2) -> bb1;                 // bb4[0]: scope 0 at $DIR/no-spurious-drop-after-call.rs:9:34: 9:35
+    }
+}
diff --git a/src/test/mir-opt/packed-struct-drop-aligned.rs b/src/test/mir-opt/packed-struct-drop-aligned.rs
index 39b90060179..7178c74df51 100644
--- a/src/test/mir-opt/packed-struct-drop-aligned.rs
+++ b/src/test/mir-opt/packed-struct-drop-aligned.rs
@@ -1,5 +1,6 @@
 // ignore-wasm32-bare compiled with panic=abort by default
 
+// EMIT_MIR rustc.main.SimplifyCfg-elaborate-drops.after.mir
 fn main() {
     let mut x = Packed(Aligned(Droppy(0)));
     x.0 = Aligned(Droppy(0));
@@ -13,47 +14,3 @@ struct Droppy(usize);
 impl Drop for Droppy {
     fn drop(&mut self) {}
 }
-
-// END RUST SOURCE
-// START rustc.main.SimplifyCfg-elaborate-drops.after.mir
-// fn main() -> () {
-//     let mut _0: ();
-//     let mut _1: Packed;
-//     let mut _2: Aligned;
-//     let mut _3: Droppy;
-//     let mut _4: Aligned;
-//     let mut _5: Droppy;
-//     let mut _6: Aligned;
-//     scope 1 {
-//         debug x => _1;
-//     }
-//
-//     bb0: {
-//         StorageLive(_1);
-//         ...
-//         _1 = Packed(move _2,);
-//         ...
-//         StorageLive(_6);
-//         _6 = move (_1.0: Aligned);
-//         drop(_6) -> [return: bb4, unwind: bb3];
-//     }
-//     bb1 (cleanup): {
-//         resume;
-//     }
-//     bb2: {
-//         StorageDead(_1);
-//         return;
-//     }
-//     bb3 (cleanup): {
-//         (_1.0: Aligned) = move _4;
-//         drop(_1) -> bb1;
-//     }
-//     bb4: {
-//         StorageDead(_6);
-//         (_1.0: Aligned) = move _4;
-//         StorageDead(_4);
-//         _0 = ();
-//         drop(_1) -> [return: bb2, unwind: bb1];
-//     }
-// }
-// END rustc.main.SimplifyCfg-elaborate-drops.after.mir
diff --git a/src/test/mir-opt/packed-struct-drop-aligned/rustc.main.SimplifyCfg-elaborate-drops.after.mir b/src/test/mir-opt/packed-struct-drop-aligned/rustc.main.SimplifyCfg-elaborate-drops.after.mir
new file mode 100644
index 00000000000..e8d19b30263
--- /dev/null
+++ b/src/test/mir-opt/packed-struct-drop-aligned/rustc.main.SimplifyCfg-elaborate-drops.after.mir
@@ -0,0 +1,67 @@
+// MIR for `main` after SimplifyCfg-elaborate-drops
+
+fn main() -> () {
+    let mut _0: ();                      // return place in scope 0 at $DIR/packed-struct-drop-aligned.rs:4:11: 4:11
+    let mut _1: Packed;                  // in scope 0 at $DIR/packed-struct-drop-aligned.rs:5:9: 5:14
+    let mut _2: Aligned;                 // in scope 0 at $DIR/packed-struct-drop-aligned.rs:5:24: 5:42
+    let mut _3: Droppy;                  // in scope 0 at $DIR/packed-struct-drop-aligned.rs:5:32: 5:41
+    let mut _4: Aligned;                 // in scope 0 at $DIR/packed-struct-drop-aligned.rs:6:11: 6:29
+    let mut _5: Droppy;                  // in scope 0 at $DIR/packed-struct-drop-aligned.rs:6:19: 6:28
+    let mut _6: Aligned;                 // in scope 0 at $DIR/packed-struct-drop-aligned.rs:6:5: 6:8
+    scope 1 {
+        debug x => _1;                   // in scope 1 at $DIR/packed-struct-drop-aligned.rs:5:9: 5:14
+    }
+
+    bb0: {
+        StorageLive(_1);                 // bb0[0]: scope 0 at $DIR/packed-struct-drop-aligned.rs:5:9: 5:14
+        StorageLive(_2);                 // bb0[1]: scope 0 at $DIR/packed-struct-drop-aligned.rs:5:24: 5:42
+        StorageLive(_3);                 // bb0[2]: scope 0 at $DIR/packed-struct-drop-aligned.rs:5:32: 5:41
+        _3 = Droppy(const 0usize,);      // bb0[3]: scope 0 at $DIR/packed-struct-drop-aligned.rs:5:32: 5:41
+                                         // ty::Const
+                                         // + ty: usize
+                                         // + val: Value(Scalar(0x0000000000000000))
+                                         // mir::Constant
+                                         // + span: $DIR/packed-struct-drop-aligned.rs:5:39: 5:40
+                                         // + literal: Const { ty: usize, val: Value(Scalar(0x0000000000000000)) }
+        _2 = Aligned(move _3,);          // bb0[4]: scope 0 at $DIR/packed-struct-drop-aligned.rs:5:24: 5:42
+        StorageDead(_3);                 // bb0[5]: scope 0 at $DIR/packed-struct-drop-aligned.rs:5:41: 5:42
+        _1 = Packed(move _2,);           // bb0[6]: scope 0 at $DIR/packed-struct-drop-aligned.rs:5:17: 5:43
+        StorageDead(_2);                 // bb0[7]: scope 0 at $DIR/packed-struct-drop-aligned.rs:5:42: 5:43
+        StorageLive(_4);                 // bb0[8]: scope 1 at $DIR/packed-struct-drop-aligned.rs:6:11: 6:29
+        StorageLive(_5);                 // bb0[9]: scope 1 at $DIR/packed-struct-drop-aligned.rs:6:19: 6:28
+        _5 = Droppy(const 0usize,);      // bb0[10]: scope 1 at $DIR/packed-struct-drop-aligned.rs:6:19: 6:28
+                                         // ty::Const
+                                         // + ty: usize
+                                         // + val: Value(Scalar(0x0000000000000000))
+                                         // mir::Constant
+                                         // + span: $DIR/packed-struct-drop-aligned.rs:6:26: 6:27
+                                         // + literal: Const { ty: usize, val: Value(Scalar(0x0000000000000000)) }
+        _4 = Aligned(move _5,);          // bb0[11]: scope 1 at $DIR/packed-struct-drop-aligned.rs:6:11: 6:29
+        StorageDead(_5);                 // bb0[12]: scope 1 at $DIR/packed-struct-drop-aligned.rs:6:28: 6:29
+        StorageLive(_6);                 // bb0[13]: scope 1 at $DIR/packed-struct-drop-aligned.rs:6:5: 6:8
+        _6 = move (_1.0: Aligned);       // bb0[14]: scope 1 at $DIR/packed-struct-drop-aligned.rs:6:5: 6:8
+        drop(_6) -> [return: bb4, unwind: bb3]; // bb0[15]: scope 1 at $DIR/packed-struct-drop-aligned.rs:6:5: 6:8
+    }
+
+    bb1 (cleanup): {
+        resume;                          // bb1[0]: scope 0 at $DIR/packed-struct-drop-aligned.rs:4:1: 7:2
+    }
+
+    bb2: {
+        StorageDead(_1);                 // bb2[0]: scope 0 at $DIR/packed-struct-drop-aligned.rs:7:1: 7:2
+        return;                          // bb2[1]: scope 0 at $DIR/packed-struct-drop-aligned.rs:7:2: 7:2
+    }
+
+    bb3 (cleanup): {
+        (_1.0: Aligned) = move _4;       // bb3[0]: scope 1 at $DIR/packed-struct-drop-aligned.rs:6:5: 6:8
+        drop(_1) -> bb1;                 // bb3[1]: scope 0 at $DIR/packed-struct-drop-aligned.rs:7:1: 7:2
+    }
+
+    bb4: {
+        StorageDead(_6);                 // bb4[0]: scope 1 at $DIR/packed-struct-drop-aligned.rs:6:5: 6:8
+        (_1.0: Aligned) = move _4;       // bb4[1]: scope 1 at $DIR/packed-struct-drop-aligned.rs:6:5: 6:8
+        StorageDead(_4);                 // bb4[2]: scope 1 at $DIR/packed-struct-drop-aligned.rs:6:28: 6:29
+        _0 = ();                         // bb4[3]: scope 0 at $DIR/packed-struct-drop-aligned.rs:4:11: 7:2
+        drop(_1) -> [return: bb2, unwind: bb1]; // bb4[4]: scope 0 at $DIR/packed-struct-drop-aligned.rs:7:1: 7:2
+    }
+}
diff --git a/src/test/mir-opt/remove_fake_borrows.rs b/src/test/mir-opt/remove_fake_borrows.rs
index ea106eaf595..fd2f1d0dbff 100644
--- a/src/test/mir-opt/remove_fake_borrows.rs
+++ b/src/test/mir-opt/remove_fake_borrows.rs
@@ -2,6 +2,7 @@
 
 // ignore-wasm32-bare compiled with panic=abort by default
 
+// EMIT_MIR rustc.match_guard.CleanupNonCodegenStatements.diff
 fn match_guard(x: Option<&&i32>, c: bool) -> i32 {
     match x {
         Some(0) if c => 0,
@@ -12,97 +13,3 @@ fn match_guard(x: Option<&&i32>, c: bool) -> i32 {
 fn main() {
     match_guard(None, true);
 }
-
-// END RUST SOURCE
-
-// START rustc.match_guard.CleanupNonCodegenStatements.before.mir
-// bb0: {
-//     FakeRead(ForMatchedPlace, _1);
-//     _3 = discriminant(_1);
-//     switchInt(move _3) -> [1isize: bb2, otherwise: bb1];
-// }
-// bb1: {
-//     _0 = const 1i32;
-//     goto -> bb7;
-// }
-// bb2: {
-//     switchInt((*(*((_1 as Some).0: &&i32)))) -> [0i32: bb3, otherwise: bb1];
-// }
-// bb3: {
-//     goto -> bb4;
-// }
-// bb4: {
-//     _4 = &shallow _1;
-//     _5 = &shallow ((_1 as Some).0: &&i32);
-//     _6 = &shallow (*((_1 as Some).0: &&i32));
-//     _7 = &shallow (*(*((_1 as Some).0: &&i32)));
-//     StorageLive(_8);
-//     _8 = _2;
-//     switchInt(move _8) -> [false: bb6, otherwise: bb5];
-// }
-// bb5: {
-//     StorageDead(_8);
-//     FakeRead(ForMatchGuard, _4);
-//     FakeRead(ForMatchGuard, _5);
-//     FakeRead(ForMatchGuard, _6);
-//     FakeRead(ForMatchGuard, _7);
-//     _0 = const 0i32;
-//     goto -> bb7;
-// }
-// bb6: {
-//     StorageDead(_8);
-//     goto -> bb1;
-// }
-// bb7: {
-//     return;
-// }
-// bb8 (cleanup): {
-//     resume;
-// }
-// END rustc.match_guard.CleanupNonCodegenStatements.before.mir
-
-// START rustc.match_guard.CleanupNonCodegenStatements.after.mir
-// bb0: {
-//     nop;
-//     _3 = discriminant(_1);
-//     switchInt(move _3) -> [1isize: bb2, otherwise: bb1];
-// }
-// bb1: {
-//     _0 = const 1i32;
-//     goto -> bb7;
-// }
-// bb2: {
-//     switchInt((*(*((_1 as Some).0: &&i32)))) -> [0i32: bb3, otherwise: bb1];
-// }
-// bb3: {
-//     goto -> bb4;
-// }
-// bb4: {
-//     nop;
-//     nop;
-//     nop;
-//     nop;
-//     StorageLive(_8);
-//     _8 = _2;
-//     switchInt(move _8) -> [false: bb6, otherwise: bb5];
-// }
-// bb5: {
-//     StorageDead(_8);
-//     nop;
-//     nop;
-//     nop;
-//     nop;
-//     _0 = const 0i32;
-//     goto -> bb7;
-// }
-// bb6: {
-//     StorageDead(_8);
-//     goto -> bb1;
-// }
-// bb7: {
-//     return;
-// }
-// bb8 (cleanup): {
-//     resume;
-// }
-// END rustc.match_guard.CleanupNonCodegenStatements.after.mir
diff --git a/src/test/mir-opt/remove_fake_borrows/rustc.match_guard.CleanupNonCodegenStatements.diff b/src/test/mir-opt/remove_fake_borrows/rustc.match_guard.CleanupNonCodegenStatements.diff
new file mode 100644
index 00000000000..c915554a127
--- /dev/null
+++ b/src/test/mir-opt/remove_fake_borrows/rustc.match_guard.CleanupNonCodegenStatements.diff
@@ -0,0 +1,88 @@
+- // MIR for `match_guard` before CleanupNonCodegenStatements
++ // MIR for `match_guard` after CleanupNonCodegenStatements
+  
+  fn match_guard(_1: std::option::Option<&&i32>, _2: bool) -> i32 {
+      debug x => _1;                       // in scope 0 at $DIR/remove_fake_borrows.rs:6:16: 6:17
+      debug c => _2;                       // in scope 0 at $DIR/remove_fake_borrows.rs:6:34: 6:35
+      let mut _0: i32;                     // return place in scope 0 at $DIR/remove_fake_borrows.rs:6:46: 6:49
+      let mut _3: isize;                   // in scope 0 at $DIR/remove_fake_borrows.rs:8:9: 8:16
+      let mut _4: &std::option::Option<&&i32>; // in scope 0 at $DIR/remove_fake_borrows.rs:7:11: 7:12
+      let mut _5: &&&i32;                  // in scope 0 at $DIR/remove_fake_borrows.rs:7:11: 7:12
+      let mut _6: &&i32;                   // in scope 0 at $DIR/remove_fake_borrows.rs:7:11: 7:12
+      let mut _7: &i32;                    // in scope 0 at $DIR/remove_fake_borrows.rs:7:11: 7:12
+      let mut _8: bool;                    // in scope 0 at $DIR/remove_fake_borrows.rs:8:20: 8:21
+  
+      bb0: {
+-         FakeRead(ForMatchedPlace, _1);   // bb0[0]: scope 0 at $DIR/remove_fake_borrows.rs:7:11: 7:12
++         nop;                             // bb0[0]: scope 0 at $DIR/remove_fake_borrows.rs:7:11: 7:12
+          _3 = discriminant(_1);           // bb0[1]: scope 0 at $DIR/remove_fake_borrows.rs:8:9: 8:16
+          switchInt(move _3) -> [1isize: bb2, otherwise: bb1]; // bb0[2]: scope 0 at $DIR/remove_fake_borrows.rs:8:9: 8:16
+      }
+  
+      bb1: {
+          _0 = const 1i32;                 // bb1[0]: scope 0 at $DIR/remove_fake_borrows.rs:9:14: 9:15
+                                           // ty::Const
+                                           // + ty: i32
+                                           // + val: Value(Scalar(0x00000001))
+                                           // mir::Constant
+                                           // + span: $DIR/remove_fake_borrows.rs:9:14: 9:15
+                                           // + literal: Const { ty: i32, val: Value(Scalar(0x00000001)) }
+          goto -> bb7;                     // bb1[1]: scope 0 at $DIR/remove_fake_borrows.rs:7:5: 10:6
+      }
+  
+      bb2: {
+          switchInt((*(*((_1 as Some).0: &&i32)))) -> [0i32: bb3, otherwise: bb1]; // bb2[0]: scope 0 at $DIR/remove_fake_borrows.rs:8:14: 8:15
+      }
+  
+      bb3: {
+          goto -> bb4;                     // bb3[0]: scope 0 at $DIR/remove_fake_borrows.rs:8:9: 8:16
+      }
+  
+      bb4: {
+-         _4 = &shallow _1;                // bb4[0]: scope 0 at $DIR/remove_fake_borrows.rs:7:11: 7:12
+-         _5 = &shallow ((_1 as Some).0: &&i32); // bb4[1]: scope 0 at $DIR/remove_fake_borrows.rs:7:11: 7:12
+-         _6 = &shallow (*((_1 as Some).0: &&i32)); // bb4[2]: scope 0 at $DIR/remove_fake_borrows.rs:7:11: 7:12
+-         _7 = &shallow (*(*((_1 as Some).0: &&i32))); // bb4[3]: scope 0 at $DIR/remove_fake_borrows.rs:7:11: 7:12
++         nop;                             // bb4[0]: scope 0 at $DIR/remove_fake_borrows.rs:7:11: 7:12
++         nop;                             // bb4[1]: scope 0 at $DIR/remove_fake_borrows.rs:7:11: 7:12
++         nop;                             // bb4[2]: scope 0 at $DIR/remove_fake_borrows.rs:7:11: 7:12
++         nop;                             // bb4[3]: scope 0 at $DIR/remove_fake_borrows.rs:7:11: 7:12
+          StorageLive(_8);                 // bb4[4]: scope 0 at $DIR/remove_fake_borrows.rs:8:20: 8:21
+          _8 = _2;                         // bb4[5]: scope 0 at $DIR/remove_fake_borrows.rs:8:20: 8:21
+          switchInt(move _8) -> [false: bb6, otherwise: bb5]; // bb4[6]: scope 0 at $DIR/remove_fake_borrows.rs:8:20: 8:21
+      }
+  
+      bb5: {
+          StorageDead(_8);                 // bb5[0]: scope 0 at $DIR/remove_fake_borrows.rs:8:26: 8:27
+-         FakeRead(ForMatchGuard, _4);     // bb5[1]: scope 0 at $DIR/remove_fake_borrows.rs:8:20: 8:21
+-         FakeRead(ForMatchGuard, _5);     // bb5[2]: scope 0 at $DIR/remove_fake_borrows.rs:8:20: 8:21
+-         FakeRead(ForMatchGuard, _6);     // bb5[3]: scope 0 at $DIR/remove_fake_borrows.rs:8:20: 8:21
+-         FakeRead(ForMatchGuard, _7);     // bb5[4]: scope 0 at $DIR/remove_fake_borrows.rs:8:20: 8:21
++         nop;                             // bb5[1]: scope 0 at $DIR/remove_fake_borrows.rs:8:20: 8:21
++         nop;                             // bb5[2]: scope 0 at $DIR/remove_fake_borrows.rs:8:20: 8:21
++         nop;                             // bb5[3]: scope 0 at $DIR/remove_fake_borrows.rs:8:20: 8:21
++         nop;                             // bb5[4]: scope 0 at $DIR/remove_fake_borrows.rs:8:20: 8:21
+          _0 = const 0i32;                 // bb5[5]: scope 0 at $DIR/remove_fake_borrows.rs:8:25: 8:26
+                                           // ty::Const
+                                           // + ty: i32
+                                           // + val: Value(Scalar(0x00000000))
+                                           // mir::Constant
+                                           // + span: $DIR/remove_fake_borrows.rs:8:25: 8:26
+                                           // + literal: Const { ty: i32, val: Value(Scalar(0x00000000)) }
+          goto -> bb7;                     // bb5[6]: scope 0 at $DIR/remove_fake_borrows.rs:7:5: 10:6
+      }
+  
+      bb6: {
+          StorageDead(_8);                 // bb6[0]: scope 0 at $DIR/remove_fake_borrows.rs:8:26: 8:27
+          goto -> bb1;                     // bb6[1]: scope 0 at $DIR/remove_fake_borrows.rs:8:20: 8:21
+      }
+  
+      bb7: {
+          return;                          // bb7[0]: scope 0 at $DIR/remove_fake_borrows.rs:11:2: 11:2
+      }
+  
+      bb8 (cleanup): {
+          resume;                          // bb8[0]: scope 0 at $DIR/remove_fake_borrows.rs:6:1: 11:2
+      }
+  }
+  
diff --git a/src/test/mir-opt/retag.rs b/src/test/mir-opt/retag.rs
index a0a7a760c2d..eba0f567c4a 100644
--- a/src/test/mir-opt/retag.rs
+++ b/src/test/mir-opt/retag.rs
@@ -6,6 +6,8 @@
 
 struct Test(i32);
 
+// EMIT_MIR rustc.{{impl}}-foo.SimplifyCfg-elaborate-drops.after.mir
+// EMIT_MIR rustc.{{impl}}-foo_shr.SimplifyCfg-elaborate-drops.after.mir
 impl Test {
     // Make sure we run the pass on a method, not just on bare functions.
     fn foo<'x>(&self, x: &'x mut i32) -> &'x mut i32 {
@@ -16,10 +18,14 @@ impl Test {
     }
 }
 
+// EMIT_MIR rustc.ptr-drop_in_place.Test.SimplifyCfg-make_shim.after.mir
+
 impl Drop for Test {
     fn drop(&mut self) {}
 }
 
+// EMIT_MIR rustc.main.SimplifyCfg-elaborate-drops.after.mir
+// EMIT_MIR rustc.main-{{closure}}.SimplifyCfg-elaborate-drops.after.mir
 fn main() {
     let mut x = 0;
     {
@@ -43,94 +49,3 @@ fn main() {
     // escape-to-raw (shr)
     let _w = _w as *const _;
 }
-
-// END RUST SOURCE
-// START rustc.{{impl}}-foo.SimplifyCfg-elaborate-drops.after.mir
-//     bb0: {
-//         Retag([fn entry] _1);
-//         Retag([fn entry] _2);
-//         ...
-//         _0 = &mut (*_3);
-//         Retag(_0);
-//         ...
-//         return;
-//     }
-// END rustc.{{impl}}-foo.SimplifyCfg-elaborate-drops.after.mir
-// START rustc.{{impl}}-foo_shr.SimplifyCfg-elaborate-drops.after.mir
-//     bb0: {
-//         Retag([fn entry] _1);
-//         Retag([fn entry] _2);
-//         ...
-//         _0 = _2;
-//         Retag(_0);
-//         ...
-//         return;
-//     }
-// END rustc.{{impl}}-foo_shr.SimplifyCfg-elaborate-drops.after.mir
-// START rustc.main.SimplifyCfg-elaborate-drops.after.mir
-// fn main() -> () {
-//     ...
-//     bb0: {
-//         ...
-//         _3 = const Test::foo(move _4, move _6) -> [return: bb2, unwind: bb3];
-//     }
-//
-//     ...
-//
-//     bb2: {
-//         Retag(_3);
-//         ...
-//         _9 = move _3;
-//         Retag(_9);
-//         _8 = &mut (*_9);
-//         Retag(_8);
-//         StorageDead(_9);
-//         StorageLive(_10);
-//         _10 = move _8;
-//         Retag(_10);
-//         ...
-//         _12 = &raw mut (*_10);
-//         Retag([raw] _12);
-//         ...
-//         _15 = move _16(move _17) -> bb5;
-//     }
-//
-//     bb5: {
-//         Retag(_15);
-//         ...
-//         _19 = const Test::foo_shr(move _20, move _22) -> [return: bb6, unwind: bb7];
-//     }
-//
-//     ...
-// }
-// END rustc.main.SimplifyCfg-elaborate-drops.after.mir
-// START rustc.main-{{closure}}.SimplifyCfg-elaborate-drops.after.mir
-// fn main::{{closure}}#0(_1: &[closure@main::{{closure}}#0], _2: &i32) -> &i32 {
-//     ...
-//     bb0: {
-//         Retag([fn entry] _1);
-//         Retag([fn entry] _2);
-//         StorageLive(_3);
-//         _3 = _2;
-//         Retag(_3);
-//         _0 = _2;
-//         Retag(_0);
-//         StorageDead(_3);
-//         return;
-//     }
-// }
-// END rustc.main-{{closure}}.SimplifyCfg-elaborate-drops.after.mir
-// START rustc.ptr-drop_in_place.Test.SimplifyCfg-make_shim.after.mir
-// fn std::intrinsics::drop_in_place(_1: *mut Test) -> () {
-//     ...
-//     bb0: {
-//         Retag([raw] _1);
-//         _2 = &mut (*_1);
-//         _3 = const <Test as std::ops::Drop>::drop(move _2) -> bb1;
-//     }
-//
-//     bb1: {
-//         return;
-//     }
-// }
-// END rustc.ptr-drop_in_place.Test.SimplifyCfg-make_shim.after.mir
diff --git a/src/test/mir-opt/retag/rustc.main-{{closure}}.SimplifyCfg-elaborate-drops.after.mir b/src/test/mir-opt/retag/rustc.main-{{closure}}.SimplifyCfg-elaborate-drops.after.mir
new file mode 100644
index 00000000000..5aa2510f344
--- /dev/null
+++ b/src/test/mir-opt/retag/rustc.main-{{closure}}.SimplifyCfg-elaborate-drops.after.mir
@@ -0,0 +1,22 @@
+// MIR for `main::{{closure}}#0` after SimplifyCfg-elaborate-drops
+
+fn main::{{closure}}#0(_1: &[closure@main::{{closure}}#0], _2: &i32) -> &i32 {
+    debug x => _2;                       // in scope 0 at $DIR/retag.rs:40:32: 40:33
+    let mut _0: &i32;                    // return place in scope 0 at $DIR/retag.rs:40:44: 40:48
+    let _3: &i32;                        // in scope 0 at $DIR/retag.rs:41:13: 41:15
+    scope 1 {
+        debug _y => _3;                  // in scope 1 at $DIR/retag.rs:41:13: 41:15
+    }
+
+    bb0: {
+        Retag([fn entry] _1);            // bb0[0]: scope 0 at $DIR/retag.rs:40:31: 43:6
+        Retag([fn entry] _2);            // bb0[1]: scope 0 at $DIR/retag.rs:40:31: 43:6
+        StorageLive(_3);                 // bb0[2]: scope 0 at $DIR/retag.rs:41:13: 41:15
+        _3 = _2;                         // bb0[3]: scope 0 at $DIR/retag.rs:41:18: 41:19
+        Retag(_3);                       // bb0[4]: scope 0 at $DIR/retag.rs:41:18: 41:19
+        _0 = _2;                         // bb0[5]: scope 1 at $DIR/retag.rs:42:9: 42:10
+        Retag(_0);                       // bb0[6]: scope 1 at $DIR/retag.rs:42:9: 42:10
+        StorageDead(_3);                 // bb0[7]: scope 0 at $DIR/retag.rs:43:5: 43:6
+        return;                          // bb0[8]: scope 0 at $DIR/retag.rs:43:6: 43:6
+    }
+}
diff --git a/src/test/mir-opt/retag/rustc.main.SimplifyCfg-elaborate-drops.after.mir b/src/test/mir-opt/retag/rustc.main.SimplifyCfg-elaborate-drops.after.mir
new file mode 100644
index 00000000000..780cb9d4ad5
--- /dev/null
+++ b/src/test/mir-opt/retag/rustc.main.SimplifyCfg-elaborate-drops.after.mir
@@ -0,0 +1,227 @@
+// MIR for `main` after SimplifyCfg-elaborate-drops
+
+fn main() -> () {
+    let mut _0: ();                      // return place in scope 0 at $DIR/retag.rs:29:11: 29:11
+    let mut _1: i32;                     // in scope 0 at $DIR/retag.rs:30:9: 30:14
+    let _2: ();                          // in scope 0 at $DIR/retag.rs:31:5: 37:6
+    let mut _4: &Test;                   // in scope 0 at $DIR/retag.rs:32:17: 32:24
+    let _5: Test;                        // in scope 0 at $DIR/retag.rs:32:17: 32:24
+    let mut _6: &mut i32;                // in scope 0 at $DIR/retag.rs:32:29: 32:35
+    let mut _7: &mut i32;                // in scope 0 at $DIR/retag.rs:32:29: 32:35
+    let mut _9: &mut i32;                // in scope 0 at $DIR/retag.rs:33:19: 33:20
+    let mut _12: *mut i32;               // in scope 0 at $DIR/retag.rs:36:18: 36:29
+    let mut _14: [closure@main::{{closure}}#0]; // in scope 0 at $DIR/retag.rs:40:31: 43:6
+    let mut _16: for<'r> fn(&'r i32) -> &'r i32; // in scope 0 at $DIR/retag.rs:44:14: 44:15
+    let mut _17: &i32;                   // in scope 0 at $DIR/retag.rs:44:16: 44:18
+    let _18: &i32;                       // in scope 0 at $DIR/retag.rs:44:16: 44:18
+    let _19: &i32;                       // in scope 0 at $DIR/retag.rs:47:5: 47:24
+    let mut _20: &Test;                  // in scope 0 at $DIR/retag.rs:47:5: 47:12
+    let _21: Test;                       // in scope 0 at $DIR/retag.rs:47:5: 47:12
+    let mut _22: &i32;                   // in scope 0 at $DIR/retag.rs:47:21: 47:23
+    let _23: &i32;                       // in scope 0 at $DIR/retag.rs:47:21: 47:23
+    let _24: i32;                        // in scope 0 at $DIR/retag.rs:47:22: 47:23
+    let mut _26: *const i32;             // in scope 0 at $DIR/retag.rs:50:14: 50:28
+    scope 1 {
+        debug x => _1;                   // in scope 1 at $DIR/retag.rs:30:9: 30:14
+        let _3: &mut i32;                // in scope 1 at $DIR/retag.rs:32:13: 32:14
+        let _13: for<'r> fn(&'r i32) -> &'r i32 as UserTypeProjection { base: UserType(1), projs: [] }; // in scope 1 at $DIR/retag.rs:40:9: 40:10
+        scope 2 {
+            debug v => _3;               // in scope 2 at $DIR/retag.rs:32:13: 32:14
+            let _8: &mut i32;            // in scope 2 at $DIR/retag.rs:33:13: 33:14
+            scope 3 {
+                debug w => _8;           // in scope 3 at $DIR/retag.rs:33:13: 33:14
+                let _10: &mut i32;       // in scope 3 at $DIR/retag.rs:34:13: 34:14
+                scope 4 {
+                    debug w => _10;      // in scope 4 at $DIR/retag.rs:34:13: 34:14
+                    let _11: *mut i32;   // in scope 4 at $DIR/retag.rs:36:13: 36:15
+                    scope 5 {
+                        debug _w => _11; // in scope 5 at $DIR/retag.rs:36:13: 36:15
+                    }
+                }
+            }
+        }
+        scope 6 {
+            debug c => _13;              // in scope 6 at $DIR/retag.rs:40:9: 40:10
+            let _15: &i32;               // in scope 6 at $DIR/retag.rs:44:9: 44:11
+            scope 7 {
+                debug _w => _15;         // in scope 7 at $DIR/retag.rs:44:9: 44:11
+                let _25: *const i32;     // in scope 7 at $DIR/retag.rs:50:9: 50:11
+                let mut _27: &i32;       // in scope 7 at $DIR/retag.rs:47:21: 47:23
+                scope 8 {
+                    debug _w => _25;     // in scope 8 at $DIR/retag.rs:50:9: 50:11
+                }
+            }
+        }
+    }
+
+    bb0: {
+        StorageLive(_1);                 // bb0[0]: scope 0 at $DIR/retag.rs:30:9: 30:14
+        _1 = const 0i32;                 // bb0[1]: scope 0 at $DIR/retag.rs:30:17: 30:18
+                                         // ty::Const
+                                         // + ty: i32
+                                         // + val: Value(Scalar(0x00000000))
+                                         // mir::Constant
+                                         // + span: $DIR/retag.rs:30:17: 30:18
+                                         // + literal: Const { ty: i32, val: Value(Scalar(0x00000000)) }
+        StorageLive(_2);                 // bb0[2]: scope 1 at $DIR/retag.rs:31:5: 37:6
+        StorageLive(_3);                 // bb0[3]: scope 1 at $DIR/retag.rs:32:13: 32:14
+        StorageLive(_4);                 // bb0[4]: scope 1 at $DIR/retag.rs:32:17: 32:24
+        StorageLive(_5);                 // bb0[5]: scope 1 at $DIR/retag.rs:32:17: 32:24
+        _5 = Test(const 0i32,);          // bb0[6]: scope 1 at $DIR/retag.rs:32:17: 32:24
+                                         // ty::Const
+                                         // + ty: i32
+                                         // + val: Value(Scalar(0x00000000))
+                                         // mir::Constant
+                                         // + span: $DIR/retag.rs:32:22: 32:23
+                                         // + literal: Const { ty: i32, val: Value(Scalar(0x00000000)) }
+        _4 = &_5;                        // bb0[7]: scope 1 at $DIR/retag.rs:32:17: 32:24
+        Retag(_4);                       // bb0[8]: scope 1 at $DIR/retag.rs:32:17: 32:24
+        StorageLive(_6);                 // bb0[9]: scope 1 at $DIR/retag.rs:32:29: 32:35
+        StorageLive(_7);                 // bb0[10]: scope 1 at $DIR/retag.rs:32:29: 32:35
+        _7 = &mut _1;                    // bb0[11]: scope 1 at $DIR/retag.rs:32:29: 32:35
+        Retag(_7);                       // bb0[12]: scope 1 at $DIR/retag.rs:32:29: 32:35
+        _6 = &mut (*_7);                 // bb0[13]: scope 1 at $DIR/retag.rs:32:29: 32:35
+        Retag([2phase] _6);              // bb0[14]: scope 1 at $DIR/retag.rs:32:29: 32:35
+        _3 = const Test::foo(move _4, move _6) -> [return: bb2, unwind: bb3]; // bb0[15]: scope 1 at $DIR/retag.rs:32:17: 32:36
+                                         // ty::Const
+                                         // + ty: for<'r, 'x> fn(&'r Test, &'x mut i32) -> &'x mut i32 {Test::foo}
+                                         // + val: Value(Scalar(<ZST>))
+                                         // mir::Constant
+                                         // + span: $DIR/retag.rs:32:25: 32:28
+                                         // + literal: Const { ty: for<'r, 'x> fn(&'r Test, &'x mut i32) -> &'x mut i32 {Test::foo}, val: Value(Scalar(<ZST>)) }
+    }
+
+    bb1 (cleanup): {
+        resume;                          // bb1[0]: scope 0 at $DIR/retag.rs:29:1: 51:2
+    }
+
+    bb2: {
+        Retag(_3);                       // bb2[0]: scope 1 at $DIR/retag.rs:32:17: 32:36
+        StorageDead(_6);                 // bb2[1]: scope 1 at $DIR/retag.rs:32:35: 32:36
+        StorageDead(_4);                 // bb2[2]: scope 1 at $DIR/retag.rs:32:35: 32:36
+        StorageDead(_7);                 // bb2[3]: scope 1 at $DIR/retag.rs:32:36: 32:37
+        drop(_5) -> [return: bb4, unwind: bb1]; // bb2[4]: scope 1 at $DIR/retag.rs:32:36: 32:37
+    }
+
+    bb3 (cleanup): {
+        drop(_5) -> bb1;                 // bb3[0]: scope 1 at $DIR/retag.rs:32:36: 32:37
+    }
+
+    bb4: {
+        StorageDead(_5);                 // bb4[0]: scope 1 at $DIR/retag.rs:32:36: 32:37
+        StorageLive(_8);                 // bb4[1]: scope 2 at $DIR/retag.rs:33:13: 33:14
+        StorageLive(_9);                 // bb4[2]: scope 2 at $DIR/retag.rs:33:19: 33:20
+        _9 = move _3;                    // bb4[3]: scope 2 at $DIR/retag.rs:33:19: 33:20
+        Retag(_9);                       // bb4[4]: scope 2 at $DIR/retag.rs:33:19: 33:20
+        _8 = &mut (*_9);                 // bb4[5]: scope 2 at $DIR/retag.rs:33:19: 33:20
+        Retag(_8);                       // bb4[6]: scope 2 at $DIR/retag.rs:33:19: 33:20
+        StorageDead(_9);                 // bb4[7]: scope 2 at $DIR/retag.rs:33:22: 33:23
+        StorageLive(_10);                // bb4[8]: scope 3 at $DIR/retag.rs:34:13: 34:14
+        _10 = move _8;                   // bb4[9]: scope 3 at $DIR/retag.rs:34:17: 34:18
+        Retag(_10);                      // bb4[10]: scope 3 at $DIR/retag.rs:34:17: 34:18
+        StorageLive(_11);                // bb4[11]: scope 4 at $DIR/retag.rs:36:13: 36:15
+        StorageLive(_12);                // bb4[12]: scope 4 at $DIR/retag.rs:36:18: 36:29
+        _12 = &raw mut (*_10);           // bb4[13]: scope 4 at $DIR/retag.rs:36:18: 36:19
+        Retag([raw] _12);                // bb4[14]: scope 4 at $DIR/retag.rs:36:18: 36:19
+        _11 = _12;                       // bb4[15]: scope 4 at $DIR/retag.rs:36:18: 36:29
+        StorageDead(_12);                // bb4[16]: scope 4 at $DIR/retag.rs:36:29: 36:30
+        _2 = ();                         // bb4[17]: scope 1 at $DIR/retag.rs:31:5: 37:6
+        StorageDead(_11);                // bb4[18]: scope 4 at $DIR/retag.rs:37:5: 37:6
+        StorageDead(_10);                // bb4[19]: scope 3 at $DIR/retag.rs:37:5: 37:6
+        StorageDead(_8);                 // bb4[20]: scope 2 at $DIR/retag.rs:37:5: 37:6
+        StorageDead(_3);                 // bb4[21]: scope 1 at $DIR/retag.rs:37:5: 37:6
+        StorageDead(_2);                 // bb4[22]: scope 1 at $DIR/retag.rs:37:5: 37:6
+        StorageLive(_13);                // bb4[23]: scope 1 at $DIR/retag.rs:40:9: 40:10
+        StorageLive(_14);                // bb4[24]: scope 1 at $DIR/retag.rs:40:31: 43:6
+        _14 = [closure@main::{{closure}}#0]; // bb4[25]: scope 1 at $DIR/retag.rs:40:31: 43:6
+                                         // closure
+                                         // + def_id: DefId(0:14 ~ retag[317d]::main[0]::{{closure}}[0])
+                                         // + substs: [
+                                         //     i8,
+                                         //     for<'r> extern "rust-call" fn((&'r i32,)) -> &'r i32,
+                                         //     (),
+                                         // ]
+        Retag(_14);                      // bb4[26]: scope 1 at $DIR/retag.rs:40:31: 43:6
+        _13 = move _14 as for<'r> fn(&'r i32) -> &'r i32 (Pointer(ClosureFnPointer(Normal))); // bb4[27]: scope 1 at $DIR/retag.rs:40:31: 43:6
+        StorageDead(_14);                // bb4[28]: scope 1 at $DIR/retag.rs:43:5: 43:6
+        StorageLive(_15);                // bb4[29]: scope 6 at $DIR/retag.rs:44:9: 44:11
+        StorageLive(_16);                // bb4[30]: scope 6 at $DIR/retag.rs:44:14: 44:15
+        _16 = _13;                       // bb4[31]: scope 6 at $DIR/retag.rs:44:14: 44:15
+        StorageLive(_17);                // bb4[32]: scope 6 at $DIR/retag.rs:44:16: 44:18
+        StorageLive(_18);                // bb4[33]: scope 6 at $DIR/retag.rs:44:16: 44:18
+        _18 = &_1;                       // bb4[34]: scope 6 at $DIR/retag.rs:44:16: 44:18
+        Retag(_18);                      // bb4[35]: scope 6 at $DIR/retag.rs:44:16: 44:18
+        _17 = &(*_18);                   // bb4[36]: scope 6 at $DIR/retag.rs:44:16: 44:18
+        Retag(_17);                      // bb4[37]: scope 6 at $DIR/retag.rs:44:16: 44:18
+        _15 = move _16(move _17) -> bb5; // bb4[38]: scope 6 at $DIR/retag.rs:44:14: 44:19
+    }
+
+    bb5: {
+        Retag(_15);                      // bb5[0]: scope 6 at $DIR/retag.rs:44:14: 44:19
+        StorageDead(_17);                // bb5[1]: scope 6 at $DIR/retag.rs:44:18: 44:19
+        StorageDead(_16);                // bb5[2]: scope 6 at $DIR/retag.rs:44:18: 44:19
+        StorageDead(_18);                // bb5[3]: scope 6 at $DIR/retag.rs:44:19: 44:20
+        StorageLive(_19);                // bb5[4]: scope 7 at $DIR/retag.rs:47:5: 47:24
+        StorageLive(_20);                // bb5[5]: scope 7 at $DIR/retag.rs:47:5: 47:12
+        StorageLive(_21);                // bb5[6]: scope 7 at $DIR/retag.rs:47:5: 47:12
+        _21 = Test(const 0i32,);         // bb5[7]: scope 7 at $DIR/retag.rs:47:5: 47:12
+                                         // ty::Const
+                                         // + ty: i32
+                                         // + val: Value(Scalar(0x00000000))
+                                         // mir::Constant
+                                         // + span: $DIR/retag.rs:47:10: 47:11
+                                         // + literal: Const { ty: i32, val: Value(Scalar(0x00000000)) }
+        _20 = &_21;                      // bb5[8]: scope 7 at $DIR/retag.rs:47:5: 47:12
+        Retag(_20);                      // bb5[9]: scope 7 at $DIR/retag.rs:47:5: 47:12
+        StorageLive(_22);                // bb5[10]: scope 7 at $DIR/retag.rs:47:21: 47:23
+        StorageLive(_23);                // bb5[11]: scope 7 at $DIR/retag.rs:47:21: 47:23
+        _27 = const main::promoted[0];   // bb5[12]: scope 7 at $DIR/retag.rs:47:21: 47:23
+                                         // ty::Const
+                                         // + ty: &i32
+                                         // + val: Unevaluated(DefId(0:13 ~ retag[317d]::main[0]), [], Some(promoted[0]))
+                                         // mir::Constant
+                                         // + span: $DIR/retag.rs:47:21: 47:23
+                                         // + literal: Const { ty: &i32, val: Unevaluated(DefId(0:13 ~ retag[317d]::main[0]), [], Some(promoted[0])) }
+        Retag(_27);                      // bb5[13]: scope 7 at $DIR/retag.rs:47:21: 47:23
+        _23 = &(*_27);                   // bb5[14]: scope 7 at $DIR/retag.rs:47:21: 47:23
+        Retag(_23);                      // bb5[15]: scope 7 at $DIR/retag.rs:47:21: 47:23
+        _22 = &(*_23);                   // bb5[16]: scope 7 at $DIR/retag.rs:47:21: 47:23
+        Retag(_22);                      // bb5[17]: scope 7 at $DIR/retag.rs:47:21: 47:23
+        _19 = const Test::foo_shr(move _20, move _22) -> [return: bb6, unwind: bb7]; // bb5[18]: scope 7 at $DIR/retag.rs:47:5: 47:24
+                                         // ty::Const
+                                         // + ty: for<'r, 'x> fn(&'r Test, &'x i32) -> &'x i32 {Test::foo_shr}
+                                         // + val: Value(Scalar(<ZST>))
+                                         // mir::Constant
+                                         // + span: $DIR/retag.rs:47:13: 47:20
+                                         // + literal: Const { ty: for<'r, 'x> fn(&'r Test, &'x i32) -> &'x i32 {Test::foo_shr}, val: Value(Scalar(<ZST>)) }
+    }
+
+    bb6: {
+        Retag(_19);                      // bb6[0]: scope 7 at $DIR/retag.rs:47:5: 47:24
+        StorageDead(_22);                // bb6[1]: scope 7 at $DIR/retag.rs:47:23: 47:24
+        StorageDead(_20);                // bb6[2]: scope 7 at $DIR/retag.rs:47:23: 47:24
+        StorageDead(_23);                // bb6[3]: scope 7 at $DIR/retag.rs:47:24: 47:25
+        drop(_21) -> [return: bb8, unwind: bb1]; // bb6[4]: scope 7 at $DIR/retag.rs:47:24: 47:25
+    }
+
+    bb7 (cleanup): {
+        drop(_21) -> bb1;                // bb7[0]: scope 7 at $DIR/retag.rs:47:24: 47:25
+    }
+
+    bb8: {
+        StorageDead(_21);                // bb8[0]: scope 7 at $DIR/retag.rs:47:24: 47:25
+        StorageDead(_19);                // bb8[1]: scope 7 at $DIR/retag.rs:47:24: 47:25
+        StorageLive(_25);                // bb8[2]: scope 7 at $DIR/retag.rs:50:9: 50:11
+        StorageLive(_26);                // bb8[3]: scope 7 at $DIR/retag.rs:50:14: 50:28
+        _26 = &raw const (*_15);         // bb8[4]: scope 7 at $DIR/retag.rs:50:14: 50:16
+        Retag([raw] _26);                // bb8[5]: scope 7 at $DIR/retag.rs:50:14: 50:16
+        _25 = _26;                       // bb8[6]: scope 7 at $DIR/retag.rs:50:14: 50:28
+        StorageDead(_26);                // bb8[7]: scope 7 at $DIR/retag.rs:50:28: 50:29
+        _0 = ();                         // bb8[8]: scope 0 at $DIR/retag.rs:29:11: 51:2
+        StorageDead(_25);                // bb8[9]: scope 7 at $DIR/retag.rs:51:1: 51:2
+        StorageDead(_15);                // bb8[10]: scope 6 at $DIR/retag.rs:51:1: 51:2
+        StorageDead(_13);                // bb8[11]: scope 1 at $DIR/retag.rs:51:1: 51:2
+        StorageDead(_1);                 // bb8[12]: scope 0 at $DIR/retag.rs:51:1: 51:2
+        return;                          // bb8[13]: scope 0 at $DIR/retag.rs:51:2: 51:2
+    }
+}
diff --git a/src/test/mir-opt/retag/rustc.ptr-drop_in_place.Test.SimplifyCfg-make_shim.after.mir b/src/test/mir-opt/retag/rustc.ptr-drop_in_place.Test.SimplifyCfg-make_shim.after.mir
new file mode 100644
index 00000000000..8d891b89332
--- /dev/null
+++ b/src/test/mir-opt/retag/rustc.ptr-drop_in_place.Test.SimplifyCfg-make_shim.after.mir
@@ -0,0 +1,23 @@
+// MIR for `std::intrinsics::drop_in_place` after SimplifyCfg-make_shim
+
+fn std::intrinsics::drop_in_place(_1: *mut Test) -> () {
+    let mut _0: ();                      // return place in scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+    let mut _2: &mut Test;               // in scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+    let mut _3: ();                      // in scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+
+    bb0: {
+        Retag([raw] _1);                 // bb0[0]: scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+        _2 = &mut (*_1);                 // bb0[1]: scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+        _3 = const <Test as std::ops::Drop>::drop(move _2) -> bb1; // bb0[2]: scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+                                         // ty::Const
+                                         // + ty: for<'r> fn(&'r mut Test) {<Test as std::ops::Drop>::drop}
+                                         // + val: Value(Scalar(<ZST>))
+                                         // mir::Constant
+                                         // + span: $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+                                         // + literal: Const { ty: for<'r> fn(&'r mut Test) {<Test as std::ops::Drop>::drop}, val: Value(Scalar(<ZST>)) }
+    }
+
+    bb1: {
+        return;                          // bb1[0]: scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+    }
+}
diff --git a/src/test/mir-opt/retag/rustc.{{impl}}-foo.SimplifyCfg-elaborate-drops.after.mir b/src/test/mir-opt/retag/rustc.{{impl}}-foo.SimplifyCfg-elaborate-drops.after.mir
new file mode 100644
index 00000000000..265a4bdd822
--- /dev/null
+++ b/src/test/mir-opt/retag/rustc.{{impl}}-foo.SimplifyCfg-elaborate-drops.after.mir
@@ -0,0 +1,20 @@
+// MIR for `<impl at $DIR/retag.rs:11:1: 19:2>::foo` after SimplifyCfg-elaborate-drops
+
+fn <impl at $DIR/retag.rs:11:1: 19:2>::foo(_1: &Test, _2: &mut i32) -> &mut i32 {
+    debug self => _1;                    // in scope 0 at $DIR/retag.rs:13:16: 13:21
+    debug x => _2;                       // in scope 0 at $DIR/retag.rs:13:23: 13:24
+    let mut _0: &mut i32;                // return place in scope 0 at $DIR/retag.rs:13:42: 13:53
+    let mut _3: &mut i32;                // in scope 0 at $DIR/retag.rs:14:9: 14:10
+
+    bb0: {
+        Retag([fn entry] _1);            // bb0[0]: scope 0 at $DIR/retag.rs:13:5: 15:6
+        Retag([fn entry] _2);            // bb0[1]: scope 0 at $DIR/retag.rs:13:5: 15:6
+        StorageLive(_3);                 // bb0[2]: scope 0 at $DIR/retag.rs:14:9: 14:10
+        _3 = &mut (*_2);                 // bb0[3]: scope 0 at $DIR/retag.rs:14:9: 14:10
+        Retag(_3);                       // bb0[4]: scope 0 at $DIR/retag.rs:14:9: 14:10
+        _0 = &mut (*_3);                 // bb0[5]: scope 0 at $DIR/retag.rs:14:9: 14:10
+        Retag(_0);                       // bb0[6]: scope 0 at $DIR/retag.rs:14:9: 14:10
+        StorageDead(_3);                 // bb0[7]: scope 0 at $DIR/retag.rs:15:5: 15:6
+        return;                          // bb0[8]: scope 0 at $DIR/retag.rs:15:6: 15:6
+    }
+}
diff --git a/src/test/mir-opt/retag/rustc.{{impl}}-foo_shr.SimplifyCfg-elaborate-drops.after.mir b/src/test/mir-opt/retag/rustc.{{impl}}-foo_shr.SimplifyCfg-elaborate-drops.after.mir
new file mode 100644
index 00000000000..edf1058e457
--- /dev/null
+++ b/src/test/mir-opt/retag/rustc.{{impl}}-foo_shr.SimplifyCfg-elaborate-drops.after.mir
@@ -0,0 +1,15 @@
+// MIR for `<impl at $DIR/retag.rs:11:1: 19:2>::foo_shr` after SimplifyCfg-elaborate-drops
+
+fn <impl at $DIR/retag.rs:11:1: 19:2>::foo_shr(_1: &Test, _2: &i32) -> &i32 {
+    debug self => _1;                    // in scope 0 at $DIR/retag.rs:16:20: 16:25
+    debug x => _2;                       // in scope 0 at $DIR/retag.rs:16:27: 16:28
+    let mut _0: &i32;                    // return place in scope 0 at $DIR/retag.rs:16:42: 16:49
+
+    bb0: {
+        Retag([fn entry] _1);            // bb0[0]: scope 0 at $DIR/retag.rs:16:5: 18:6
+        Retag([fn entry] _2);            // bb0[1]: scope 0 at $DIR/retag.rs:16:5: 18:6
+        _0 = _2;                         // bb0[2]: scope 0 at $DIR/retag.rs:17:9: 17:10
+        Retag(_0);                       // bb0[3]: scope 0 at $DIR/retag.rs:17:9: 17:10
+        return;                          // bb0[4]: scope 0 at $DIR/retag.rs:18:6: 18:6
+    }
+}
diff --git a/src/test/mir-opt/retain-never-const.rs b/src/test/mir-opt/retain-never-const.rs
index 8e9bae8569f..af1077e6334 100644
--- a/src/test/mir-opt/retain-never-const.rs
+++ b/src/test/mir-opt/retain-never-const.rs
@@ -14,17 +14,9 @@ impl<T> PrintName<T> {
     const VOID: ! = panic!();
 }
 
+// EMIT_MIR rustc.no_codegen.PreCodegen.after.mir
 fn no_codegen<T>() {
     let _ = PrintName::<T>::VOID;
 }
 
 fn main() {}
-
-// END RUST SOURCE
-// START rustc.no_codegen.PreCodegen.after.mir
-// bb0: {
-//     StorageLive(_1);
-//     _1 = const PrintName::<T>::VOID;
-//     unreachable;
-// }
-// END rustc.no_codegen.PreCodegen.after.mir
diff --git a/src/test/mir-opt/retain-never-const/rustc.no_codegen.PreCodegen.after.mir b/src/test/mir-opt/retain-never-const/rustc.no_codegen.PreCodegen.after.mir
new file mode 100644
index 00000000000..2d7a79ee44c
--- /dev/null
+++ b/src/test/mir-opt/retain-never-const/rustc.no_codegen.PreCodegen.after.mir
@@ -0,0 +1,21 @@
+// MIR for `no_codegen` after PreCodegen
+
+fn no_codegen() -> () {
+    let mut _0: ();                      // return place in scope 0 at $DIR/retain-never-const.rs:18:20: 18:20
+    let mut _1: !;                       // in scope 0 at $DIR/retain-never-const.rs:19:13: 19:33
+    scope 1 {
+    }
+
+    bb0: {
+        StorageLive(_1);                 // bb0[0]: scope 0 at $DIR/retain-never-const.rs:19:13: 19:33
+        _1 = const PrintName::<T>::VOID; // bb0[1]: scope 0 at $DIR/retain-never-const.rs:19:13: 19:33
+                                         // ty::Const
+                                         // + ty: !
+                                         // + val: Unevaluated(DefId(0:9 ~ retain_never_const[317d]::{{impl}}[0]::VOID[0]), [T], None)
+                                         // mir::Constant
+                                         // + span: $DIR/retain-never-const.rs:19:13: 19:33
+                                         // + user_ty: UserType(0)
+                                         // + literal: Const { ty: !, val: Unevaluated(DefId(0:9 ~ retain_never_const[317d]::{{impl}}[0]::VOID[0]), [T], None) }
+        unreachable;                     // bb0[2]: scope 0 at $DIR/retain-never-const.rs:19:13: 19:33
+    }
+}
diff --git a/src/test/mir-opt/simple-match.rs b/src/test/mir-opt/simple-match.rs
index fc1a3bb1bf4..398fd868734 100644
--- a/src/test/mir-opt/simple-match.rs
+++ b/src/test/mir-opt/simple-match.rs
@@ -1,5 +1,6 @@
 // Test that we don't generate unnecessarily large MIR for very simple matches
 
+// EMIT_MIR rustc.match_bool.mir_map.0.mir
 fn match_bool(x: bool) -> usize {
     match x {
         true => 10,
@@ -8,32 +9,3 @@ fn match_bool(x: bool) -> usize {
 }
 
 fn main() {}
-
-
-// END RUST SOURCE
-// START rustc.match_bool.mir_map.0.mir
-// bb0: {
-//     FakeRead(ForMatchedPlace, _1);
-//     switchInt(_1) -> [false: bb3, otherwise: bb2];
-// }
-// bb1 (cleanup): {
-//     resume;
-// }
-// bb2: {
-//     falseEdges -> [real: bb4, imaginary: bb3];
-// }
-// bb3: {
-//     _0 = const 20usize;
-//     goto -> bb5;
-// }
-// bb4: {
-//     _0 = const 10usize;
-//     goto -> bb5;
-// }
-// bb5: {
-//     goto -> bb6;
-// }
-// bb6: {
-//     return;
-// }
-// END rustc.match_bool.mir_map.0.mir
diff --git a/src/test/mir-opt/simple-match/rustc.match_bool.mir_map.0.mir b/src/test/mir-opt/simple-match/rustc.match_bool.mir_map.0.mir
new file mode 100644
index 00000000000..e66130b70fb
--- /dev/null
+++ b/src/test/mir-opt/simple-match/rustc.match_bool.mir_map.0.mir
@@ -0,0 +1,49 @@
+// MIR for `match_bool` 0 mir_map
+
+fn match_bool(_1: bool) -> usize {
+    debug x => _1;                       // in scope 0 at $DIR/simple-match.rs:4:15: 4:16
+    let mut _0: usize;                   // return place in scope 0 at $DIR/simple-match.rs:4:27: 4:32
+
+    bb0: {
+        FakeRead(ForMatchedPlace, _1);   // bb0[0]: scope 0 at $DIR/simple-match.rs:5:11: 5:12
+        switchInt(_1) -> [false: bb3, otherwise: bb2]; // bb0[1]: scope 0 at $DIR/simple-match.rs:6:9: 6:13
+    }
+
+    bb1 (cleanup): {
+        resume;                          // bb1[0]: scope 0 at $DIR/simple-match.rs:4:1: 9:2
+    }
+
+    bb2: {
+        falseEdges -> [real: bb4, imaginary: bb3]; // bb2[0]: scope 0 at $DIR/simple-match.rs:6:9: 6:13
+    }
+
+    bb3: {
+        _0 = const 20usize;              // bb3[0]: scope 0 at $DIR/simple-match.rs:7:14: 7:16
+                                         // ty::Const
+                                         // + ty: usize
+                                         // + val: Value(Scalar(0x0000000000000014))
+                                         // mir::Constant
+                                         // + span: $DIR/simple-match.rs:7:14: 7:16
+                                         // + literal: Const { ty: usize, val: Value(Scalar(0x0000000000000014)) }
+        goto -> bb5;                     // bb3[1]: scope 0 at $DIR/simple-match.rs:5:5: 8:6
+    }
+
+    bb4: {
+        _0 = const 10usize;              // bb4[0]: scope 0 at $DIR/simple-match.rs:6:17: 6:19
+                                         // ty::Const
+                                         // + ty: usize
+                                         // + val: Value(Scalar(0x000000000000000a))
+                                         // mir::Constant
+                                         // + span: $DIR/simple-match.rs:6:17: 6:19
+                                         // + literal: Const { ty: usize, val: Value(Scalar(0x000000000000000a)) }
+        goto -> bb5;                     // bb4[1]: scope 0 at $DIR/simple-match.rs:5:5: 8:6
+    }
+
+    bb5: {
+        goto -> bb6;                     // bb5[0]: scope 0 at $DIR/simple-match.rs:9:2: 9:2
+    }
+
+    bb6: {
+        return;                          // bb6[0]: scope 0 at $DIR/simple-match.rs:9:2: 9:2
+    }
+}
diff --git a/src/test/mir-opt/simplify-arm-identity.rs b/src/test/mir-opt/simplify-arm-identity.rs
index a8fa64255fb..cc6aab7523f 100644
--- a/src/test/mir-opt/simplify-arm-identity.rs
+++ b/src/test/mir-opt/simplify-arm-identity.rs
@@ -12,6 +12,7 @@ enum Dst {
     Foo(u8),
 }
 
+// EMIT_MIR rustc.main.SimplifyArmIdentity.diff
 fn main() {
     let e: Src = Src::Foo(0);
     let _: Dst = match e {
@@ -19,57 +20,3 @@ fn main() {
         Src::Bar => Dst::Foo(0),
     };
 }
-
-// END RUST SOURCE
-// START rustc.main.SimplifyArmIdentity.before.mir
-// fn main() -> () {
-//     ...
-//     bb0: {
-//         StorageLive(_1);
-//         ((_1 as Foo).0: u8) = const 0u8;
-//         discriminant(_1) = 0;
-//         StorageLive(_2);
-//         _3 = discriminant(_1);
-//         switchInt(move _3) -> [0isize: bb3, 1isize: bb1, otherwise: bb2];
-//     }
-//     bb1: {
-//         ((_2 as Foo).0: u8) = const 0u8;
-//         discriminant(_2) = 0;
-//         goto -> bb4;
-//     }
-//     ...
-//     bb3: {
-//         _4 = ((_1 as Foo).0: u8);
-//         ((_2 as Foo).0: u8) = move _4;
-//         discriminant(_2) = 0;
-//         goto -> bb4;
-//     }
-//     ...
-// }
-// END rustc.main.SimplifyArmIdentity.before.mir
-// START rustc.main.SimplifyArmIdentity.after.mir
-// fn main() -> () {
-//     ...
-//     bb0: {
-//         StorageLive(_1);
-//         ((_1 as Foo).0: u8) = const 0u8;
-//         discriminant(_1) = 0;
-//         StorageLive(_2);
-//         _3 = discriminant(_1);
-//         switchInt(move _3) -> [0isize: bb3, 1isize: bb1, otherwise: bb2];
-//     }
-//     bb1: {
-//         ((_2 as Foo).0: u8) = const 0u8;
-//         discriminant(_2) = 0;
-//         goto -> bb4;
-//     }
-//     ...
-//     bb3: {
-//         _4 = ((_1 as Foo).0: u8);
-//         ((_2 as Foo).0: u8) = move _4;
-//         discriminant(_2) = 0;
-//         goto -> bb4;
-//     }
-//     ...
-// }
-// END rustc.main.SimplifyArmIdentity.after.mir
diff --git a/src/test/mir-opt/simplify-arm-identity/rustc.main.SimplifyArmIdentity.diff b/src/test/mir-opt/simplify-arm-identity/rustc.main.SimplifyArmIdentity.diff
new file mode 100644
index 00000000000..32338127923
--- /dev/null
+++ b/src/test/mir-opt/simplify-arm-identity/rustc.main.SimplifyArmIdentity.diff
@@ -0,0 +1,64 @@
+- // MIR for `main` before SimplifyArmIdentity
++ // MIR for `main` after SimplifyArmIdentity
+  
+  fn main() -> () {
+      let mut _0: ();                      // return place in scope 0 at $DIR/simplify-arm-identity.rs:16:11: 16:11
+      let _1: Src as UserTypeProjection { base: UserType(0), projs: [] }; // in scope 0 at $DIR/simplify-arm-identity.rs:17:9: 17:10
+      let mut _2: Dst;                     // in scope 0 at $DIR/simplify-arm-identity.rs:18:18: 21:6
+      let mut _3: isize;                   // in scope 0 at $DIR/simplify-arm-identity.rs:19:9: 19:20
+      let mut _5: u8;                      // in scope 0 at $DIR/simplify-arm-identity.rs:19:33: 19:34
+      scope 1 {
+          debug e => _1;                   // in scope 1 at $DIR/simplify-arm-identity.rs:17:9: 17:10
+          let _4: u8;                      // in scope 1 at $DIR/simplify-arm-identity.rs:19:18: 19:19
+          scope 2 {
+          }
+          scope 3 {
+              debug x => _4;               // in scope 3 at $DIR/simplify-arm-identity.rs:19:18: 19:19
+          }
+      }
+  
+      bb0: {
+          StorageLive(_1);                 // bb0[0]: scope 0 at $DIR/simplify-arm-identity.rs:17:9: 17:10
+          ((_1 as Foo).0: u8) = const 0u8; // bb0[1]: scope 0 at $DIR/simplify-arm-identity.rs:17:18: 17:29
+                                           // ty::Const
+                                           // + ty: u8
+                                           // + val: Value(Scalar(0x00))
+                                           // mir::Constant
+                                           // + span: $DIR/simplify-arm-identity.rs:17:27: 17:28
+                                           // + literal: Const { ty: u8, val: Value(Scalar(0x00)) }
+          discriminant(_1) = 0;            // bb0[2]: scope 0 at $DIR/simplify-arm-identity.rs:17:18: 17:29
+          StorageLive(_2);                 // bb0[3]: scope 1 at $DIR/simplify-arm-identity.rs:18:18: 21:6
+          _3 = discriminant(_1);           // bb0[4]: scope 1 at $DIR/simplify-arm-identity.rs:19:9: 19:20
+          switchInt(move _3) -> [0isize: bb3, 1isize: bb1, otherwise: bb2]; // bb0[5]: scope 1 at $DIR/simplify-arm-identity.rs:19:9: 19:20
+      }
+  
+      bb1: {
+          ((_2 as Foo).0: u8) = const 0u8; // bb1[0]: scope 1 at $DIR/simplify-arm-identity.rs:20:21: 20:32
+                                           // ty::Const
+                                           // + ty: u8
+                                           // + val: Value(Scalar(0x00))
+                                           // mir::Constant
+                                           // + span: $DIR/simplify-arm-identity.rs:20:30: 20:31
+                                           // + literal: Const { ty: u8, val: Value(Scalar(0x00)) }
+          discriminant(_2) = 0;            // bb1[1]: scope 1 at $DIR/simplify-arm-identity.rs:20:21: 20:32
+          goto -> bb4;                     // bb1[2]: scope 1 at $DIR/simplify-arm-identity.rs:18:18: 21:6
+      }
+  
+      bb2: {
+          unreachable;                     // bb2[0]: scope 1 at $DIR/simplify-arm-identity.rs:18:24: 18:25
+      }
+  
+      bb3: {
+          _4 = ((_1 as Foo).0: u8);        // bb3[0]: scope 1 at $DIR/simplify-arm-identity.rs:19:18: 19:19
+          ((_2 as Foo).0: u8) = move _4;   // bb3[1]: scope 3 at $DIR/simplify-arm-identity.rs:19:24: 19:35
+          discriminant(_2) = 0;            // bb3[2]: scope 3 at $DIR/simplify-arm-identity.rs:19:24: 19:35
+          goto -> bb4;                     // bb3[3]: scope 1 at $DIR/simplify-arm-identity.rs:18:18: 21:6
+      }
+  
+      bb4: {
+          StorageDead(_2);                 // bb4[0]: scope 1 at $DIR/simplify-arm-identity.rs:21:6: 21:7
+          StorageDead(_1);                 // bb4[1]: scope 0 at $DIR/simplify-arm-identity.rs:22:1: 22:2
+          return;                          // bb4[2]: scope 0 at $DIR/simplify-arm-identity.rs:22:2: 22:2
+      }
+  }
+  
diff --git a/src/test/mir-opt/simplify-locals-removes-unused-consts.rs b/src/test/mir-opt/simplify-locals-removes-unused-consts.rs
index e427fd55ad6..48cee3c30d2 100644
--- a/src/test/mir-opt/simplify-locals-removes-unused-consts.rs
+++ b/src/test/mir-opt/simplify-locals-removes-unused-consts.rs
@@ -8,82 +8,10 @@ struct Temp {
 
 fn use_u8(_: u8) {}
 
+// EMIT_MIR rustc.main.SimplifyLocals.diff
 fn main() {
     let ((), ()) = ((), ());
     use_zst(((), ()));
 
     use_u8((Temp { x: 40 }).x + 2);
 }
-
-// END RUST SOURCE
-
-// START rustc.main.SimplifyLocals.before.mir
-// let mut _0: ();
-// let mut _1: ((), ());
-// let mut _2: ();
-// let mut _3: ();
-// let _4: ();
-// let mut _5: ((), ());
-// let mut _6: ();
-// let mut _7: ();
-// let _8: ();
-// let mut _9: u8;
-// let mut _10: u8;
-// let mut _11: Temp;
-// scope 1 {
-// }
-// bb0: {
-//   StorageLive(_1);
-//   StorageLive(_2);
-//   _2 = const ();
-//   StorageLive(_3);
-//   _3 = const ();
-//   _1 = const {transmute(()): ((), ())};
-//   StorageDead(_3);
-//   StorageDead(_2);
-//   StorageDead(_1);
-//   StorageLive(_4);
-//   StorageLive(_6);
-//   _6 = const ();
-//   StorageLive(_7);
-//   _7 = const ();
-//   StorageDead(_7);
-//   StorageDead(_6);
-//   _4 = const use_zst(const {transmute(()): ((), ())}) -> bb1;
-// }
-// bb1: {
-//   StorageDead(_4);
-//   StorageLive(_8);
-//   StorageLive(_10);
-//   StorageLive(_11);
-//   _11 = const {transmute(0x28) : Temp};
-//   _10 = const 40u8;
-//   StorageDead(_10);
-//   _8 = const use_u8(const 42u8) -> bb2;
-// }
-// bb2: {
-//   StorageDead(_11);
-//   StorageDead(_8);
-//   return;
-// }
-// END rustc.main.SimplifyLocals.before.mir
-// START rustc.main.SimplifyLocals.after.mir
-// let mut _0: ();
-// let _1: ();
-// let _2: ();
-// scope 1 {
-// }
-// bb0: {
-//   StorageLive(_1);
-//   _1 = const use_zst(const {transmute(()): ((), ())}) -> bb1;
-// }
-// bb1: {
-//   StorageDead(_1);
-//   StorageLive(_2);
-//   _2 = const use_u8(const 42u8) -> bb2;
-// }
-// bb2: {
-//   StorageDead(_2);
-//   return;
-// }
-// END rustc.main.SimplifyLocals.after.mir
diff --git a/src/test/mir-opt/simplify-locals-removes-unused-consts/rustc.main.SimplifyLocals.diff b/src/test/mir-opt/simplify-locals-removes-unused-consts/rustc.main.SimplifyLocals.diff
new file mode 100644
index 00000000000..15deb3e31bd
--- /dev/null
+++ b/src/test/mir-opt/simplify-locals-removes-unused-consts/rustc.main.SimplifyLocals.diff
@@ -0,0 +1,132 @@
+- // MIR for `main` before SimplifyLocals
++ // MIR for `main` after SimplifyLocals
+  
+  fn main() -> () {
+      let mut _0: ();                      // return place in scope 0 at $DIR/simplify-locals-removes-unused-consts.rs:12:11: 12:11
+-     let mut _1: ((), ());                // in scope 0 at $DIR/simplify-locals-removes-unused-consts.rs:13:20: 13:28
+-     let mut _2: ();                      // in scope 0 at $DIR/simplify-locals-removes-unused-consts.rs:13:21: 13:23
+-     let mut _3: ();                      // in scope 0 at $DIR/simplify-locals-removes-unused-consts.rs:13:25: 13:27
+-     let _4: ();                          // in scope 0 at $DIR/simplify-locals-removes-unused-consts.rs:14:5: 14:22
+-     let mut _5: ((), ());                // in scope 0 at $DIR/simplify-locals-removes-unused-consts.rs:14:13: 14:21
+-     let mut _6: ();                      // in scope 0 at $DIR/simplify-locals-removes-unused-consts.rs:14:14: 14:16
+-     let mut _7: ();                      // in scope 0 at $DIR/simplify-locals-removes-unused-consts.rs:14:18: 14:20
+-     let _8: ();                          // in scope 0 at $DIR/simplify-locals-removes-unused-consts.rs:16:5: 16:35
+-     let mut _9: u8;                      // in scope 0 at $DIR/simplify-locals-removes-unused-consts.rs:16:12: 16:34
+-     let mut _10: u8;                     // in scope 0 at $DIR/simplify-locals-removes-unused-consts.rs:16:12: 16:30
+-     let mut _11: Temp;                   // in scope 0 at $DIR/simplify-locals-removes-unused-consts.rs:16:12: 16:28
++     let _1: ();                          // in scope 0 at $DIR/simplify-locals-removes-unused-consts.rs:14:5: 14:22
++     let _2: ();                          // in scope 0 at $DIR/simplify-locals-removes-unused-consts.rs:16:5: 16:35
+      scope 1 {
+      }
+  
+      bb0: {
+-         StorageLive(_1);                 // bb0[0]: scope 0 at $DIR/simplify-locals-removes-unused-consts.rs:13:20: 13:28
+-         StorageLive(_2);                 // bb0[1]: scope 0 at $DIR/simplify-locals-removes-unused-consts.rs:13:21: 13:23
+-         _2 = const ();                   // bb0[2]: scope 0 at $DIR/simplify-locals-removes-unused-consts.rs:13:21: 13:23
++         StorageLive(_1);                 // bb0[0]: scope 1 at $DIR/simplify-locals-removes-unused-consts.rs:14:5: 14:22
++         _1 = const use_zst(const {transmute(()): ((), ())}) -> bb1; // bb0[1]: scope 1 at $DIR/simplify-locals-removes-unused-consts.rs:14:5: 14:22
+                                           // ty::Const
+-                                          // + ty: ()
+-                                          // + val: Value(Scalar(<ZST>))
+-                                          // mir::Constant
+-                                          // + span: $DIR/simplify-locals-removes-unused-consts.rs:13:21: 13:23
+-                                          // + literal: Const { ty: (), val: Value(Scalar(<ZST>)) }
+-         StorageLive(_3);                 // bb0[3]: scope 0 at $DIR/simplify-locals-removes-unused-consts.rs:13:25: 13:27
+-         _3 = const ();                   // bb0[4]: scope 0 at $DIR/simplify-locals-removes-unused-consts.rs:13:25: 13:27
+-                                          // ty::Const
+-                                          // + ty: ()
+-                                          // + val: Value(Scalar(<ZST>))
+-                                          // mir::Constant
+-                                          // + span: $DIR/simplify-locals-removes-unused-consts.rs:13:25: 13:27
+-                                          // + literal: Const { ty: (), val: Value(Scalar(<ZST>)) }
+-         _1 = const {transmute(()): ((), ())}; // bb0[5]: scope 0 at $DIR/simplify-locals-removes-unused-consts.rs:13:20: 13:28
+-                                          // ty::Const
+-                                          // + ty: ((), ())
+-                                          // + val: Value(Scalar(<ZST>))
+-                                          // mir::Constant
+-                                          // + span: $DIR/simplify-locals-removes-unused-consts.rs:13:20: 13:28
+-                                          // + literal: Const { ty: ((), ()), val: Value(Scalar(<ZST>)) }
+-         StorageDead(_3);                 // bb0[6]: scope 0 at $DIR/simplify-locals-removes-unused-consts.rs:13:27: 13:28
+-         StorageDead(_2);                 // bb0[7]: scope 0 at $DIR/simplify-locals-removes-unused-consts.rs:13:27: 13:28
+-         StorageDead(_1);                 // bb0[8]: scope 0 at $DIR/simplify-locals-removes-unused-consts.rs:13:28: 13:29
+-         StorageLive(_4);                 // bb0[9]: scope 1 at $DIR/simplify-locals-removes-unused-consts.rs:14:5: 14:22
+-         StorageLive(_6);                 // bb0[10]: scope 1 at $DIR/simplify-locals-removes-unused-consts.rs:14:14: 14:16
+-         _6 = const ();                   // bb0[11]: scope 1 at $DIR/simplify-locals-removes-unused-consts.rs:14:14: 14:16
+-                                          // ty::Const
+-                                          // + ty: ()
+-                                          // + val: Value(Scalar(<ZST>))
+-                                          // mir::Constant
+-                                          // + span: $DIR/simplify-locals-removes-unused-consts.rs:14:14: 14:16
+-                                          // + literal: Const { ty: (), val: Value(Scalar(<ZST>)) }
+-         StorageLive(_7);                 // bb0[12]: scope 1 at $DIR/simplify-locals-removes-unused-consts.rs:14:18: 14:20
+-         _7 = const ();                   // bb0[13]: scope 1 at $DIR/simplify-locals-removes-unused-consts.rs:14:18: 14:20
+-                                          // ty::Const
+-                                          // + ty: ()
+-                                          // + val: Value(Scalar(<ZST>))
+-                                          // mir::Constant
+-                                          // + span: $DIR/simplify-locals-removes-unused-consts.rs:14:18: 14:20
+-                                          // + literal: Const { ty: (), val: Value(Scalar(<ZST>)) }
+-         StorageDead(_7);                 // bb0[14]: scope 1 at $DIR/simplify-locals-removes-unused-consts.rs:14:20: 14:21
+-         StorageDead(_6);                 // bb0[15]: scope 1 at $DIR/simplify-locals-removes-unused-consts.rs:14:20: 14:21
+-         _4 = const use_zst(const {transmute(()): ((), ())}) -> bb1; // bb0[16]: scope 1 at $DIR/simplify-locals-removes-unused-consts.rs:14:5: 14:22
+-                                          // ty::Const
+                                           // + ty: fn(((), ())) {use_zst}
+                                           // + val: Value(Scalar(<ZST>))
+                                           // mir::Constant
+                                           // + span: $DIR/simplify-locals-removes-unused-consts.rs:14:5: 14:12
+                                           // + literal: Const { ty: fn(((), ())) {use_zst}, val: Value(Scalar(<ZST>)) }
+                                           // ty::Const
+                                           // + ty: ((), ())
+                                           // + val: Value(Scalar(<ZST>))
+                                           // mir::Constant
+                                           // + span: $DIR/simplify-locals-removes-unused-consts.rs:14:13: 14:21
+                                           // + literal: Const { ty: ((), ()), val: Value(Scalar(<ZST>)) }
+      }
+  
+      bb1: {
+-         StorageDead(_4);                 // bb1[0]: scope 1 at $DIR/simplify-locals-removes-unused-consts.rs:14:22: 14:23
+-         StorageLive(_8);                 // bb1[1]: scope 1 at $DIR/simplify-locals-removes-unused-consts.rs:16:5: 16:35
+-         StorageLive(_10);                // bb1[2]: scope 1 at $DIR/simplify-locals-removes-unused-consts.rs:16:12: 16:30
+-         StorageLive(_11);                // bb1[3]: scope 1 at $DIR/simplify-locals-removes-unused-consts.rs:16:12: 16:28
+-         _11 = const {transmute(0x28): Temp}; // bb1[4]: scope 1 at $DIR/simplify-locals-removes-unused-consts.rs:16:12: 16:28
++         StorageDead(_1);                 // bb1[0]: scope 1 at $DIR/simplify-locals-removes-unused-consts.rs:14:22: 14:23
++         StorageLive(_2);                 // bb1[1]: scope 1 at $DIR/simplify-locals-removes-unused-consts.rs:16:5: 16:35
++         _2 = const use_u8(const 42u8) -> bb2; // bb1[2]: scope 1 at $DIR/simplify-locals-removes-unused-consts.rs:16:5: 16:35
+                                           // ty::Const
+-                                          // + ty: Temp
+-                                          // + val: Value(Scalar(0x28))
+-                                          // mir::Constant
+-                                          // + span: $DIR/simplify-locals-removes-unused-consts.rs:16:12: 16:28
+-                                          // + literal: Const { ty: Temp, val: Value(Scalar(0x28)) }
+-         _10 = const 40u8;                // bb1[5]: scope 1 at $DIR/simplify-locals-removes-unused-consts.rs:16:12: 16:30
+-                                          // ty::Const
+-                                          // + ty: u8
+-                                          // + val: Value(Scalar(0x28))
+-                                          // mir::Constant
+-                                          // + span: $DIR/simplify-locals-removes-unused-consts.rs:16:12: 16:30
+-                                          // + literal: Const { ty: u8, val: Value(Scalar(0x28)) }
+-         StorageDead(_10);                // bb1[6]: scope 1 at $DIR/simplify-locals-removes-unused-consts.rs:16:33: 16:34
+-         _8 = const use_u8(const 42u8) -> bb2; // bb1[7]: scope 1 at $DIR/simplify-locals-removes-unused-consts.rs:16:5: 16:35
+-                                          // ty::Const
+                                           // + ty: fn(u8) {use_u8}
+                                           // + val: Value(Scalar(<ZST>))
+                                           // mir::Constant
+                                           // + span: $DIR/simplify-locals-removes-unused-consts.rs:16:5: 16:11
+                                           // + literal: Const { ty: fn(u8) {use_u8}, val: Value(Scalar(<ZST>)) }
+                                           // ty::Const
+                                           // + ty: u8
+                                           // + val: Value(Scalar(0x2a))
+                                           // mir::Constant
+                                           // + span: $DIR/simplify-locals-removes-unused-consts.rs:16:12: 16:34
+                                           // + literal: Const { ty: u8, val: Value(Scalar(0x2a)) }
+      }
+  
+      bb2: {
+-         StorageDead(_11);                // bb2[0]: scope 1 at $DIR/simplify-locals-removes-unused-consts.rs:16:35: 16:36
+-         StorageDead(_8);                 // bb2[1]: scope 1 at $DIR/simplify-locals-removes-unused-consts.rs:16:35: 16:36
+-         return;                          // bb2[2]: scope 0 at $DIR/simplify-locals-removes-unused-consts.rs:17:2: 17:2
++         StorageDead(_2);                 // bb2[0]: scope 1 at $DIR/simplify-locals-removes-unused-consts.rs:16:35: 16:36
++         return;                          // bb2[1]: scope 0 at $DIR/simplify-locals-removes-unused-consts.rs:17:2: 17:2
+      }
+  }
+  
diff --git a/src/test/mir-opt/simplify_cfg.rs b/src/test/mir-opt/simplify_cfg.rs
index ef843f71581..8d588a39d65 100644
--- a/src/test/mir-opt/simplify_cfg.rs
+++ b/src/test/mir-opt/simplify_cfg.rs
@@ -1,5 +1,7 @@
 // Test that the goto chain starting from bb0 is collapsed.
 
+// EMIT_MIR rustc.main.SimplifyCfg-initial.diff
+// EMIT_MIR rustc.main.SimplifyCfg-early-opt.diff
 fn main() {
     loop {
         if bar() {
@@ -12,43 +14,3 @@ fn main() {
 fn bar() -> bool {
     true
 }
-
-// END RUST SOURCE
-// START rustc.main.SimplifyCfg-initial.before.mir
-//     bb0: {
-//         goto -> bb1;
-//     }
-//     bb1: {
-//         falseUnwind -> [real: bb3, cleanup: bb4];
-//     }
-//     ...
-//     bb11: {
-//         ...
-//         goto -> bb1;
-//     }
-// END rustc.main.SimplifyCfg-initial.before.mir
-// START rustc.main.SimplifyCfg-initial.after.mir
-//     bb0: {
-//         falseUnwind -> [real: bb1, cleanup: bb2];
-//     }
-//     ...
-//     bb5: {
-//         ...
-//         goto -> bb0;
-//     }
-// END rustc.main.SimplifyCfg-initial.after.mir
-// START rustc.main.SimplifyCfg-early-opt.before.mir
-//     bb0: {
-//         goto -> bb1;
-//     }
-//     bb1: {
-//         StorageLive(_2);
-//         _2 = const bar() -> bb3;
-//     }
-// END rustc.main.SimplifyCfg-early-opt.before.mir
-// START rustc.main.SimplifyCfg-early-opt.after.mir
-//     bb0: {
-//         StorageLive(_2);
-//         _2 = const bar() -> bb1;
-//     }
-// END rustc.main.SimplifyCfg-early-opt.after.mir
diff --git a/src/test/mir-opt/simplify_cfg/rustc.main.SimplifyCfg-early-opt.diff b/src/test/mir-opt/simplify_cfg/rustc.main.SimplifyCfg-early-opt.diff
new file mode 100644
index 00000000000..9225bcd0b65
--- /dev/null
+++ b/src/test/mir-opt/simplify_cfg/rustc.main.SimplifyCfg-early-opt.diff
@@ -0,0 +1,62 @@
+- // MIR for `main` before SimplifyCfg-early-opt
++ // MIR for `main` after SimplifyCfg-early-opt
+  
+  fn main() -> () {
+      let mut _0: ();                      // return place in scope 0 at $DIR/simplify_cfg.rs:5:11: 5:11
+      let mut _1: ();                      // in scope 0 at $DIR/simplify_cfg.rs:5:1: 11:2
+      let mut _2: bool;                    // in scope 0 at $DIR/simplify_cfg.rs:7:12: 7:17
+      let mut _3: !;                       // in scope 0 at $DIR/simplify_cfg.rs:7:18: 9:10
+  
+      bb0: {
+-         goto -> bb1;                     // bb0[0]: scope 0 at $DIR/simplify_cfg.rs:6:5: 10:6
+-     }
+- 
+-     bb1: {
+-         StorageLive(_2);                 // bb1[0]: scope 0 at $DIR/simplify_cfg.rs:7:12: 7:17
+-         _2 = const bar() -> bb3;         // bb1[1]: scope 0 at $DIR/simplify_cfg.rs:7:12: 7:17
++         StorageLive(_2);                 // bb0[0]: scope 0 at $DIR/simplify_cfg.rs:7:12: 7:17
++         _2 = const bar() -> bb1;         // bb0[1]: scope 0 at $DIR/simplify_cfg.rs:7:12: 7:17
+                                           // ty::Const
+                                           // + ty: fn() -> bool {bar}
+                                           // + val: Value(Scalar(<ZST>))
+                                           // mir::Constant
+                                           // + span: $DIR/simplify_cfg.rs:7:12: 7:15
+                                           // + literal: Const { ty: fn() -> bool {bar}, val: Value(Scalar(<ZST>)) }
+      }
+  
+-     bb2 (cleanup): {
+-         resume;                          // bb2[0]: scope 0 at $DIR/simplify_cfg.rs:5:1: 11:2
++     bb1: {
++         switchInt(_2) -> [false: bb2, otherwise: bb3]; // bb1[0]: scope 0 at $DIR/simplify_cfg.rs:7:9: 9:10
+      }
+  
+-     bb3: {
+-         nop;                             // bb3[0]: scope 0 at $DIR/simplify_cfg.rs:7:12: 7:17
+-         switchInt(_2) -> [false: bb5, otherwise: bb4]; // bb3[1]: scope 0 at $DIR/simplify_cfg.rs:7:9: 9:10
++     bb2: {
++         _1 = ();                         // bb2[0]: scope 0 at $DIR/simplify_cfg.rs:7:9: 9:10
++         StorageDead(_2);                 // bb2[1]: scope 0 at $DIR/simplify_cfg.rs:10:5: 10:6
++         goto -> bb0;                     // bb2[2]: scope 0 at $DIR/simplify_cfg.rs:6:5: 10:6
+      }
+  
+-     bb4: {
+-         goto -> bb6;                     // bb4[0]: scope 0 at $DIR/simplify_cfg.rs:7:9: 9:10
+-     }
+- 
+-     bb5: {
+-         _1 = ();                         // bb5[0]: scope 0 at $DIR/simplify_cfg.rs:7:9: 9:10
+-         StorageDead(_2);                 // bb5[1]: scope 0 at $DIR/simplify_cfg.rs:10:5: 10:6
+-         goto -> bb0;                     // bb5[2]: scope 0 at $DIR/simplify_cfg.rs:6:5: 10:6
+-     }
+- 
+-     bb6: {
+-         _0 = ();                         // bb6[0]: scope 0 at $DIR/simplify_cfg.rs:8:13: 8:18
+-         StorageDead(_2);                 // bb6[1]: scope 0 at $DIR/simplify_cfg.rs:10:5: 10:6
+-         return;                          // bb6[2]: scope 0 at $DIR/simplify_cfg.rs:11:2: 11:2
++     bb3: {
++         _0 = ();                         // bb3[0]: scope 0 at $DIR/simplify_cfg.rs:8:13: 8:18
++         StorageDead(_2);                 // bb3[1]: scope 0 at $DIR/simplify_cfg.rs:10:5: 10:6
++         return;                          // bb3[2]: scope 0 at $DIR/simplify_cfg.rs:11:2: 11:2
+      }
+  }
+  
diff --git a/src/test/mir-opt/simplify_cfg/rustc.main.SimplifyCfg-initial.diff b/src/test/mir-opt/simplify_cfg/rustc.main.SimplifyCfg-initial.diff
new file mode 100644
index 00000000000..856ee3508cb
--- /dev/null
+++ b/src/test/mir-opt/simplify_cfg/rustc.main.SimplifyCfg-initial.diff
@@ -0,0 +1,96 @@
+- // MIR for `main` before SimplifyCfg-initial
++ // MIR for `main` after SimplifyCfg-initial
+  
+  fn main() -> () {
+      let mut _0: ();                      // return place in scope 0 at $DIR/simplify_cfg.rs:5:11: 5:11
+      let mut _1: ();                      // in scope 0 at $DIR/simplify_cfg.rs:5:1: 11:2
+      let mut _2: bool;                    // in scope 0 at $DIR/simplify_cfg.rs:7:12: 7:17
+      let mut _3: !;                       // in scope 0 at $DIR/simplify_cfg.rs:7:18: 9:10
+  
+      bb0: {
+-         goto -> bb1;                     // bb0[0]: scope 0 at $DIR/simplify_cfg.rs:6:5: 10:6
++         falseUnwind -> [real: bb1, cleanup: bb2]; // bb0[0]: scope 0 at $DIR/simplify_cfg.rs:6:5: 10:6
+      }
+  
+      bb1: {
+-         falseUnwind -> [real: bb3, cleanup: bb4]; // bb1[0]: scope 0 at $DIR/simplify_cfg.rs:6:5: 10:6
+-     }
+- 
+-     bb2: {
+-         goto -> bb13;                    // bb2[0]: scope 0 at $DIR/simplify_cfg.rs:11:2: 11:2
+-     }
+- 
+-     bb3: {
+-         StorageLive(_2);                 // bb3[0]: scope 0 at $DIR/simplify_cfg.rs:7:12: 7:17
+-         _2 = const bar() -> [return: bb5, unwind: bb4]; // bb3[1]: scope 0 at $DIR/simplify_cfg.rs:7:12: 7:17
++         StorageLive(_2);                 // bb1[0]: scope 0 at $DIR/simplify_cfg.rs:7:12: 7:17
++         _2 = const bar() -> [return: bb3, unwind: bb2]; // bb1[1]: scope 0 at $DIR/simplify_cfg.rs:7:12: 7:17
+                                           // ty::Const
+                                           // + ty: fn() -> bool {bar}
+                                           // + val: Value(Scalar(<ZST>))
+                                           // mir::Constant
+                                           // + span: $DIR/simplify_cfg.rs:7:12: 7:15
+                                           // + literal: Const { ty: fn() -> bool {bar}, val: Value(Scalar(<ZST>)) }
+      }
+  
+-     bb4 (cleanup): {
+-         resume;                          // bb4[0]: scope 0 at $DIR/simplify_cfg.rs:5:1: 11:2
++     bb2 (cleanup): {
++         resume;                          // bb2[0]: scope 0 at $DIR/simplify_cfg.rs:5:1: 11:2
+      }
+  
+-     bb5: {
+-         FakeRead(ForMatchedPlace, _2);   // bb5[0]: scope 0 at $DIR/simplify_cfg.rs:7:12: 7:17
+-         switchInt(_2) -> [false: bb7, otherwise: bb6]; // bb5[1]: scope 0 at $DIR/simplify_cfg.rs:7:9: 9:10
++     bb3: {
++         FakeRead(ForMatchedPlace, _2);   // bb3[0]: scope 0 at $DIR/simplify_cfg.rs:7:12: 7:17
++         switchInt(_2) -> [false: bb5, otherwise: bb4]; // bb3[1]: scope 0 at $DIR/simplify_cfg.rs:7:9: 9:10
+      }
+  
+-     bb6: {
+-         falseEdges -> [real: bb8, imaginary: bb7]; // bb6[0]: scope 0 at $DIR/simplify_cfg.rs:7:9: 9:10
++     bb4: {
++         falseEdges -> [real: bb6, imaginary: bb5]; // bb4[0]: scope 0 at $DIR/simplify_cfg.rs:7:9: 9:10
+      }
+  
+-     bb7: {
+-         _1 = ();                         // bb7[0]: scope 0 at $DIR/simplify_cfg.rs:7:9: 9:10
+-         goto -> bb12;                    // bb7[1]: scope 0 at $DIR/simplify_cfg.rs:7:9: 9:10
++     bb5: {
++         _1 = ();                         // bb5[0]: scope 0 at $DIR/simplify_cfg.rs:7:9: 9:10
++         StorageDead(_2);                 // bb5[1]: scope 0 at $DIR/simplify_cfg.rs:10:5: 10:6
++         goto -> bb0;                     // bb5[2]: scope 0 at $DIR/simplify_cfg.rs:6:5: 10:6
+      }
+  
+-     bb8: {
+-         _0 = ();                         // bb8[0]: scope 0 at $DIR/simplify_cfg.rs:8:13: 8:18
+-         goto -> bb9;                     // bb8[1]: scope 0 at $DIR/simplify_cfg.rs:8:13: 8:18
+-     }
+- 
+-     bb9: {
+-         StorageDead(_2);                 // bb9[0]: scope 0 at $DIR/simplify_cfg.rs:10:5: 10:6
+-         goto -> bb2;                     // bb9[1]: scope 0 at $DIR/simplify_cfg.rs:8:13: 8:18
+-     }
+- 
+-     bb10: {
+-         unreachable;                     // bb10[0]: scope 0 at $DIR/simplify_cfg.rs:7:18: 9:10
+-     }
+- 
+-     bb11: {
+-         goto -> bb12;                    // bb11[0]: scope 0 at $DIR/simplify_cfg.rs:7:9: 9:10
+-     }
+- 
+-     bb12: {
+-         StorageDead(_2);                 // bb12[0]: scope 0 at $DIR/simplify_cfg.rs:10:5: 10:6
+-         goto -> bb1;                     // bb12[1]: scope 0 at $DIR/simplify_cfg.rs:6:5: 10:6
+-     }
+- 
+-     bb13: {
+-         return;                          // bb13[0]: scope 0 at $DIR/simplify_cfg.rs:11:2: 11:2
++     bb6: {
++         _0 = ();                         // bb6[0]: scope 0 at $DIR/simplify_cfg.rs:8:13: 8:18
++         StorageDead(_2);                 // bb6[1]: scope 0 at $DIR/simplify_cfg.rs:10:5: 10:6
++         return;                          // bb6[2]: scope 0 at $DIR/simplify_cfg.rs:11:2: 11:2
+      }
+  }
+  
diff --git a/src/test/mir-opt/simplify_if.rs b/src/test/mir-opt/simplify_if.rs
index 471c1df3300..e2d3ebe69c4 100644
--- a/src/test/mir-opt/simplify_if.rs
+++ b/src/test/mir-opt/simplify_if.rs
@@ -1,19 +1,9 @@
+#[inline(never)]
+fn noop() {}
+
+// EMIT_MIR rustc.main.SimplifyBranches-after-const-prop.diff
 fn main() {
     if false {
-        println!("hello world!");
+        noop();
     }
 }
-
-// END RUST SOURCE
-// START rustc.main.SimplifyBranches-after-const-prop.before.mir
-// bb0: {
-//     ...
-//     switchInt(const false) -> [false: bb1, otherwise: bb2];
-// }
-// END rustc.main.SimplifyBranches-after-const-prop.before.mir
-// START rustc.main.SimplifyBranches-after-const-prop.after.mir
-// bb0: {
-//     ...
-//     goto -> bb1;
-// }
-// END rustc.main.SimplifyBranches-after-const-prop.after.mir
diff --git a/src/test/mir-opt/simplify_if/rustc.main.SimplifyBranches-after-const-prop.diff b/src/test/mir-opt/simplify_if/rustc.main.SimplifyBranches-after-const-prop.diff
new file mode 100644
index 00000000000..9e53a0f18af
--- /dev/null
+++ b/src/test/mir-opt/simplify_if/rustc.main.SimplifyBranches-after-const-prop.diff
@@ -0,0 +1,55 @@
+- // MIR for `main` before SimplifyBranches-after-const-prop
++ // MIR for `main` after SimplifyBranches-after-const-prop
+  
+  fn main() -> () {
+      let mut _0: ();                      // return place in scope 0 at $DIR/simplify_if.rs:5:11: 5:11
+      let mut _1: bool;                    // in scope 0 at $DIR/simplify_if.rs:6:8: 6:13
+      let _2: ();                          // in scope 0 at $DIR/simplify_if.rs:7:9: 7:15
+  
+      bb0: {
+          StorageLive(_1);                 // bb0[0]: scope 0 at $DIR/simplify_if.rs:6:8: 6:13
+          _1 = const false;                // bb0[1]: scope 0 at $DIR/simplify_if.rs:6:8: 6:13
+                                           // ty::Const
+                                           // + ty: bool
+                                           // + val: Value(Scalar(0x00))
+                                           // mir::Constant
+                                           // + span: $DIR/simplify_if.rs:6:8: 6:13
+                                           // + literal: Const { ty: bool, val: Value(Scalar(0x00)) }
+-         switchInt(const false) -> [false: bb1, otherwise: bb2]; // bb0[2]: scope 0 at $DIR/simplify_if.rs:6:5: 8:6
+-                                          // ty::Const
+-                                          // + ty: bool
+-                                          // + val: Value(Scalar(0x00))
+-                                          // mir::Constant
+-                                          // + span: $DIR/simplify_if.rs:6:5: 8:6
+-                                          // + literal: Const { ty: bool, val: Value(Scalar(0x00)) }
++         goto -> bb1;                     // bb0[2]: scope 0 at $DIR/simplify_if.rs:6:5: 8:6
+      }
+  
+      bb1: {
+          _0 = ();                         // bb1[0]: scope 0 at $DIR/simplify_if.rs:6:5: 8:6
+          goto -> bb4;                     // bb1[1]: scope 0 at $DIR/simplify_if.rs:6:5: 8:6
+      }
+  
+      bb2: {
+          StorageLive(_2);                 // bb2[0]: scope 0 at $DIR/simplify_if.rs:7:9: 7:15
+          _2 = const noop() -> bb3;        // bb2[1]: scope 0 at $DIR/simplify_if.rs:7:9: 7:15
+                                           // ty::Const
+                                           // + ty: fn() {noop}
+                                           // + val: Value(Scalar(<ZST>))
+                                           // mir::Constant
+                                           // + span: $DIR/simplify_if.rs:7:9: 7:13
+                                           // + literal: Const { ty: fn() {noop}, val: Value(Scalar(<ZST>)) }
+      }
+  
+      bb3: {
+          StorageDead(_2);                 // bb3[0]: scope 0 at $DIR/simplify_if.rs:7:15: 7:16
+          _0 = ();                         // bb3[1]: scope 0 at $DIR/simplify_if.rs:6:14: 8:6
+          goto -> bb4;                     // bb3[2]: scope 0 at $DIR/simplify_if.rs:6:5: 8:6
+      }
+  
+      bb4: {
+          StorageDead(_1);                 // bb4[0]: scope 0 at $DIR/simplify_if.rs:9:1: 9:2
+          return;                          // bb4[1]: scope 0 at $DIR/simplify_if.rs:9:2: 9:2
+      }
+  }
+  
diff --git a/src/test/mir-opt/simplify_match.rs b/src/test/mir-opt/simplify_match.rs
index 8624899a0ab..233f9ff4c40 100644
--- a/src/test/mir-opt/simplify_match.rs
+++ b/src/test/mir-opt/simplify_match.rs
@@ -1,22 +1,10 @@
+#[inline(never)]
+fn noop() {}
+
+// EMIT_MIR rustc.main.SimplifyBranches-after-copy-prop.diff
 fn main() {
     match { let x = false; x } {
-        true => println!("hello world!"),
+        true => noop(),
         false => {},
     }
 }
-
-// END RUST SOURCE
-// START rustc.main.SimplifyBranches-after-copy-prop.before.mir
-// bb0: {
-//     ...
-//     switchInt(const false) -> [false: bb1, otherwise: bb2];
-// }
-// bb1: {
-// END rustc.main.SimplifyBranches-after-copy-prop.before.mir
-// START rustc.main.SimplifyBranches-after-copy-prop.after.mir
-// bb0: {
-//     ...
-//     goto -> bb1;
-// }
-// bb1: {
-// END rustc.main.SimplifyBranches-after-copy-prop.after.mir
diff --git a/src/test/mir-opt/simplify_match/rustc.main.SimplifyBranches-after-copy-prop.diff b/src/test/mir-opt/simplify_match/rustc.main.SimplifyBranches-after-copy-prop.diff
new file mode 100644
index 00000000000..5429032b099
--- /dev/null
+++ b/src/test/mir-opt/simplify_match/rustc.main.SimplifyBranches-after-copy-prop.diff
@@ -0,0 +1,48 @@
+- // MIR for `main` before SimplifyBranches-after-copy-prop
++ // MIR for `main` after SimplifyBranches-after-copy-prop
+  
+  fn main() -> () {
+      let mut _0: ();                      // return place in scope 0 at $DIR/simplify_match.rs:5:11: 5:11
+      let mut _1: bool;                    // in scope 0 at $DIR/simplify_match.rs:6:11: 6:31
+      let _2: bool;                        // in scope 0 at $DIR/simplify_match.rs:6:17: 6:18
+      scope 1 {
+          debug x => _2;                   // in scope 1 at $DIR/simplify_match.rs:6:17: 6:18
+      }
+  
+      bb0: {
+          nop;                             // bb0[0]: scope 0 at $DIR/simplify_match.rs:6:11: 6:31
+          nop;                             // bb0[1]: scope 0 at $DIR/simplify_match.rs:6:17: 6:18
+          nop;                             // bb0[2]: scope 0 at $DIR/simplify_match.rs:6:21: 6:26
+          nop;                             // bb0[3]: scope 1 at $DIR/simplify_match.rs:6:28: 6:29
+          nop;                             // bb0[4]: scope 0 at $DIR/simplify_match.rs:6:30: 6:31
+-         switchInt(const false) -> [false: bb1, otherwise: bb2]; // bb0[5]: scope 0 at $DIR/simplify_match.rs:7:9: 7:13
+-                                          // ty::Const
+-                                          // + ty: bool
+-                                          // + val: Value(Scalar(0x00))
+-                                          // mir::Constant
+-                                          // + span: $DIR/simplify_match.rs:6:21: 6:26
+-                                          // + literal: Const { ty: bool, val: Value(Scalar(0x00)) }
++         goto -> bb1;                     // bb0[5]: scope 0 at $DIR/simplify_match.rs:7:9: 7:13
+      }
+  
+      bb1: {
+          nop;                             // bb1[0]: scope 0 at $DIR/simplify_match.rs:8:18: 8:20
+          goto -> bb3;                     // bb1[1]: scope 0 at $DIR/simplify_match.rs:6:5: 9:6
+      }
+  
+      bb2: {
+          _0 = const noop() -> bb3;        // bb2[0]: scope 0 at $DIR/simplify_match.rs:7:17: 7:23
+                                           // ty::Const
+                                           // + ty: fn() {noop}
+                                           // + val: Value(Scalar(<ZST>))
+                                           // mir::Constant
+                                           // + span: $DIR/simplify_match.rs:7:17: 7:21
+                                           // + literal: Const { ty: fn() {noop}, val: Value(Scalar(<ZST>)) }
+      }
+  
+      bb3: {
+          nop;                             // bb3[0]: scope 0 at $DIR/simplify_match.rs:10:1: 10:2
+          return;                          // bb3[1]: scope 0 at $DIR/simplify_match.rs:10:2: 10:2
+      }
+  }
+  
diff --git a/src/test/mir-opt/simplify_try.rs b/src/test/mir-opt/simplify_try.rs
index 78a7f722538..88a0451a76f 100644
--- a/src/test/mir-opt/simplify_try.rs
+++ b/src/test/mir-opt/simplify_try.rs
@@ -1,3 +1,7 @@
+// EMIT_MIR rustc.try_identity.SimplifyArmIdentity.diff
+// EMIT_MIR rustc.try_identity.SimplifyBranchSame.after.mir
+// EMIT_MIR rustc.try_identity.SimplifyLocals.after.mir
+
 fn try_identity(x: Result<u32, i32>) -> Result<u32, i32> {
     let y = x?;
     Ok(y)
@@ -6,210 +10,3 @@ fn try_identity(x: Result<u32, i32>) -> Result<u32, i32> {
 fn main() {
     let _ = try_identity(Ok(0));
 }
-
-// END RUST SOURCE
-// START rustc.try_identity.SimplifyArmIdentity.before.mir
-// fn try_identity(_1: std::result::Result<u32, i32>) -> std::result::Result<u32, i32> {
-//     debug x => _1;
-//     let mut _0: std::result::Result<u32, i32>;
-//     let _2: u32;
-//     let mut _3: std::result::Result<u32, i32>;
-//     let mut _4: std::result::Result<u32, i32>;
-//     let mut _5: isize;
-//     let _6: i32;
-//     let mut _7: !;
-//     let mut _8: i32;
-//     let mut _9: i32;
-//     let _10: u32;
-//     let mut _11: u32;
-//     scope 1 {
-//         debug y => _10;
-//     }
-//     scope 2 {
-//         debug err => _6;
-//         scope 3 {
-//             scope 7 {
-//                 debug t => _6;
-//             }
-//             scope 8 {
-//                 debug v => _6;
-//                 let mut _12: i32;
-//             }
-//         }
-//     }
-//     scope 4 {
-//         debug val => _10;
-//         scope 5 {
-//         }
-//     }
-//     scope 6 {
-//         debug self => _1;
-//     }
-//     bb0: {
-//         _5 = discriminant(_1);
-//         switchInt(move _5) -> [0isize: bb1, otherwise: bb2];
-//     }
-//     bb1: {
-//         _10 = ((_1 as Ok).0: u32);
-//         ((_0 as Ok).0: u32) = move _10;
-//         discriminant(_0) = 0;
-//         goto -> bb3;
-//     }
-//     bb2: {
-//         _6 = ((_1 as Err).0: i32);
-//         ((_0 as Err).0: i32) = move _6;
-//         discriminant(_0) = 1;
-//         goto -> bb3;
-//     }
-//     bb3: {
-//         return;
-//     }
-// }
-// END rustc.try_identity.SimplifyArmIdentity.before.mir
-
-// START rustc.try_identity.SimplifyArmIdentity.after.mir
-// fn try_identity(_1: std::result::Result<u32, i32>) -> std::result::Result<u32, i32> {
-//     debug x => _1;
-//     let mut _0: std::result::Result<u32, i32>;
-//     let _2: u32;
-//     let mut _3: std::result::Result<u32, i32>;
-//     let mut _4: std::result::Result<u32, i32>;
-//     let mut _5: isize;
-//     let _6: i32;
-//     let mut _7: !;
-//     let mut _8: i32;
-//     let mut _9: i32;
-//     let _10: u32;
-//     let mut _11: u32;
-//     scope 1 {
-//         debug y => _10;
-//     }
-//     scope 2 {
-//         debug err => _6;
-//         scope 3 {
-//             scope 7 {
-//                 debug t => _6;
-//             }
-//             scope 8 {
-//                 debug v => _6;
-//                 let mut _12: i32;
-//             }
-//         }
-//     }
-//     scope 4 {
-//         debug val => _10;
-//         scope 5 {
-//         }
-//     }
-//     scope 6 {
-//         debug self => _1;
-//     }
-//     bb0: {
-//         _5 = discriminant(_1);
-//         switchInt(move _5) -> [0isize: bb1, otherwise: bb2];
-//     }
-//     bb1: {
-//         _0 = move _1;
-//         nop;
-//         nop;
-//         goto -> bb3;
-//     }
-//     bb2: {
-//         _0 = move _1;
-//         nop;
-//         nop;
-//         goto -> bb3;
-//     }
-//     bb3: {
-//         return;
-//     }
-// }
-// END rustc.try_identity.SimplifyArmIdentity.after.mir
-
-// START rustc.try_identity.SimplifyBranchSame.after.mir
-// fn try_identity(_1: std::result::Result<u32, i32>) -> std::result::Result<u32, i32> {
-//     debug x => _1;
-//     let mut _0: std::result::Result<u32, i32>;
-//     let _2: u32;
-//     let mut _3: std::result::Result<u32, i32>;
-//     let mut _4: std::result::Result<u32, i32>;
-//     let mut _5: isize;
-//     let _6: i32;
-//     let mut _7: !;
-//     let mut _8: i32;
-//     let mut _9: i32;
-//     let _10: u32;
-//     let mut _11: u32;
-//     scope 1 {
-//         debug y => _10;
-//     }
-//     scope 2 {
-//         debug err => _6;
-//         scope 3 {
-//             scope 7 {
-//                 debug t => _6;
-//             }
-//             scope 8 {
-//                 debug v => _6;
-//                 let mut _12: i32;
-//             }
-//         }
-//     }
-//     scope 4 {
-//         debug val => _10;
-//         scope 5 {
-//         }
-//     }
-//     scope 6 {
-//         debug self => _1;
-//     }
-//     bb0: {
-//         _5 = discriminant(_1);
-//         goto -> bb1;
-//     }
-//     bb1: {
-//         _0 = move _1;
-//         nop;
-//         nop;
-//         goto -> bb2;
-//     }
-//     bb2: {
-//         return;
-//     }
-// }
-// END rustc.try_identity.SimplifyBranchSame.after.mir
-
-// START rustc.try_identity.SimplifyLocals.after.mir
-// fn try_identity(_1: std::result::Result<u32, i32>) -> std::result::Result<u32, i32> {
-//     debug x => _1;
-//     let mut _0: std::result::Result<u32, i32>;
-//     let _2: i32;
-//     let _3: u32;
-//     scope 1 {
-//         debug y => _3;
-//     }
-//     scope 2 {
-//         debug err => _2;
-//         scope 3 {
-//             scope 7 {
-//                 debug t => _2;
-//             }
-//             scope 8 {
-//                 debug v => _2;
-//             }
-//         }
-//     }
-//     scope 4 {
-//         debug val => _3;
-//         scope 5 {
-//         }
-//     }
-//     scope 6 {
-//         debug self => _1;
-//     }
-//     bb0: {
-//         _0 = move _1;
-//         return;
-//     }
-// }
-// END rustc.try_identity.SimplifyLocals.after.mir
diff --git a/src/test/mir-opt/simplify_try/rustc.try_identity.SimplifyArmIdentity.diff b/src/test/mir-opt/simplify_try/rustc.try_identity.SimplifyArmIdentity.diff
new file mode 100644
index 00000000000..7ae58919772
--- /dev/null
+++ b/src/test/mir-opt/simplify_try/rustc.try_identity.SimplifyArmIdentity.diff
@@ -0,0 +1,70 @@
+- // MIR for `try_identity` before SimplifyArmIdentity
++ // MIR for `try_identity` after SimplifyArmIdentity
+  
+  fn try_identity(_1: std::result::Result<u32, i32>) -> std::result::Result<u32, i32> {
+      debug x => _1;                       // in scope 0 at $DIR/simplify_try.rs:5:17: 5:18
+      let mut _0: std::result::Result<u32, i32>; // return place in scope 0 at $DIR/simplify_try.rs:5:41: 5:57
+      let _2: u32;                         // in scope 0 at $DIR/simplify_try.rs:6:9: 6:10
+      let mut _3: std::result::Result<u32, i32>; // in scope 0 at $DIR/simplify_try.rs:6:13: 6:15
+      let mut _4: std::result::Result<u32, i32>; // in scope 0 at $DIR/simplify_try.rs:6:13: 6:14
+      let mut _5: isize;                   // in scope 0 at $DIR/simplify_try.rs:6:14: 6:15
+      let _6: i32;                         // in scope 0 at $DIR/simplify_try.rs:6:14: 6:15
+      let mut _7: !;                       // in scope 0 at $DIR/simplify_try.rs:6:14: 6:15
+      let mut _8: i32;                     // in scope 0 at $DIR/simplify_try.rs:6:14: 6:15
+      let mut _9: i32;                     // in scope 0 at $DIR/simplify_try.rs:6:14: 6:15
+      let _10: u32;                        // in scope 0 at $DIR/simplify_try.rs:6:13: 6:15
+      let mut _11: u32;                    // in scope 0 at $DIR/simplify_try.rs:7:8: 7:9
+      scope 1 {
+          debug y => _10;                  // in scope 1 at $DIR/simplify_try.rs:6:9: 6:10
+      }
+      scope 2 {
+          debug err => _6;                 // in scope 2 at $DIR/simplify_try.rs:6:14: 6:15
+          scope 3 {
+              scope 7 {
+                  debug t => _6;           // in scope 7 at $SRC_DIR/libcore/convert/mod.rs:LL:COL: 566:14
+              }
+              scope 8 {
+                  debug v => _6;           // in scope 8 at $SRC_DIR/libcore/result.rs:LL:COL: 1555:20
+                  let mut _12: i32;        // in scope 8 at $DIR/simplify_try.rs:6:14: 6:15
+              }
+          }
+      }
+      scope 4 {
+          debug val => _10;                // in scope 4 at $DIR/simplify_try.rs:6:13: 6:15
+          scope 5 {
+          }
+      }
+      scope 6 {
+          debug self => _1;                // in scope 6 at $SRC_DIR/libcore/result.rs:LL:COL: 1545:24
+      }
+  
+      bb0: {
+          _5 = discriminant(_1);           // bb0[0]: scope 0 at $DIR/simplify_try.rs:6:14: 6:15
+          switchInt(move _5) -> [0isize: bb1, otherwise: bb2]; // bb0[1]: scope 0 at $DIR/simplify_try.rs:6:14: 6:15
+      }
+  
+      bb1: {
+-         _10 = ((_1 as Ok).0: u32);       // bb1[0]: scope 0 at $DIR/simplify_try.rs:6:13: 6:15
+-         ((_0 as Ok).0: u32) = move _10;  // bb1[1]: scope 1 at $DIR/simplify_try.rs:7:5: 7:10
+-         discriminant(_0) = 0;            // bb1[2]: scope 1 at $DIR/simplify_try.rs:7:5: 7:10
++         _0 = move _1;                    // bb1[0]: scope 1 at $DIR/simplify_try.rs:7:5: 7:10
++         nop;                             // bb1[1]: scope 1 at $DIR/simplify_try.rs:7:5: 7:10
++         nop;                             // bb1[2]: scope 1 at $DIR/simplify_try.rs:7:5: 7:10
+          goto -> bb3;                     // bb1[3]: scope 0 at $DIR/simplify_try.rs:8:2: 8:2
+      }
+  
+      bb2: {
+-         _6 = ((_1 as Err).0: i32);       // bb2[0]: scope 0 at $DIR/simplify_try.rs:6:14: 6:15
+-         ((_0 as Err).0: i32) = move _6;  // bb2[1]: scope 8 at $SRC_DIR/libcore/result.rs:LL:COL: 1556:15
+-         discriminant(_0) = 1;            // bb2[2]: scope 8 at $SRC_DIR/libcore/result.rs:LL:COL: 1556:15
++         _0 = move _1;                    // bb2[0]: scope 8 at $SRC_DIR/libcore/result.rs:LL:COL: 1556:15
++         nop;                             // bb2[1]: scope 8 at $SRC_DIR/libcore/result.rs:LL:COL: 1556:15
++         nop;                             // bb2[2]: scope 8 at $SRC_DIR/libcore/result.rs:LL:COL: 1556:15
+          goto -> bb3;                     // bb2[3]: scope 0 at $DIR/simplify_try.rs:6:14: 6:15
+      }
+  
+      bb3: {
+          return;                          // bb3[0]: scope 0 at $DIR/simplify_try.rs:8:2: 8:2
+      }
+  }
+  
diff --git a/src/test/mir-opt/simplify_try/rustc.try_identity.SimplifyBranchSame.after.mir b/src/test/mir-opt/simplify_try/rustc.try_identity.SimplifyBranchSame.after.mir
new file mode 100644
index 00000000000..7d8cfe1d2ee
--- /dev/null
+++ b/src/test/mir-opt/simplify_try/rustc.try_identity.SimplifyBranchSame.after.mir
@@ -0,0 +1,55 @@
+// MIR for `try_identity` after SimplifyBranchSame
+
+fn try_identity(_1: std::result::Result<u32, i32>) -> std::result::Result<u32, i32> {
+    debug x => _1;                       // in scope 0 at $DIR/simplify_try.rs:5:17: 5:18
+    let mut _0: std::result::Result<u32, i32>; // return place in scope 0 at $DIR/simplify_try.rs:5:41: 5:57
+    let _2: u32;                         // in scope 0 at $DIR/simplify_try.rs:6:9: 6:10
+    let mut _3: std::result::Result<u32, i32>; // in scope 0 at $DIR/simplify_try.rs:6:13: 6:15
+    let mut _4: std::result::Result<u32, i32>; // in scope 0 at $DIR/simplify_try.rs:6:13: 6:14
+    let mut _5: isize;                   // in scope 0 at $DIR/simplify_try.rs:6:14: 6:15
+    let _6: i32;                         // in scope 0 at $DIR/simplify_try.rs:6:14: 6:15
+    let mut _7: !;                       // in scope 0 at $DIR/simplify_try.rs:6:14: 6:15
+    let mut _8: i32;                     // in scope 0 at $DIR/simplify_try.rs:6:14: 6:15
+    let mut _9: i32;                     // in scope 0 at $DIR/simplify_try.rs:6:14: 6:15
+    let _10: u32;                        // in scope 0 at $DIR/simplify_try.rs:6:13: 6:15
+    let mut _11: u32;                    // in scope 0 at $DIR/simplify_try.rs:7:8: 7:9
+    scope 1 {
+        debug y => _10;                  // in scope 1 at $DIR/simplify_try.rs:6:9: 6:10
+    }
+    scope 2 {
+        debug err => _6;                 // in scope 2 at $DIR/simplify_try.rs:6:14: 6:15
+        scope 3 {
+            scope 7 {
+                debug t => _6;           // in scope 7 at $SRC_DIR/libcore/convert/mod.rs:LL:COL: 566:14
+            }
+            scope 8 {
+                debug v => _6;           // in scope 8 at $SRC_DIR/libcore/result.rs:LL:COL: 1555:20
+                let mut _12: i32;        // in scope 8 at $DIR/simplify_try.rs:6:14: 6:15
+            }
+        }
+    }
+    scope 4 {
+        debug val => _10;                // in scope 4 at $DIR/simplify_try.rs:6:13: 6:15
+        scope 5 {
+        }
+    }
+    scope 6 {
+        debug self => _1;                // in scope 6 at $SRC_DIR/libcore/result.rs:LL:COL: 1545:24
+    }
+
+    bb0: {
+        _5 = discriminant(_1);           // bb0[0]: scope 0 at $DIR/simplify_try.rs:6:14: 6:15
+        goto -> bb1;                     // bb0[1]: scope 0 at $DIR/simplify_try.rs:6:14: 6:15
+    }
+
+    bb1: {
+        _0 = move _1;                    // bb1[0]: scope 1 at $DIR/simplify_try.rs:7:5: 7:10
+        nop;                             // bb1[1]: scope 1 at $DIR/simplify_try.rs:7:5: 7:10
+        nop;                             // bb1[2]: scope 1 at $DIR/simplify_try.rs:7:5: 7:10
+        goto -> bb2;                     // bb1[3]: scope 0 at $DIR/simplify_try.rs:8:2: 8:2
+    }
+
+    bb2: {
+        return;                          // bb2[0]: scope 0 at $DIR/simplify_try.rs:8:2: 8:2
+    }
+}
diff --git a/src/test/mir-opt/simplify_try/rustc.try_identity.SimplifyLocals.after.mir b/src/test/mir-opt/simplify_try/rustc.try_identity.SimplifyLocals.after.mir
new file mode 100644
index 00000000000..67578833098
--- /dev/null
+++ b/src/test/mir-opt/simplify_try/rustc.try_identity.SimplifyLocals.after.mir
@@ -0,0 +1,35 @@
+// MIR for `try_identity` after SimplifyLocals
+
+fn try_identity(_1: std::result::Result<u32, i32>) -> std::result::Result<u32, i32> {
+    debug x => _1;                       // in scope 0 at $DIR/simplify_try.rs:5:17: 5:18
+    let mut _0: std::result::Result<u32, i32>; // return place in scope 0 at $DIR/simplify_try.rs:5:41: 5:57
+    let _2: i32;                         // in scope 0 at $DIR/simplify_try.rs:6:14: 6:15
+    let _3: u32;                         // in scope 0 at $DIR/simplify_try.rs:6:13: 6:15
+    scope 1 {
+        debug y => _3;                   // in scope 1 at $DIR/simplify_try.rs:6:9: 6:10
+    }
+    scope 2 {
+        debug err => _2;                 // in scope 2 at $DIR/simplify_try.rs:6:14: 6:15
+        scope 3 {
+            scope 7 {
+                debug t => _2;           // in scope 7 at $SRC_DIR/libcore/convert/mod.rs:LL:COL: 566:14
+            }
+            scope 8 {
+                debug v => _2;           // in scope 8 at $SRC_DIR/libcore/result.rs:LL:COL: 1555:20
+            }
+        }
+    }
+    scope 4 {
+        debug val => _3;                 // in scope 4 at $DIR/simplify_try.rs:6:13: 6:15
+        scope 5 {
+        }
+    }
+    scope 6 {
+        debug self => _1;                // in scope 6 at $SRC_DIR/libcore/result.rs:LL:COL: 1545:24
+    }
+
+    bb0: {
+        _0 = move _1;                    // bb0[0]: scope 1 at $DIR/simplify_try.rs:7:5: 7:10
+        return;                          // bb0[1]: scope 0 at $DIR/simplify_try.rs:8:2: 8:2
+    }
+}
diff --git a/src/test/mir-opt/slice-drop-shim.rs b/src/test/mir-opt/slice-drop-shim.rs
index a25375594d3..bf965bd18e8 100644
--- a/src/test/mir-opt/slice-drop-shim.rs
+++ b/src/test/mir-opt/slice-drop-shim.rs
@@ -1,90 +1,6 @@
 // compile-flags: -Zmir-opt-level=0
 
+// EMIT_MIR rustc.ptr-drop_in_place.[std__string__String].AddMovesForPackedDrops.before.mir
 fn main() {
     let _fn = std::ptr::drop_in_place::<[String]> as unsafe fn(_);
 }
-
-// END RUST SOURCE
-
-// START rustc.ptr-drop_in_place.[std__string__String].AddMovesForPackedDrops.before.mir
-// let mut _2: usize;
-// let mut _3: usize;
-// let mut _4: usize;
-// let mut _5: *mut std::string::String;
-// let mut _6: bool;
-// let mut _7: *mut std::string::String;
-// let mut _8: bool;
-// let mut _9: *mut std::string::String;
-// let mut _10: *mut std::string::String;
-// let mut _11: *mut std::string::String;
-// let mut _12: bool;
-// let mut _13: *mut std::string::String;
-// let mut _14: bool;
-// let mut _15: *mut [std::string::String];
-// bb0: {
-//     goto -> bb15;
-// }
-// bb1: {
-//     return;
-// }
-// bb2 (cleanup): {
-//     resume;
-// }
-// bb3 (cleanup): {
-//     _5 = &raw mut (*_1)[_4];
-//     _4 = Add(move _4, const 1usize);
-//     drop((*_5)) -> bb4;
-// }
-// bb4 (cleanup): {
-//     _6 = Eq(_4, _3);
-//     switchInt(move _6) -> [false: bb3, otherwise: bb2];
-// }
-// bb5: {
-//     _7 = &raw mut (*_1)[_4];
-//     _4 = Add(move _4, const 1usize);
-//     drop((*_7)) -> [return: bb6, unwind: bb4];
-// }
-// bb6: {
-//     _8 = Eq(_4, _3);
-//     switchInt(move _8) -> [false: bb5, otherwise: bb1];
-// }
-// bb7: {
-//     _4 = const 0usize;
-//     goto -> bb6;
-// }
-// bb8: {
-//     goto -> bb7;
-// }
-// bb9 (cleanup): {
-//     _11 = _9;
-//     _9 = Offset(move _9, const 1usize);
-//     drop((*_11)) -> bb10;
-// }
-// bb10 (cleanup): {
-//     _12 = Eq(_9, _10);
-//     switchInt(move _12) -> [false: bb9, otherwise: bb2];
-// }
-// bb11: {
-//     _13 = _9;
-//     _9 = Offset(move _9, const 1usize);
-//     drop((*_13)) -> [return: bb12, unwind: bb10];
-// }
-// bb12: {
-//     _14 = Eq(_9, _10);
-//     switchInt(move _14) -> [false: bb11, otherwise: bb1];
-// }
-// bb13: {
-//     _15 = &raw mut (*_1);
-//     _9 = move _15 as *mut std::string::String (Misc);
-//     _10 = Offset(_9, move _3);
-//     goto -> bb12;
-// }
-// bb14: {
-//     goto -> bb13;
-// }
-// bb15: {
-//     _2 = SizeOf(std::string::String);
-//     _3 = Len((*_1));
-//     switchInt(move _2) -> [0usize: bb8, otherwise: bb14];
-// }
-// END rustc.ptr-drop_in_place.[std__string__String].AddMovesForPackedDrops.before.mir
diff --git a/src/test/mir-opt/slice-drop-shim/rustc.ptr-drop_in_place.[std__string__String].AddMovesForPackedDrops.before.mir b/src/test/mir-opt/slice-drop-shim/rustc.ptr-drop_in_place.[std__string__String].AddMovesForPackedDrops.before.mir
new file mode 100644
index 00000000000..13178d94f17
--- /dev/null
+++ b/src/test/mir-opt/slice-drop-shim/rustc.ptr-drop_in_place.[std__string__String].AddMovesForPackedDrops.before.mir
@@ -0,0 +1,131 @@
+// MIR for `std::intrinsics::drop_in_place` before AddMovesForPackedDrops
+
+fn std::intrinsics::drop_in_place(_1: *mut [std::string::String]) -> () {
+    let mut _0: ();                      // return place in scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+    let mut _2: usize;                   // in scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+    let mut _3: usize;                   // in scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+    let mut _4: usize;                   // in scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+    let mut _5: *mut std::string::String; // in scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+    let mut _6: bool;                    // in scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+    let mut _7: *mut std::string::String; // in scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+    let mut _8: bool;                    // in scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+    let mut _9: *mut std::string::String; // in scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+    let mut _10: *mut std::string::String; // in scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+    let mut _11: *mut std::string::String; // in scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+    let mut _12: bool;                   // in scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+    let mut _13: *mut std::string::String; // in scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+    let mut _14: bool;                   // in scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+    let mut _15: *mut [std::string::String]; // in scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+
+    bb0: {
+        goto -> bb15;                    // bb0[0]: scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+    }
+
+    bb1: {
+        return;                          // bb1[0]: scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+    }
+
+    bb2 (cleanup): {
+        resume;                          // bb2[0]: scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+    }
+
+    bb3 (cleanup): {
+        _5 = &raw mut (*_1)[_4];         // bb3[0]: scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+        _4 = Add(move _4, const 1usize); // bb3[1]: scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+                                         // ty::Const
+                                         // + ty: usize
+                                         // + val: Value(Scalar(0x0000000000000001))
+                                         // mir::Constant
+                                         // + span: $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+                                         // + literal: Const { ty: usize, val: Value(Scalar(0x0000000000000001)) }
+        drop((*_5)) -> bb4;              // bb3[2]: scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+    }
+
+    bb4 (cleanup): {
+        _6 = Eq(_4, _3);                 // bb4[0]: scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+        switchInt(move _6) -> [false: bb3, otherwise: bb2]; // bb4[1]: scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+    }
+
+    bb5: {
+        _7 = &raw mut (*_1)[_4];         // bb5[0]: scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+        _4 = Add(move _4, const 1usize); // bb5[1]: scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+                                         // ty::Const
+                                         // + ty: usize
+                                         // + val: Value(Scalar(0x0000000000000001))
+                                         // mir::Constant
+                                         // + span: $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+                                         // + literal: Const { ty: usize, val: Value(Scalar(0x0000000000000001)) }
+        drop((*_7)) -> [return: bb6, unwind: bb4]; // bb5[2]: scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+    }
+
+    bb6: {
+        _8 = Eq(_4, _3);                 // bb6[0]: scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+        switchInt(move _8) -> [false: bb5, otherwise: bb1]; // bb6[1]: scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+    }
+
+    bb7: {
+        _4 = const 0usize;               // bb7[0]: scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+                                         // ty::Const
+                                         // + ty: usize
+                                         // + val: Value(Scalar(0x0000000000000000))
+                                         // mir::Constant
+                                         // + span: $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+                                         // + literal: Const { ty: usize, val: Value(Scalar(0x0000000000000000)) }
+        goto -> bb6;                     // bb7[1]: scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+    }
+
+    bb8: {
+        goto -> bb7;                     // bb8[0]: scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+    }
+
+    bb9 (cleanup): {
+        _11 = _9;                        // bb9[0]: scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+        _9 = Offset(move _9, const 1usize); // bb9[1]: scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+                                         // ty::Const
+                                         // + ty: usize
+                                         // + val: Value(Scalar(0x0000000000000001))
+                                         // mir::Constant
+                                         // + span: $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+                                         // + literal: Const { ty: usize, val: Value(Scalar(0x0000000000000001)) }
+        drop((*_11)) -> bb10;            // bb9[2]: scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+    }
+
+    bb10 (cleanup): {
+        _12 = Eq(_9, _10);               // bb10[0]: scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+        switchInt(move _12) -> [false: bb9, otherwise: bb2]; // bb10[1]: scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+    }
+
+    bb11: {
+        _13 = _9;                        // bb11[0]: scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+        _9 = Offset(move _9, const 1usize); // bb11[1]: scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+                                         // ty::Const
+                                         // + ty: usize
+                                         // + val: Value(Scalar(0x0000000000000001))
+                                         // mir::Constant
+                                         // + span: $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+                                         // + literal: Const { ty: usize, val: Value(Scalar(0x0000000000000001)) }
+        drop((*_13)) -> [return: bb12, unwind: bb10]; // bb11[2]: scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+    }
+
+    bb12: {
+        _14 = Eq(_9, _10);               // bb12[0]: scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+        switchInt(move _14) -> [false: bb11, otherwise: bb1]; // bb12[1]: scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+    }
+
+    bb13: {
+        _15 = &raw mut (*_1);            // bb13[0]: scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+        _9 = move _15 as *mut std::string::String (Misc); // bb13[1]: scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+        _10 = Offset(_9, move _3);       // bb13[2]: scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+        goto -> bb12;                    // bb13[3]: scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+    }
+
+    bb14: {
+        goto -> bb13;                    // bb14[0]: scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+    }
+
+    bb15: {
+        _2 = SizeOf(std::string::String); // bb15[0]: scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+        _3 = Len((*_1));                 // bb15[1]: scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+        switchInt(move _2) -> [0usize: bb8, otherwise: bb14]; // bb15[2]: scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+    }
+}
diff --git a/src/test/mir-opt/storage_live_dead_in_statics.rs b/src/test/mir-opt/storage_live_dead_in_statics.rs
index 1c98766b968..a269914f262 100644
--- a/src/test/mir-opt/storage_live_dead_in_statics.rs
+++ b/src/test/mir-opt/storage_live_dead_in_statics.rs
@@ -1,8 +1,7 @@
 // Check that when we compile the static `XXX` into MIR, we do not
 // generate `StorageStart` or `StorageEnd` statements.
 
-// ignore-tidy-linelength
-
+// EMIT_MIR rustc.XXX.mir_map.0.mir
 static XXX: &'static Foo = &Foo {
     tup: "hi",
     data: &[
@@ -32,159 +31,3 @@ struct Foo {
 fn main() {
     println!("{:?}", XXX);
 }
-
-// END RUST SOURCE
-// START rustc.XXX.mir_map.0.mir
-//    let mut _0: &Foo;
-//    let _1: &Foo;
-//    let _2: Foo;
-//    let mut _3: &[(u32, u32)];
-//    let mut _4: &[(u32, u32); 42];
-//    let _5: &[(u32, u32); 42];
-//    let _6: [(u32, u32); 42];
-//    let mut _7: (u32, u32);
-//    let mut _8: (u32, u32);
-//    let mut _9: (u32, u32);
-//    let mut _10: (u32, u32);
-//    let mut _11: (u32, u32);
-//    let mut _12: (u32, u32);
-//    let mut _13: (u32, u32);
-//    let mut _14: (u32, u32);
-//    let mut _15: (u32, u32);
-//    let mut _16: (u32, u32);
-//    let mut _17: (u32, u32);
-//    let mut _18: (u32, u32);
-//    let mut _19: (u32, u32);
-//    let mut _20: (u32, u32);
-//    let mut _21: (u32, u32);
-//    let mut _22: (u32, u32);
-//    let mut _23: (u32, u32);
-//    let mut _24: (u32, u32);
-//    let mut _25: (u32, u32);
-//    let mut _26: (u32, u32);
-//    let mut _27: (u32, u32);
-//    let mut _28: (u32, u32);
-//    let mut _29: (u32, u32);
-//    let mut _30: (u32, u32);
-//    let mut _31: (u32, u32);
-//    let mut _32: (u32, u32);
-//    let mut _33: (u32, u32);
-//    let mut _34: (u32, u32);
-//    let mut _35: (u32, u32);
-//    let mut _36: (u32, u32);
-//    let mut _37: (u32, u32);
-//    let mut _38: (u32, u32);
-//    let mut _39: (u32, u32);
-//    let mut _40: (u32, u32);
-//    let mut _41: (u32, u32);
-//    let mut _42: (u32, u32);
-//    let mut _43: (u32, u32);
-//    let mut _44: (u32, u32);
-//    let mut _45: (u32, u32);
-//    let mut _46: (u32, u32);
-//    let mut _47: (u32, u32);
-//    let mut _48: (u32, u32);
-//    bb0: {
-//        StorageLive(_1);
-//        StorageLive(_2);
-//        StorageLive(_3);
-//        StorageLive(_4);
-//        StorageLive(_5);
-//        StorageLive(_6);
-//        StorageLive(_7);
-//        _7 = (const 0u32, const 1u32);
-//        StorageLive(_8);
-//        _8 = (const 0u32, const 2u32);
-//        StorageLive(_9);
-//        _9 = (const 0u32, const 3u32);
-//        StorageLive(_10);
-//        _10 = (const 0u32, const 1u32);
-//        StorageLive(_11);
-//        _11 = (const 0u32, const 2u32);
-//        StorageLive(_12);
-//        _12 = (const 0u32, const 3u32);
-//        StorageLive(_13);
-//        _13 = (const 0u32, const 1u32);
-//        StorageLive(_14);
-//        _14 = (const 0u32, const 2u32);
-//        StorageLive(_15);
-//        _15 = (const 0u32, const 3u32);
-//        StorageLive(_16);
-//        _16 = (const 0u32, const 1u32);
-//        StorageLive(_17);
-//        _17 = (const 0u32, const 2u32);
-//        StorageLive(_18);
-//        _18 = (const 0u32, const 3u32);
-//        StorageLive(_19);
-//        _19 = (const 0u32, const 1u32);
-//        StorageLive(_20);
-//        _20 = (const 0u32, const 2u32);
-//        StorageLive(_21);
-//        _21 = (const 0u32, const 3u32);
-//        StorageLive(_22);
-//        _22 = (const 0u32, const 1u32);
-//        StorageLive(_23);
-//        _23 = (const 0u32, const 2u32);
-//        StorageLive(_24);
-//        _24 = (const 0u32, const 3u32);
-//        StorageLive(_25);
-//        _25 = (const 0u32, const 1u32);
-//        StorageLive(_26);
-//        _26 = (const 0u32, const 2u32);
-//        StorageLive(_27);
-//        _27 = (const 0u32, const 3u32);
-//        StorageLive(_28);
-//        _28 = (const 0u32, const 1u32);
-//        StorageLive(_29);
-//        _29 = (const 0u32, const 2u32);
-//        StorageLive(_30);
-//        _30 = (const 0u32, const 3u32);
-//        StorageLive(_31);
-//        _31 = (const 0u32, const 1u32);
-//        StorageLive(_32);
-//        _32 = (const 0u32, const 2u32);
-//        StorageLive(_33);
-//        _33 = (const 0u32, const 3u32);
-//        StorageLive(_34);
-//        _34 = (const 0u32, const 1u32);
-//        StorageLive(_35);
-//        _35 = (const 0u32, const 2u32);
-//        StorageLive(_36);
-//        _36 = (const 0u32, const 3u32);
-//        StorageLive(_37);
-//        _37 = (const 0u32, const 1u32);
-//        StorageLive(_38);
-//        _38 = (const 0u32, const 2u32);
-//        StorageLive(_39);
-//        _39 = (const 0u32, const 3u32);
-//        StorageLive(_40);
-//        _40 = (const 0u32, const 1u32);
-//        StorageLive(_41);
-//        _41 = (const 0u32, const 2u32);
-//        StorageLive(_42);
-//        _42 = (const 0u32, const 3u32);
-//        StorageLive(_43);
-//        _43 = (const 0u32, const 1u32);
-//        StorageLive(_44);
-//        _44 = (const 0u32, const 2u32);
-//        StorageLive(_45);
-//        _45 = (const 0u32, const 3u32);
-//        StorageLive(_46);
-//        _46 = (const 0u32, const 1u32);
-//        StorageLive(_47);
-//        _47 = (const 0u32, const 2u32);
-//        StorageLive(_48);
-//        _48 = (const 0u32, const 3u32);
-//        _6 = [move _7, move _8, move _9, move _10, move _11, move _12, move _13, move _14, move _15, move _16, move _17, move _18, move _19, move _20, move _21, move _22, move _23, move _24, move _25, move _26, move _27, move _28, move _29, move _30, move _31, move _32, move _33, move _34, move _35, move _36, move _37, move _38, move _39, move _40, move _41, move _42, move _43, move _44, move _45, move _46, move _47, move _48];
-//        _5 = &_6;
-//        _4 = &(*_5);
-//        _3 = move _4 as &[(u32, u32)] (Pointer(Unsize));
-//        _2 = Foo { tup: const "hi", data: move _3 };
-//        _1 = &_2;
-//        _0 = &(*_1);
-//        StorageDead(_5);
-//        StorageDead(_1);
-//        return;
-//    }
-//}
-// END rustc.XXX.mir_map.0.mir
diff --git a/src/test/mir-opt/storage_live_dead_in_statics/rustc.XXX.mir_map.0.mir b/src/test/mir-opt/storage_live_dead_in_statics/rustc.XXX.mir_map.0.mir
new file mode 100644
index 00000000000..5ea1e431d19
--- /dev/null
+++ b/src/test/mir-opt/storage_live_dead_in_statics/rustc.XXX.mir_map.0.mir
@@ -0,0 +1,670 @@
+// MIR for `XXX` 0 mir_map
+
+static XXX: &Foo = {
+    let mut _0: &Foo;                    // return place in scope 0 at $DIR/storage_live_dead_in_statics.rs:5:13: 5:25
+    let _1: &Foo;                        // in scope 0 at $DIR/storage_live_dead_in_statics.rs:5:28: 23:2
+    let _2: Foo;                         // in scope 0 at $DIR/storage_live_dead_in_statics.rs:5:29: 23:2
+    let mut _3: &[(u32, u32)];           // in scope 0 at $DIR/storage_live_dead_in_statics.rs:7:11: 22:6
+    let mut _4: &[(u32, u32); 42];       // in scope 0 at $DIR/storage_live_dead_in_statics.rs:7:11: 22:6
+    let _5: &[(u32, u32); 42];           // in scope 0 at $DIR/storage_live_dead_in_statics.rs:7:11: 22:6
+    let _6: [(u32, u32); 42];            // in scope 0 at $DIR/storage_live_dead_in_statics.rs:7:12: 22:6
+    let mut _7: (u32, u32);              // in scope 0 at $DIR/storage_live_dead_in_statics.rs:8:9: 8:15
+    let mut _8: (u32, u32);              // in scope 0 at $DIR/storage_live_dead_in_statics.rs:8:17: 8:23
+    let mut _9: (u32, u32);              // in scope 0 at $DIR/storage_live_dead_in_statics.rs:8:25: 8:31
+    let mut _10: (u32, u32);             // in scope 0 at $DIR/storage_live_dead_in_statics.rs:9:9: 9:15
+    let mut _11: (u32, u32);             // in scope 0 at $DIR/storage_live_dead_in_statics.rs:9:17: 9:23
+    let mut _12: (u32, u32);             // in scope 0 at $DIR/storage_live_dead_in_statics.rs:9:25: 9:31
+    let mut _13: (u32, u32);             // in scope 0 at $DIR/storage_live_dead_in_statics.rs:10:9: 10:15
+    let mut _14: (u32, u32);             // in scope 0 at $DIR/storage_live_dead_in_statics.rs:10:17: 10:23
+    let mut _15: (u32, u32);             // in scope 0 at $DIR/storage_live_dead_in_statics.rs:10:25: 10:31
+    let mut _16: (u32, u32);             // in scope 0 at $DIR/storage_live_dead_in_statics.rs:11:9: 11:15
+    let mut _17: (u32, u32);             // in scope 0 at $DIR/storage_live_dead_in_statics.rs:11:17: 11:23
+    let mut _18: (u32, u32);             // in scope 0 at $DIR/storage_live_dead_in_statics.rs:11:25: 11:31
+    let mut _19: (u32, u32);             // in scope 0 at $DIR/storage_live_dead_in_statics.rs:12:9: 12:15
+    let mut _20: (u32, u32);             // in scope 0 at $DIR/storage_live_dead_in_statics.rs:12:17: 12:23
+    let mut _21: (u32, u32);             // in scope 0 at $DIR/storage_live_dead_in_statics.rs:12:25: 12:31
+    let mut _22: (u32, u32);             // in scope 0 at $DIR/storage_live_dead_in_statics.rs:13:9: 13:15
+    let mut _23: (u32, u32);             // in scope 0 at $DIR/storage_live_dead_in_statics.rs:13:17: 13:23
+    let mut _24: (u32, u32);             // in scope 0 at $DIR/storage_live_dead_in_statics.rs:13:25: 13:31
+    let mut _25: (u32, u32);             // in scope 0 at $DIR/storage_live_dead_in_statics.rs:14:9: 14:15
+    let mut _26: (u32, u32);             // in scope 0 at $DIR/storage_live_dead_in_statics.rs:14:17: 14:23
+    let mut _27: (u32, u32);             // in scope 0 at $DIR/storage_live_dead_in_statics.rs:14:25: 14:31
+    let mut _28: (u32, u32);             // in scope 0 at $DIR/storage_live_dead_in_statics.rs:15:9: 15:15
+    let mut _29: (u32, u32);             // in scope 0 at $DIR/storage_live_dead_in_statics.rs:15:17: 15:23
+    let mut _30: (u32, u32);             // in scope 0 at $DIR/storage_live_dead_in_statics.rs:15:25: 15:31
+    let mut _31: (u32, u32);             // in scope 0 at $DIR/storage_live_dead_in_statics.rs:16:9: 16:15
+    let mut _32: (u32, u32);             // in scope 0 at $DIR/storage_live_dead_in_statics.rs:16:17: 16:23
+    let mut _33: (u32, u32);             // in scope 0 at $DIR/storage_live_dead_in_statics.rs:16:25: 16:31
+    let mut _34: (u32, u32);             // in scope 0 at $DIR/storage_live_dead_in_statics.rs:17:9: 17:15
+    let mut _35: (u32, u32);             // in scope 0 at $DIR/storage_live_dead_in_statics.rs:17:17: 17:23
+    let mut _36: (u32, u32);             // in scope 0 at $DIR/storage_live_dead_in_statics.rs:17:25: 17:31
+    let mut _37: (u32, u32);             // in scope 0 at $DIR/storage_live_dead_in_statics.rs:18:9: 18:15
+    let mut _38: (u32, u32);             // in scope 0 at $DIR/storage_live_dead_in_statics.rs:18:17: 18:23
+    let mut _39: (u32, u32);             // in scope 0 at $DIR/storage_live_dead_in_statics.rs:18:25: 18:31
+    let mut _40: (u32, u32);             // in scope 0 at $DIR/storage_live_dead_in_statics.rs:19:9: 19:15
+    let mut _41: (u32, u32);             // in scope 0 at $DIR/storage_live_dead_in_statics.rs:19:17: 19:23
+    let mut _42: (u32, u32);             // in scope 0 at $DIR/storage_live_dead_in_statics.rs:19:25: 19:31
+    let mut _43: (u32, u32);             // in scope 0 at $DIR/storage_live_dead_in_statics.rs:20:9: 20:15
+    let mut _44: (u32, u32);             // in scope 0 at $DIR/storage_live_dead_in_statics.rs:20:17: 20:23
+    let mut _45: (u32, u32);             // in scope 0 at $DIR/storage_live_dead_in_statics.rs:20:25: 20:31
+    let mut _46: (u32, u32);             // in scope 0 at $DIR/storage_live_dead_in_statics.rs:21:9: 21:15
+    let mut _47: (u32, u32);             // in scope 0 at $DIR/storage_live_dead_in_statics.rs:21:17: 21:23
+    let mut _48: (u32, u32);             // in scope 0 at $DIR/storage_live_dead_in_statics.rs:21:25: 21:31
+
+    bb0: {
+        StorageLive(_1);                 // bb0[0]: scope 0 at $DIR/storage_live_dead_in_statics.rs:5:28: 23:2
+        StorageLive(_2);                 // bb0[1]: scope 0 at $DIR/storage_live_dead_in_statics.rs:5:29: 23:2
+        StorageLive(_3);                 // bb0[2]: scope 0 at $DIR/storage_live_dead_in_statics.rs:7:11: 22:6
+        StorageLive(_4);                 // bb0[3]: scope 0 at $DIR/storage_live_dead_in_statics.rs:7:11: 22:6
+        StorageLive(_5);                 // bb0[4]: scope 0 at $DIR/storage_live_dead_in_statics.rs:7:11: 22:6
+        StorageLive(_6);                 // bb0[5]: scope 0 at $DIR/storage_live_dead_in_statics.rs:7:12: 22:6
+        StorageLive(_7);                 // bb0[6]: scope 0 at $DIR/storage_live_dead_in_statics.rs:8:9: 8:15
+        _7 = (const 0u32, const 1u32);   // bb0[7]: scope 0 at $DIR/storage_live_dead_in_statics.rs:8:9: 8:15
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000000))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:8:10: 8:11
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000000)) }
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000001))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:8:13: 8:14
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000001)) }
+        StorageLive(_8);                 // bb0[8]: scope 0 at $DIR/storage_live_dead_in_statics.rs:8:17: 8:23
+        _8 = (const 0u32, const 2u32);   // bb0[9]: scope 0 at $DIR/storage_live_dead_in_statics.rs:8:17: 8:23
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000000))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:8:18: 8:19
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000000)) }
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000002))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:8:21: 8:22
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000002)) }
+        StorageLive(_9);                 // bb0[10]: scope 0 at $DIR/storage_live_dead_in_statics.rs:8:25: 8:31
+        _9 = (const 0u32, const 3u32);   // bb0[11]: scope 0 at $DIR/storage_live_dead_in_statics.rs:8:25: 8:31
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000000))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:8:26: 8:27
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000000)) }
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000003))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:8:29: 8:30
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000003)) }
+        StorageLive(_10);                // bb0[12]: scope 0 at $DIR/storage_live_dead_in_statics.rs:9:9: 9:15
+        _10 = (const 0u32, const 1u32);  // bb0[13]: scope 0 at $DIR/storage_live_dead_in_statics.rs:9:9: 9:15
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000000))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:9:10: 9:11
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000000)) }
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000001))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:9:13: 9:14
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000001)) }
+        StorageLive(_11);                // bb0[14]: scope 0 at $DIR/storage_live_dead_in_statics.rs:9:17: 9:23
+        _11 = (const 0u32, const 2u32);  // bb0[15]: scope 0 at $DIR/storage_live_dead_in_statics.rs:9:17: 9:23
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000000))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:9:18: 9:19
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000000)) }
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000002))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:9:21: 9:22
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000002)) }
+        StorageLive(_12);                // bb0[16]: scope 0 at $DIR/storage_live_dead_in_statics.rs:9:25: 9:31
+        _12 = (const 0u32, const 3u32);  // bb0[17]: scope 0 at $DIR/storage_live_dead_in_statics.rs:9:25: 9:31
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000000))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:9:26: 9:27
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000000)) }
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000003))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:9:29: 9:30
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000003)) }
+        StorageLive(_13);                // bb0[18]: scope 0 at $DIR/storage_live_dead_in_statics.rs:10:9: 10:15
+        _13 = (const 0u32, const 1u32);  // bb0[19]: scope 0 at $DIR/storage_live_dead_in_statics.rs:10:9: 10:15
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000000))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:10:10: 10:11
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000000)) }
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000001))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:10:13: 10:14
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000001)) }
+        StorageLive(_14);                // bb0[20]: scope 0 at $DIR/storage_live_dead_in_statics.rs:10:17: 10:23
+        _14 = (const 0u32, const 2u32);  // bb0[21]: scope 0 at $DIR/storage_live_dead_in_statics.rs:10:17: 10:23
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000000))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:10:18: 10:19
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000000)) }
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000002))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:10:21: 10:22
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000002)) }
+        StorageLive(_15);                // bb0[22]: scope 0 at $DIR/storage_live_dead_in_statics.rs:10:25: 10:31
+        _15 = (const 0u32, const 3u32);  // bb0[23]: scope 0 at $DIR/storage_live_dead_in_statics.rs:10:25: 10:31
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000000))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:10:26: 10:27
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000000)) }
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000003))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:10:29: 10:30
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000003)) }
+        StorageLive(_16);                // bb0[24]: scope 0 at $DIR/storage_live_dead_in_statics.rs:11:9: 11:15
+        _16 = (const 0u32, const 1u32);  // bb0[25]: scope 0 at $DIR/storage_live_dead_in_statics.rs:11:9: 11:15
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000000))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:11:10: 11:11
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000000)) }
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000001))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:11:13: 11:14
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000001)) }
+        StorageLive(_17);                // bb0[26]: scope 0 at $DIR/storage_live_dead_in_statics.rs:11:17: 11:23
+        _17 = (const 0u32, const 2u32);  // bb0[27]: scope 0 at $DIR/storage_live_dead_in_statics.rs:11:17: 11:23
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000000))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:11:18: 11:19
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000000)) }
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000002))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:11:21: 11:22
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000002)) }
+        StorageLive(_18);                // bb0[28]: scope 0 at $DIR/storage_live_dead_in_statics.rs:11:25: 11:31
+        _18 = (const 0u32, const 3u32);  // bb0[29]: scope 0 at $DIR/storage_live_dead_in_statics.rs:11:25: 11:31
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000000))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:11:26: 11:27
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000000)) }
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000003))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:11:29: 11:30
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000003)) }
+        StorageLive(_19);                // bb0[30]: scope 0 at $DIR/storage_live_dead_in_statics.rs:12:9: 12:15
+        _19 = (const 0u32, const 1u32);  // bb0[31]: scope 0 at $DIR/storage_live_dead_in_statics.rs:12:9: 12:15
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000000))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:12:10: 12:11
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000000)) }
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000001))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:12:13: 12:14
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000001)) }
+        StorageLive(_20);                // bb0[32]: scope 0 at $DIR/storage_live_dead_in_statics.rs:12:17: 12:23
+        _20 = (const 0u32, const 2u32);  // bb0[33]: scope 0 at $DIR/storage_live_dead_in_statics.rs:12:17: 12:23
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000000))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:12:18: 12:19
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000000)) }
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000002))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:12:21: 12:22
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000002)) }
+        StorageLive(_21);                // bb0[34]: scope 0 at $DIR/storage_live_dead_in_statics.rs:12:25: 12:31
+        _21 = (const 0u32, const 3u32);  // bb0[35]: scope 0 at $DIR/storage_live_dead_in_statics.rs:12:25: 12:31
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000000))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:12:26: 12:27
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000000)) }
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000003))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:12:29: 12:30
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000003)) }
+        StorageLive(_22);                // bb0[36]: scope 0 at $DIR/storage_live_dead_in_statics.rs:13:9: 13:15
+        _22 = (const 0u32, const 1u32);  // bb0[37]: scope 0 at $DIR/storage_live_dead_in_statics.rs:13:9: 13:15
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000000))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:13:10: 13:11
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000000)) }
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000001))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:13:13: 13:14
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000001)) }
+        StorageLive(_23);                // bb0[38]: scope 0 at $DIR/storage_live_dead_in_statics.rs:13:17: 13:23
+        _23 = (const 0u32, const 2u32);  // bb0[39]: scope 0 at $DIR/storage_live_dead_in_statics.rs:13:17: 13:23
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000000))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:13:18: 13:19
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000000)) }
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000002))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:13:21: 13:22
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000002)) }
+        StorageLive(_24);                // bb0[40]: scope 0 at $DIR/storage_live_dead_in_statics.rs:13:25: 13:31
+        _24 = (const 0u32, const 3u32);  // bb0[41]: scope 0 at $DIR/storage_live_dead_in_statics.rs:13:25: 13:31
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000000))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:13:26: 13:27
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000000)) }
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000003))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:13:29: 13:30
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000003)) }
+        StorageLive(_25);                // bb0[42]: scope 0 at $DIR/storage_live_dead_in_statics.rs:14:9: 14:15
+        _25 = (const 0u32, const 1u32);  // bb0[43]: scope 0 at $DIR/storage_live_dead_in_statics.rs:14:9: 14:15
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000000))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:14:10: 14:11
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000000)) }
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000001))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:14:13: 14:14
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000001)) }
+        StorageLive(_26);                // bb0[44]: scope 0 at $DIR/storage_live_dead_in_statics.rs:14:17: 14:23
+        _26 = (const 0u32, const 2u32);  // bb0[45]: scope 0 at $DIR/storage_live_dead_in_statics.rs:14:17: 14:23
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000000))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:14:18: 14:19
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000000)) }
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000002))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:14:21: 14:22
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000002)) }
+        StorageLive(_27);                // bb0[46]: scope 0 at $DIR/storage_live_dead_in_statics.rs:14:25: 14:31
+        _27 = (const 0u32, const 3u32);  // bb0[47]: scope 0 at $DIR/storage_live_dead_in_statics.rs:14:25: 14:31
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000000))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:14:26: 14:27
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000000)) }
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000003))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:14:29: 14:30
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000003)) }
+        StorageLive(_28);                // bb0[48]: scope 0 at $DIR/storage_live_dead_in_statics.rs:15:9: 15:15
+        _28 = (const 0u32, const 1u32);  // bb0[49]: scope 0 at $DIR/storage_live_dead_in_statics.rs:15:9: 15:15
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000000))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:15:10: 15:11
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000000)) }
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000001))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:15:13: 15:14
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000001)) }
+        StorageLive(_29);                // bb0[50]: scope 0 at $DIR/storage_live_dead_in_statics.rs:15:17: 15:23
+        _29 = (const 0u32, const 2u32);  // bb0[51]: scope 0 at $DIR/storage_live_dead_in_statics.rs:15:17: 15:23
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000000))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:15:18: 15:19
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000000)) }
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000002))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:15:21: 15:22
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000002)) }
+        StorageLive(_30);                // bb0[52]: scope 0 at $DIR/storage_live_dead_in_statics.rs:15:25: 15:31
+        _30 = (const 0u32, const 3u32);  // bb0[53]: scope 0 at $DIR/storage_live_dead_in_statics.rs:15:25: 15:31
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000000))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:15:26: 15:27
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000000)) }
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000003))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:15:29: 15:30
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000003)) }
+        StorageLive(_31);                // bb0[54]: scope 0 at $DIR/storage_live_dead_in_statics.rs:16:9: 16:15
+        _31 = (const 0u32, const 1u32);  // bb0[55]: scope 0 at $DIR/storage_live_dead_in_statics.rs:16:9: 16:15
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000000))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:16:10: 16:11
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000000)) }
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000001))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:16:13: 16:14
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000001)) }
+        StorageLive(_32);                // bb0[56]: scope 0 at $DIR/storage_live_dead_in_statics.rs:16:17: 16:23
+        _32 = (const 0u32, const 2u32);  // bb0[57]: scope 0 at $DIR/storage_live_dead_in_statics.rs:16:17: 16:23
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000000))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:16:18: 16:19
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000000)) }
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000002))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:16:21: 16:22
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000002)) }
+        StorageLive(_33);                // bb0[58]: scope 0 at $DIR/storage_live_dead_in_statics.rs:16:25: 16:31
+        _33 = (const 0u32, const 3u32);  // bb0[59]: scope 0 at $DIR/storage_live_dead_in_statics.rs:16:25: 16:31
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000000))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:16:26: 16:27
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000000)) }
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000003))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:16:29: 16:30
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000003)) }
+        StorageLive(_34);                // bb0[60]: scope 0 at $DIR/storage_live_dead_in_statics.rs:17:9: 17:15
+        _34 = (const 0u32, const 1u32);  // bb0[61]: scope 0 at $DIR/storage_live_dead_in_statics.rs:17:9: 17:15
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000000))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:17:10: 17:11
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000000)) }
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000001))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:17:13: 17:14
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000001)) }
+        StorageLive(_35);                // bb0[62]: scope 0 at $DIR/storage_live_dead_in_statics.rs:17:17: 17:23
+        _35 = (const 0u32, const 2u32);  // bb0[63]: scope 0 at $DIR/storage_live_dead_in_statics.rs:17:17: 17:23
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000000))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:17:18: 17:19
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000000)) }
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000002))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:17:21: 17:22
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000002)) }
+        StorageLive(_36);                // bb0[64]: scope 0 at $DIR/storage_live_dead_in_statics.rs:17:25: 17:31
+        _36 = (const 0u32, const 3u32);  // bb0[65]: scope 0 at $DIR/storage_live_dead_in_statics.rs:17:25: 17:31
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000000))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:17:26: 17:27
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000000)) }
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000003))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:17:29: 17:30
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000003)) }
+        StorageLive(_37);                // bb0[66]: scope 0 at $DIR/storage_live_dead_in_statics.rs:18:9: 18:15
+        _37 = (const 0u32, const 1u32);  // bb0[67]: scope 0 at $DIR/storage_live_dead_in_statics.rs:18:9: 18:15
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000000))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:18:10: 18:11
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000000)) }
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000001))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:18:13: 18:14
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000001)) }
+        StorageLive(_38);                // bb0[68]: scope 0 at $DIR/storage_live_dead_in_statics.rs:18:17: 18:23
+        _38 = (const 0u32, const 2u32);  // bb0[69]: scope 0 at $DIR/storage_live_dead_in_statics.rs:18:17: 18:23
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000000))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:18:18: 18:19
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000000)) }
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000002))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:18:21: 18:22
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000002)) }
+        StorageLive(_39);                // bb0[70]: scope 0 at $DIR/storage_live_dead_in_statics.rs:18:25: 18:31
+        _39 = (const 0u32, const 3u32);  // bb0[71]: scope 0 at $DIR/storage_live_dead_in_statics.rs:18:25: 18:31
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000000))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:18:26: 18:27
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000000)) }
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000003))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:18:29: 18:30
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000003)) }
+        StorageLive(_40);                // bb0[72]: scope 0 at $DIR/storage_live_dead_in_statics.rs:19:9: 19:15
+        _40 = (const 0u32, const 1u32);  // bb0[73]: scope 0 at $DIR/storage_live_dead_in_statics.rs:19:9: 19:15
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000000))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:19:10: 19:11
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000000)) }
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000001))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:19:13: 19:14
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000001)) }
+        StorageLive(_41);                // bb0[74]: scope 0 at $DIR/storage_live_dead_in_statics.rs:19:17: 19:23
+        _41 = (const 0u32, const 2u32);  // bb0[75]: scope 0 at $DIR/storage_live_dead_in_statics.rs:19:17: 19:23
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000000))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:19:18: 19:19
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000000)) }
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000002))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:19:21: 19:22
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000002)) }
+        StorageLive(_42);                // bb0[76]: scope 0 at $DIR/storage_live_dead_in_statics.rs:19:25: 19:31
+        _42 = (const 0u32, const 3u32);  // bb0[77]: scope 0 at $DIR/storage_live_dead_in_statics.rs:19:25: 19:31
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000000))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:19:26: 19:27
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000000)) }
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000003))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:19:29: 19:30
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000003)) }
+        StorageLive(_43);                // bb0[78]: scope 0 at $DIR/storage_live_dead_in_statics.rs:20:9: 20:15
+        _43 = (const 0u32, const 1u32);  // bb0[79]: scope 0 at $DIR/storage_live_dead_in_statics.rs:20:9: 20:15
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000000))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:20:10: 20:11
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000000)) }
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000001))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:20:13: 20:14
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000001)) }
+        StorageLive(_44);                // bb0[80]: scope 0 at $DIR/storage_live_dead_in_statics.rs:20:17: 20:23
+        _44 = (const 0u32, const 2u32);  // bb0[81]: scope 0 at $DIR/storage_live_dead_in_statics.rs:20:17: 20:23
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000000))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:20:18: 20:19
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000000)) }
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000002))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:20:21: 20:22
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000002)) }
+        StorageLive(_45);                // bb0[82]: scope 0 at $DIR/storage_live_dead_in_statics.rs:20:25: 20:31
+        _45 = (const 0u32, const 3u32);  // bb0[83]: scope 0 at $DIR/storage_live_dead_in_statics.rs:20:25: 20:31
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000000))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:20:26: 20:27
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000000)) }
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000003))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:20:29: 20:30
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000003)) }
+        StorageLive(_46);                // bb0[84]: scope 0 at $DIR/storage_live_dead_in_statics.rs:21:9: 21:15
+        _46 = (const 0u32, const 1u32);  // bb0[85]: scope 0 at $DIR/storage_live_dead_in_statics.rs:21:9: 21:15
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000000))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:21:10: 21:11
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000000)) }
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000001))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:21:13: 21:14
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000001)) }
+        StorageLive(_47);                // bb0[86]: scope 0 at $DIR/storage_live_dead_in_statics.rs:21:17: 21:23
+        _47 = (const 0u32, const 2u32);  // bb0[87]: scope 0 at $DIR/storage_live_dead_in_statics.rs:21:17: 21:23
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000000))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:21:18: 21:19
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000000)) }
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000002))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:21:21: 21:22
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000002)) }
+        StorageLive(_48);                // bb0[88]: scope 0 at $DIR/storage_live_dead_in_statics.rs:21:25: 21:31
+        _48 = (const 0u32, const 3u32);  // bb0[89]: scope 0 at $DIR/storage_live_dead_in_statics.rs:21:25: 21:31
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000000))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:21:26: 21:27
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000000)) }
+                                         // ty::Const
+                                         // + ty: u32
+                                         // + val: Value(Scalar(0x00000003))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:21:29: 21:30
+                                         // + literal: Const { ty: u32, val: Value(Scalar(0x00000003)) }
+        _6 = [move _7, move _8, move _9, move _10, move _11, move _12, move _13, move _14, move _15, move _16, move _17, move _18, move _19, move _20, move _21, move _22, move _23, move _24, move _25, move _26, move _27, move _28, move _29, move _30, move _31, move _32, move _33, move _34, move _35, move _36, move _37, move _38, move _39, move _40, move _41, move _42, move _43, move _44, move _45, move _46, move _47, move _48]; // bb0[90]: scope 0 at $DIR/storage_live_dead_in_statics.rs:7:12: 22:6
+        _5 = &_6;                        // bb0[91]: scope 0 at $DIR/storage_live_dead_in_statics.rs:7:11: 22:6
+        _4 = &(*_5);                     // bb0[92]: scope 0 at $DIR/storage_live_dead_in_statics.rs:7:11: 22:6
+        _3 = move _4 as &[(u32, u32)] (Pointer(Unsize)); // bb0[93]: scope 0 at $DIR/storage_live_dead_in_statics.rs:7:11: 22:6
+        _2 = Foo { tup: const "hi", data: move _3 }; // bb0[94]: scope 0 at $DIR/storage_live_dead_in_statics.rs:5:29: 23:2
+                                         // ty::Const
+                                         // + ty: &str
+                                         // + val: Value(Slice { data: Allocation { bytes: [104, 105], relocations: Relocations(SortedMap { data: [] }), undef_mask: UndefMask { blocks: [3], len: Size { raw: 2 } }, size: Size { raw: 2 }, align: Align { pow2: 0 }, mutability: Not, extra: () }, start: 0, end: 2 })
+                                         // mir::Constant
+                                         // + span: $DIR/storage_live_dead_in_statics.rs:6:10: 6:14
+                                         // + literal: Const { ty: &str, val: Value(Slice { data: Allocation { bytes: [104, 105], relocations: Relocations(SortedMap { data: [] }), undef_mask: UndefMask { blocks: [3], len: Size { raw: 2 } }, size: Size { raw: 2 }, align: Align { pow2: 0 }, mutability: Not, extra: () }, start: 0, end: 2 }) }
+        _1 = &_2;                        // bb0[95]: scope 0 at $DIR/storage_live_dead_in_statics.rs:5:28: 23:2
+        _0 = &(*_1);                     // bb0[96]: scope 0 at $DIR/storage_live_dead_in_statics.rs:5:28: 23:2
+        StorageDead(_5);                 // bb0[97]: scope 0 at $DIR/storage_live_dead_in_statics.rs:23:1: 23:2
+        StorageDead(_1);                 // bb0[98]: scope 0 at $DIR/storage_live_dead_in_statics.rs:23:1: 23:2
+        return;                          // bb0[99]: scope 0 at $DIR/storage_live_dead_in_statics.rs:5:1: 23:3
+    }
+
+    bb1 (cleanup): {
+        resume;                          // bb1[0]: scope 0 at $DIR/storage_live_dead_in_statics.rs:5:1: 23:3
+    }
+}
diff --git a/src/test/mir-opt/storage_ranges.rs b/src/test/mir-opt/storage_ranges.rs
index 95570ff76a6..7b3c77aca27 100644
--- a/src/test/mir-opt/storage_ranges.rs
+++ b/src/test/mir-opt/storage_ranges.rs
@@ -1,3 +1,5 @@
+// EMIT_MIR rustc.main.nll.0.mir
+
 fn main() {
     let a = 0;
     {
@@ -5,32 +7,3 @@ fn main() {
     }
     let c = 1;
 }
-
-// END RUST SOURCE
-// START rustc.main.nll.0.mir
-//     bb0: {
-//         StorageLive(_1);
-//         _1 = const 0i32;
-//         FakeRead(ForLet, _1);
-//         StorageLive(_2);
-//         StorageLive(_3);
-//         StorageLive(_4);
-//         StorageLive(_5);
-//         _5 = _1;
-//         _4 = std::option::Option::<i32>::Some(move _5,);
-//         StorageDead(_5);
-//         _3 = &_4;
-//         FakeRead(ForLet, _3);
-//         _2 = ();
-//         StorageDead(_4);
-//         StorageDead(_3);
-//         StorageDead(_2);
-//         StorageLive(_6);
-//         _6 = const 1i32;
-//         FakeRead(ForLet, _6);
-//         _0 = ();
-//         StorageDead(_6);
-//         StorageDead(_1);
-//         return;
-//      }
-// END rustc.main.nll.0.mir
diff --git a/src/test/mir-opt/storage_ranges/rustc.main.nll.0.mir b/src/test/mir-opt/storage_ranges/rustc.main.nll.0.mir
new file mode 100644
index 00000000000..57ec47346e8
--- /dev/null
+++ b/src/test/mir-opt/storage_ranges/rustc.main.nll.0.mir
@@ -0,0 +1,75 @@
+// MIR for `main` 0 nll
+
+| Free Region Mapping
+| '_#0r | Global | ['_#0r, '_#1r]
+| '_#1r | Local | ['_#1r]
+|
+| Inferred Region Values
+| '_#0r | U0 | {bb0[0..=22], '_#0r, '_#1r}
+| '_#1r | U0 | {bb0[0..=22], '_#1r}
+| '_#2r | U0 | {bb0[10..=11]}
+| '_#3r | U0 | {bb0[11]}
+|
+| Inference Constraints
+| '_#0r live at {bb0[0..=22]}
+| '_#1r live at {bb0[0..=22]}
+| '_#2r live at {bb0[10]}
+| '_#3r live at {bb0[11]}
+| '_#2r: '_#3r due to Assignment at Single(bb0[10])
+|
+fn main() -> () {
+    let mut _0: ();                      // return place in scope 0 at $DIR/storage_ranges.rs:3:11: 3:11
+    let _1: i32;                         // in scope 0 at $DIR/storage_ranges.rs:4:9: 4:10
+    let _2: ();                          // in scope 0 at $DIR/storage_ranges.rs:5:5: 7:6
+    let _4: std::option::Option<i32>;    // in scope 0 at $DIR/storage_ranges.rs:6:18: 6:25
+    let mut _5: i32;                     // in scope 0 at $DIR/storage_ranges.rs:6:23: 6:24
+    scope 1 {
+        debug a => _1;                   // in scope 1 at $DIR/storage_ranges.rs:4:9: 4:10
+        let _3: &std::option::Option<i32>; // in scope 1 at $DIR/storage_ranges.rs:6:13: 6:14
+        let _6: i32;                     // in scope 1 at $DIR/storage_ranges.rs:8:9: 8:10
+        scope 2 {
+            debug b => _3;               // in scope 2 at $DIR/storage_ranges.rs:6:13: 6:14
+        }
+        scope 3 {
+            debug c => _6;               // in scope 3 at $DIR/storage_ranges.rs:8:9: 8:10
+        }
+    }
+
+    bb0: {
+        StorageLive(_1);                 // bb0[0]: scope 0 at $DIR/storage_ranges.rs:4:9: 4:10
+        _1 = const 0i32;                 // bb0[1]: scope 0 at $DIR/storage_ranges.rs:4:13: 4:14
+                                         // ty::Const
+                                         // + ty: i32
+                                         // + val: Value(Scalar(0x00000000))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_ranges.rs:4:13: 4:14
+                                         // + literal: Const { ty: i32, val: Value(Scalar(0x00000000)) }
+        FakeRead(ForLet, _1);            // bb0[2]: scope 0 at $DIR/storage_ranges.rs:4:9: 4:10
+        StorageLive(_2);                 // bb0[3]: scope 1 at $DIR/storage_ranges.rs:5:5: 7:6
+        StorageLive(_3);                 // bb0[4]: scope 1 at $DIR/storage_ranges.rs:6:13: 6:14
+        StorageLive(_4);                 // bb0[5]: scope 1 at $DIR/storage_ranges.rs:6:18: 6:25
+        StorageLive(_5);                 // bb0[6]: scope 1 at $DIR/storage_ranges.rs:6:23: 6:24
+        _5 = _1;                         // bb0[7]: scope 1 at $DIR/storage_ranges.rs:6:23: 6:24
+        _4 = std::option::Option::<i32>::Some(move _5,); // bb0[8]: scope 1 at $DIR/storage_ranges.rs:6:18: 6:25
+        StorageDead(_5);                 // bb0[9]: scope 1 at $DIR/storage_ranges.rs:6:24: 6:25
+        _3 = &_4;                        // bb0[10]: scope 1 at $DIR/storage_ranges.rs:6:17: 6:25
+        FakeRead(ForLet, _3);            // bb0[11]: scope 1 at $DIR/storage_ranges.rs:6:13: 6:14
+        _2 = ();                         // bb0[12]: scope 1 at $DIR/storage_ranges.rs:5:5: 7:6
+        StorageDead(_4);                 // bb0[13]: scope 1 at $DIR/storage_ranges.rs:7:5: 7:6
+        StorageDead(_3);                 // bb0[14]: scope 1 at $DIR/storage_ranges.rs:7:5: 7:6
+        StorageDead(_2);                 // bb0[15]: scope 1 at $DIR/storage_ranges.rs:7:5: 7:6
+        StorageLive(_6);                 // bb0[16]: scope 1 at $DIR/storage_ranges.rs:8:9: 8:10
+        _6 = const 1i32;                 // bb0[17]: scope 1 at $DIR/storage_ranges.rs:8:13: 8:14
+                                         // ty::Const
+                                         // + ty: i32
+                                         // + val: Value(Scalar(0x00000001))
+                                         // mir::Constant
+                                         // + span: $DIR/storage_ranges.rs:8:13: 8:14
+                                         // + literal: Const { ty: i32, val: Value(Scalar(0x00000001)) }
+        FakeRead(ForLet, _6);            // bb0[18]: scope 1 at $DIR/storage_ranges.rs:8:9: 8:10
+        _0 = ();                         // bb0[19]: scope 0 at $DIR/storage_ranges.rs:3:11: 9:2
+        StorageDead(_6);                 // bb0[20]: scope 1 at $DIR/storage_ranges.rs:9:1: 9:2
+        StorageDead(_1);                 // bb0[21]: scope 0 at $DIR/storage_ranges.rs:9:1: 9:2
+        return;                          // bb0[22]: scope 0 at $DIR/storage_ranges.rs:9:2: 9:2
+    }
+}
diff --git a/src/test/mir-opt/uniform_array_move_out.rs b/src/test/mir-opt/uniform_array_move_out.rs
index d587d237227..c1b7ebdbc3a 100644
--- a/src/test/mir-opt/uniform_array_move_out.rs
+++ b/src/test/mir-opt/uniform_array_move_out.rs
@@ -1,10 +1,12 @@
 #![feature(box_syntax)]
 
+// EMIT_MIR rustc.move_out_from_end.mir_map.0.mir
 fn move_out_from_end() {
     let a = [box 1, box 2];
     let [.., _y] = a;
 }
 
+// EMIT_MIR rustc.move_out_by_subslice.mir_map.0.mir
 fn move_out_by_subslice() {
     let a = [box 1, box 2];
     let [_y @ ..] = a;
@@ -14,15 +16,3 @@ fn main() {
     move_out_by_subslice();
     move_out_from_end();
 }
-
-// END RUST SOURCE
-
-// START rustc.move_out_from_end.mir_map.0.mir
-//      _6 = move _1[1 of 2];
-//      _0 = ();
-// END rustc.move_out_from_end.mir_map.0.mir
-
-// START rustc.move_out_by_subslice.mir_map.0.mir
-//     _6 = move _1[0..2];
-//     _0 = ();
-// END rustc.move_out_by_subslice.mir_map.0.mir
diff --git a/src/test/mir-opt/uniform_array_move_out/rustc.move_out_by_subslice.mir_map.0.mir b/src/test/mir-opt/uniform_array_move_out/rustc.move_out_by_subslice.mir_map.0.mir
new file mode 100644
index 00000000000..5dbee8f7b3d
--- /dev/null
+++ b/src/test/mir-opt/uniform_array_move_out/rustc.move_out_by_subslice.mir_map.0.mir
@@ -0,0 +1,111 @@
+// MIR for `move_out_by_subslice` 0 mir_map
+
+fn move_out_by_subslice() -> () {
+    let mut _0: ();                      // return place in scope 0 at $DIR/uniform_array_move_out.rs:10:27: 10:27
+    let _1: [std::boxed::Box<i32>; 2];   // in scope 0 at $DIR/uniform_array_move_out.rs:11:9: 11:10
+    let mut _2: std::boxed::Box<i32>;    // in scope 0 at $DIR/uniform_array_move_out.rs:11:14: 11:19
+    let mut _3: std::boxed::Box<i32>;    // in scope 0 at $DIR/uniform_array_move_out.rs:11:14: 11:19
+    let mut _4: std::boxed::Box<i32>;    // in scope 0 at $DIR/uniform_array_move_out.rs:11:21: 11:26
+    let mut _5: std::boxed::Box<i32>;    // in scope 0 at $DIR/uniform_array_move_out.rs:11:21: 11:26
+    scope 1 {
+        debug a => _1;                   // in scope 1 at $DIR/uniform_array_move_out.rs:11:9: 11:10
+        let _6: [std::boxed::Box<i32>; 2]; // in scope 1 at $DIR/uniform_array_move_out.rs:12:10: 12:17
+        scope 2 {
+            debug _y => _6;              // in scope 2 at $DIR/uniform_array_move_out.rs:12:10: 12:17
+        }
+    }
+
+    bb0: {
+        StorageLive(_1);                 // bb0[0]: scope 0 at $DIR/uniform_array_move_out.rs:11:9: 11:10
+        StorageLive(_2);                 // bb0[1]: scope 0 at $DIR/uniform_array_move_out.rs:11:14: 11:19
+        StorageLive(_3);                 // bb0[2]: scope 0 at $DIR/uniform_array_move_out.rs:11:14: 11:19
+        _3 = Box(i32);                   // bb0[3]: scope 0 at $DIR/uniform_array_move_out.rs:11:14: 11:19
+        (*_3) = const 1i32;              // bb0[4]: scope 0 at $DIR/uniform_array_move_out.rs:11:18: 11:19
+                                         // ty::Const
+                                         // + ty: i32
+                                         // + val: Value(Scalar(0x00000001))
+                                         // mir::Constant
+                                         // + span: $DIR/uniform_array_move_out.rs:11:18: 11:19
+                                         // + literal: Const { ty: i32, val: Value(Scalar(0x00000001)) }
+        _2 = move _3;                    // bb0[5]: scope 0 at $DIR/uniform_array_move_out.rs:11:14: 11:19
+        drop(_3) -> [return: bb4, unwind: bb2]; // bb0[6]: scope 0 at $DIR/uniform_array_move_out.rs:11:18: 11:19
+    }
+
+    bb1 (cleanup): {
+        resume;                          // bb1[0]: scope 0 at $DIR/uniform_array_move_out.rs:10:1: 13:2
+    }
+
+    bb2 (cleanup): {
+        drop(_2) -> bb1;                 // bb2[0]: scope 0 at $DIR/uniform_array_move_out.rs:11:26: 11:27
+    }
+
+    bb3 (cleanup): {
+        drop(_3) -> bb2;                 // bb3[0]: scope 0 at $DIR/uniform_array_move_out.rs:11:18: 11:19
+    }
+
+    bb4: {
+        StorageDead(_3);                 // bb4[0]: scope 0 at $DIR/uniform_array_move_out.rs:11:18: 11:19
+        StorageLive(_4);                 // bb4[1]: scope 0 at $DIR/uniform_array_move_out.rs:11:21: 11:26
+        StorageLive(_5);                 // bb4[2]: scope 0 at $DIR/uniform_array_move_out.rs:11:21: 11:26
+        _5 = Box(i32);                   // bb4[3]: scope 0 at $DIR/uniform_array_move_out.rs:11:21: 11:26
+        (*_5) = const 2i32;              // bb4[4]: scope 0 at $DIR/uniform_array_move_out.rs:11:25: 11:26
+                                         // ty::Const
+                                         // + ty: i32
+                                         // + val: Value(Scalar(0x00000002))
+                                         // mir::Constant
+                                         // + span: $DIR/uniform_array_move_out.rs:11:25: 11:26
+                                         // + literal: Const { ty: i32, val: Value(Scalar(0x00000002)) }
+        _4 = move _5;                    // bb4[5]: scope 0 at $DIR/uniform_array_move_out.rs:11:21: 11:26
+        drop(_5) -> [return: bb7, unwind: bb5]; // bb4[6]: scope 0 at $DIR/uniform_array_move_out.rs:11:25: 11:26
+    }
+
+    bb5 (cleanup): {
+        drop(_4) -> bb2;                 // bb5[0]: scope 0 at $DIR/uniform_array_move_out.rs:11:26: 11:27
+    }
+
+    bb6 (cleanup): {
+        drop(_5) -> bb5;                 // bb6[0]: scope 0 at $DIR/uniform_array_move_out.rs:11:25: 11:26
+    }
+
+    bb7: {
+        StorageDead(_5);                 // bb7[0]: scope 0 at $DIR/uniform_array_move_out.rs:11:25: 11:26
+        _1 = [move _2, move _4];         // bb7[1]: scope 0 at $DIR/uniform_array_move_out.rs:11:13: 11:27
+        drop(_4) -> [return: bb8, unwind: bb2]; // bb7[2]: scope 0 at $DIR/uniform_array_move_out.rs:11:26: 11:27
+    }
+
+    bb8: {
+        StorageDead(_4);                 // bb8[0]: scope 0 at $DIR/uniform_array_move_out.rs:11:26: 11:27
+        drop(_2) -> [return: bb9, unwind: bb1]; // bb8[1]: scope 0 at $DIR/uniform_array_move_out.rs:11:26: 11:27
+    }
+
+    bb9: {
+        StorageDead(_2);                 // bb9[0]: scope 0 at $DIR/uniform_array_move_out.rs:11:26: 11:27
+        FakeRead(ForLet, _1);            // bb9[1]: scope 0 at $DIR/uniform_array_move_out.rs:11:9: 11:10
+        StorageLive(_6);                 // bb9[2]: scope 1 at $DIR/uniform_array_move_out.rs:12:10: 12:17
+        _6 = move _1[0..2];              // bb9[3]: scope 1 at $DIR/uniform_array_move_out.rs:12:10: 12:17
+        _0 = ();                         // bb9[4]: scope 0 at $DIR/uniform_array_move_out.rs:10:27: 13:2
+        drop(_6) -> [return: bb12, unwind: bb10]; // bb9[5]: scope 1 at $DIR/uniform_array_move_out.rs:13:1: 13:2
+    }
+
+    bb10 (cleanup): {
+        drop(_1) -> bb1;                 // bb10[0]: scope 0 at $DIR/uniform_array_move_out.rs:13:1: 13:2
+    }
+
+    bb11 (cleanup): {
+        drop(_6) -> bb10;                // bb11[0]: scope 1 at $DIR/uniform_array_move_out.rs:13:1: 13:2
+    }
+
+    bb12: {
+        StorageDead(_6);                 // bb12[0]: scope 1 at $DIR/uniform_array_move_out.rs:13:1: 13:2
+        drop(_1) -> [return: bb13, unwind: bb1]; // bb12[1]: scope 0 at $DIR/uniform_array_move_out.rs:13:1: 13:2
+    }
+
+    bb13: {
+        StorageDead(_1);                 // bb13[0]: scope 0 at $DIR/uniform_array_move_out.rs:13:1: 13:2
+        goto -> bb14;                    // bb13[1]: scope 0 at $DIR/uniform_array_move_out.rs:13:2: 13:2
+    }
+
+    bb14: {
+        return;                          // bb14[0]: scope 0 at $DIR/uniform_array_move_out.rs:13:2: 13:2
+    }
+}
diff --git a/src/test/mir-opt/uniform_array_move_out/rustc.move_out_from_end.mir_map.0.mir b/src/test/mir-opt/uniform_array_move_out/rustc.move_out_from_end.mir_map.0.mir
new file mode 100644
index 00000000000..4a5cd625c9d
--- /dev/null
+++ b/src/test/mir-opt/uniform_array_move_out/rustc.move_out_from_end.mir_map.0.mir
@@ -0,0 +1,111 @@
+// MIR for `move_out_from_end` 0 mir_map
+
+fn move_out_from_end() -> () {
+    let mut _0: ();                      // return place in scope 0 at $DIR/uniform_array_move_out.rs:4:24: 4:24
+    let _1: [std::boxed::Box<i32>; 2];   // in scope 0 at $DIR/uniform_array_move_out.rs:5:9: 5:10
+    let mut _2: std::boxed::Box<i32>;    // in scope 0 at $DIR/uniform_array_move_out.rs:5:14: 5:19
+    let mut _3: std::boxed::Box<i32>;    // in scope 0 at $DIR/uniform_array_move_out.rs:5:14: 5:19
+    let mut _4: std::boxed::Box<i32>;    // in scope 0 at $DIR/uniform_array_move_out.rs:5:21: 5:26
+    let mut _5: std::boxed::Box<i32>;    // in scope 0 at $DIR/uniform_array_move_out.rs:5:21: 5:26
+    scope 1 {
+        debug a => _1;                   // in scope 1 at $DIR/uniform_array_move_out.rs:5:9: 5:10
+        let _6: std::boxed::Box<i32>;    // in scope 1 at $DIR/uniform_array_move_out.rs:6:14: 6:16
+        scope 2 {
+            debug _y => _6;              // in scope 2 at $DIR/uniform_array_move_out.rs:6:14: 6:16
+        }
+    }
+
+    bb0: {
+        StorageLive(_1);                 // bb0[0]: scope 0 at $DIR/uniform_array_move_out.rs:5:9: 5:10
+        StorageLive(_2);                 // bb0[1]: scope 0 at $DIR/uniform_array_move_out.rs:5:14: 5:19
+        StorageLive(_3);                 // bb0[2]: scope 0 at $DIR/uniform_array_move_out.rs:5:14: 5:19
+        _3 = Box(i32);                   // bb0[3]: scope 0 at $DIR/uniform_array_move_out.rs:5:14: 5:19
+        (*_3) = const 1i32;              // bb0[4]: scope 0 at $DIR/uniform_array_move_out.rs:5:18: 5:19
+                                         // ty::Const
+                                         // + ty: i32
+                                         // + val: Value(Scalar(0x00000001))
+                                         // mir::Constant
+                                         // + span: $DIR/uniform_array_move_out.rs:5:18: 5:19
+                                         // + literal: Const { ty: i32, val: Value(Scalar(0x00000001)) }
+        _2 = move _3;                    // bb0[5]: scope 0 at $DIR/uniform_array_move_out.rs:5:14: 5:19
+        drop(_3) -> [return: bb4, unwind: bb2]; // bb0[6]: scope 0 at $DIR/uniform_array_move_out.rs:5:18: 5:19
+    }
+
+    bb1 (cleanup): {
+        resume;                          // bb1[0]: scope 0 at $DIR/uniform_array_move_out.rs:4:1: 7:2
+    }
+
+    bb2 (cleanup): {
+        drop(_2) -> bb1;                 // bb2[0]: scope 0 at $DIR/uniform_array_move_out.rs:5:26: 5:27
+    }
+
+    bb3 (cleanup): {
+        drop(_3) -> bb2;                 // bb3[0]: scope 0 at $DIR/uniform_array_move_out.rs:5:18: 5:19
+    }
+
+    bb4: {
+        StorageDead(_3);                 // bb4[0]: scope 0 at $DIR/uniform_array_move_out.rs:5:18: 5:19
+        StorageLive(_4);                 // bb4[1]: scope 0 at $DIR/uniform_array_move_out.rs:5:21: 5:26
+        StorageLive(_5);                 // bb4[2]: scope 0 at $DIR/uniform_array_move_out.rs:5:21: 5:26
+        _5 = Box(i32);                   // bb4[3]: scope 0 at $DIR/uniform_array_move_out.rs:5:21: 5:26
+        (*_5) = const 2i32;              // bb4[4]: scope 0 at $DIR/uniform_array_move_out.rs:5:25: 5:26
+                                         // ty::Const
+                                         // + ty: i32
+                                         // + val: Value(Scalar(0x00000002))
+                                         // mir::Constant
+                                         // + span: $DIR/uniform_array_move_out.rs:5:25: 5:26
+                                         // + literal: Const { ty: i32, val: Value(Scalar(0x00000002)) }
+        _4 = move _5;                    // bb4[5]: scope 0 at $DIR/uniform_array_move_out.rs:5:21: 5:26
+        drop(_5) -> [return: bb7, unwind: bb5]; // bb4[6]: scope 0 at $DIR/uniform_array_move_out.rs:5:25: 5:26
+    }
+
+    bb5 (cleanup): {
+        drop(_4) -> bb2;                 // bb5[0]: scope 0 at $DIR/uniform_array_move_out.rs:5:26: 5:27
+    }
+
+    bb6 (cleanup): {
+        drop(_5) -> bb5;                 // bb6[0]: scope 0 at $DIR/uniform_array_move_out.rs:5:25: 5:26
+    }
+
+    bb7: {
+        StorageDead(_5);                 // bb7[0]: scope 0 at $DIR/uniform_array_move_out.rs:5:25: 5:26
+        _1 = [move _2, move _4];         // bb7[1]: scope 0 at $DIR/uniform_array_move_out.rs:5:13: 5:27
+        drop(_4) -> [return: bb8, unwind: bb2]; // bb7[2]: scope 0 at $DIR/uniform_array_move_out.rs:5:26: 5:27
+    }
+
+    bb8: {
+        StorageDead(_4);                 // bb8[0]: scope 0 at $DIR/uniform_array_move_out.rs:5:26: 5:27
+        drop(_2) -> [return: bb9, unwind: bb1]; // bb8[1]: scope 0 at $DIR/uniform_array_move_out.rs:5:26: 5:27
+    }
+
+    bb9: {
+        StorageDead(_2);                 // bb9[0]: scope 0 at $DIR/uniform_array_move_out.rs:5:26: 5:27
+        FakeRead(ForLet, _1);            // bb9[1]: scope 0 at $DIR/uniform_array_move_out.rs:5:9: 5:10
+        StorageLive(_6);                 // bb9[2]: scope 1 at $DIR/uniform_array_move_out.rs:6:14: 6:16
+        _6 = move _1[1 of 2];            // bb9[3]: scope 1 at $DIR/uniform_array_move_out.rs:6:14: 6:16
+        _0 = ();                         // bb9[4]: scope 0 at $DIR/uniform_array_move_out.rs:4:24: 7:2
+        drop(_6) -> [return: bb12, unwind: bb10]; // bb9[5]: scope 1 at $DIR/uniform_array_move_out.rs:7:1: 7:2
+    }
+
+    bb10 (cleanup): {
+        drop(_1) -> bb1;                 // bb10[0]: scope 0 at $DIR/uniform_array_move_out.rs:7:1: 7:2
+    }
+
+    bb11 (cleanup): {
+        drop(_6) -> bb10;                // bb11[0]: scope 1 at $DIR/uniform_array_move_out.rs:7:1: 7:2
+    }
+
+    bb12: {
+        StorageDead(_6);                 // bb12[0]: scope 1 at $DIR/uniform_array_move_out.rs:7:1: 7:2
+        drop(_1) -> [return: bb13, unwind: bb1]; // bb12[1]: scope 0 at $DIR/uniform_array_move_out.rs:7:1: 7:2
+    }
+
+    bb13: {
+        StorageDead(_1);                 // bb13[0]: scope 0 at $DIR/uniform_array_move_out.rs:7:1: 7:2
+        goto -> bb14;                    // bb13[1]: scope 0 at $DIR/uniform_array_move_out.rs:7:2: 7:2
+    }
+
+    bb14: {
+        return;                          // bb14[0]: scope 0 at $DIR/uniform_array_move_out.rs:7:2: 7:2
+    }
+}
diff --git a/src/test/mir-opt/uninhabited-enum.rs b/src/test/mir-opt/uninhabited-enum.rs
index 904a9c43c1b..6503e193608 100644
--- a/src/test/mir-opt/uninhabited-enum.rs
+++ b/src/test/mir-opt/uninhabited-enum.rs
@@ -2,11 +2,13 @@
 
 pub enum Void {}
 
+// EMIT_MIR rustc.process_never.SimplifyLocals.after.mir
 #[no_mangle]
 pub fn process_never(input: *const !) {
    let _input = unsafe { &*input };
 }
 
+// EMIT_MIR rustc.process_void.SimplifyLocals.after.mir
 #[no_mangle]
 pub fn process_void(input: *const Void) {
    let _input = unsafe { &*input };
@@ -15,23 +17,3 @@ pub fn process_void(input: *const Void) {
 }
 
 fn main() {}
-
-// END RUST SOURCE
-//
-// START rustc.process_never.SimplifyLocals.after.mir
-// bb0: {
-//     StorageLive(_2);
-//     _2 = &(*_1);
-//     StorageDead(_2);
-//     unreachable;
-// }
-// END rustc.process_never.SimplifyLocals.after.mir
-//
-// START rustc.process_void.SimplifyLocals.after.mir
-// bb0: {
-//     StorageLive(_2);
-//     _2 = &(*_1);
-//     StorageDead(_2);
-//     return;
-// }
-// END rustc.process_void.SimplifyLocals.after.mir
diff --git a/src/test/mir-opt/uninhabited-enum/rustc.process_never.SimplifyLocals.after.mir b/src/test/mir-opt/uninhabited-enum/rustc.process_never.SimplifyLocals.after.mir
new file mode 100644
index 00000000000..f2c87336608
--- /dev/null
+++ b/src/test/mir-opt/uninhabited-enum/rustc.process_never.SimplifyLocals.after.mir
@@ -0,0 +1,19 @@
+// MIR for `process_never` after SimplifyLocals
+
+fn process_never(_1: *const !) -> () {
+    debug input => _1;                   // in scope 0 at $DIR/uninhabited-enum.rs:7:22: 7:27
+    let mut _0: ();                      // return place in scope 0 at $DIR/uninhabited-enum.rs:7:39: 7:39
+    let _2: &!;                          // in scope 0 at $DIR/uninhabited-enum.rs:8:8: 8:14
+    scope 1 {
+        debug _input => _2;              // in scope 1 at $DIR/uninhabited-enum.rs:8:8: 8:14
+    }
+    scope 2 {
+    }
+
+    bb0: {
+        StorageLive(_2);                 // bb0[0]: scope 0 at $DIR/uninhabited-enum.rs:8:8: 8:14
+        _2 = &(*_1);                     // bb0[1]: scope 2 at $DIR/uninhabited-enum.rs:8:26: 8:33
+        StorageDead(_2);                 // bb0[2]: scope 0 at $DIR/uninhabited-enum.rs:9:1: 9:2
+        unreachable;                     // bb0[3]: scope 0 at $DIR/uninhabited-enum.rs:7:39: 9:2
+    }
+}
diff --git a/src/test/mir-opt/uninhabited-enum/rustc.process_void.SimplifyLocals.after.mir b/src/test/mir-opt/uninhabited-enum/rustc.process_void.SimplifyLocals.after.mir
new file mode 100644
index 00000000000..2eb820bbdc3
--- /dev/null
+++ b/src/test/mir-opt/uninhabited-enum/rustc.process_void.SimplifyLocals.after.mir
@@ -0,0 +1,19 @@
+// MIR for `process_void` after SimplifyLocals
+
+fn process_void(_1: *const Void) -> () {
+    debug input => _1;                   // in scope 0 at $DIR/uninhabited-enum.rs:13:21: 13:26
+    let mut _0: ();                      // return place in scope 0 at $DIR/uninhabited-enum.rs:13:41: 13:41
+    let _2: &Void;                       // in scope 0 at $DIR/uninhabited-enum.rs:14:8: 14:14
+    scope 1 {
+        debug _input => _2;              // in scope 1 at $DIR/uninhabited-enum.rs:14:8: 14:14
+    }
+    scope 2 {
+    }
+
+    bb0: {
+        StorageLive(_2);                 // bb0[0]: scope 0 at $DIR/uninhabited-enum.rs:14:8: 14:14
+        _2 = &(*_1);                     // bb0[1]: scope 2 at $DIR/uninhabited-enum.rs:14:26: 14:33
+        StorageDead(_2);                 // bb0[2]: scope 0 at $DIR/uninhabited-enum.rs:17:1: 17:2
+        return;                          // bb0[3]: scope 0 at $DIR/uninhabited-enum.rs:17:2: 17:2
+    }
+}
diff --git a/src/test/mir-opt/uninhabited_enum_branching.rs b/src/test/mir-opt/uninhabited_enum_branching.rs
index dda5fd4fb75..daf1156d20e 100644
--- a/src/test/mir-opt/uninhabited_enum_branching.rs
+++ b/src/test/mir-opt/uninhabited_enum_branching.rs
@@ -14,6 +14,8 @@ enum Test2 {
     E = 5,
 }
 
+// EMIT_MIR rustc.main.UninhabitedEnumBranching.diff
+// EMIT_MIR rustc.main.SimplifyCfg-after-uninhabited-enum-branching.after.mir
 fn main() {
     match Test1::C {
         Test1::A(_) => "A(Empty)",
@@ -26,178 +28,3 @@ fn main() {
         Test2::E => "E",
     };
 }
-
-// END RUST SOURCE
-//
-// START rustc.main.UninhabitedEnumBranching.before.mir
-// let mut _0: ();
-// let _1: &str;
-// let mut _2: Test1;
-// let mut _3: isize;
-// let _4: &str;
-// let _5: &str;
-// let _6: &str;
-// let mut _7: Test2;
-// let mut _8: isize;
-// let _9: &str;
-// bb0: {
-//   StorageLive(_1);
-//   StorageLive(_2);
-//   _2 = Test1::C;
-//   _3 = discriminant(_2);
-//   switchInt(move _3) -> [0isize: bb2, 1isize: bb3, otherwise: bb1];
-// }
-// bb1: {
-//   StorageLive(_5);
-//   _5 = const "C";
-//   _1 = &(*_5);
-//   StorageDead(_5);
-//   goto -> bb4;
-// }
-// bb2: {
-//   _1 = const "A(Empty)";
-//   goto -> bb4;
-// }
-// bb3: {
-//   StorageLive(_4);
-//   _4 = const "B(Empty)";
-//   _1 = &(*_4);
-//   StorageDead(_4);
-//   goto -> bb4;
-// }
-// bb4: {
-//   StorageDead(_2);
-//   StorageDead(_1);
-//   StorageLive(_6);
-//   StorageLive(_7);
-//   _7 = Test2::D;
-//   _8 = discriminant(_7);
-//   switchInt(move _8) -> [4isize: bb6, otherwise: bb5];
-// }
-// bb5: {
-//   StorageLive(_9);
-//   _9 = const "E";
-//   _6 = &(*_9);
-//   StorageDead(_9);
-//   goto -> bb7;
-// }
-// bb6: {
-//   _6 = const "D";
-//   goto -> bb7;
-// }
-// bb7: {
-//   StorageDead(_7);
-//   StorageDead(_6);
-//   _0 = ();
-//   return;
-// }
-// END rustc.main.UninhabitedEnumBranching.before.mir
-// START rustc.main.UninhabitedEnumBranching.after.mir
-// let mut _0: ();
-// let _1: &str;
-// let mut _2: Test1;
-// let mut _3: isize;
-// let _4: &str;
-// let _5: &str;
-// let _6: &str;
-// let mut _7: Test2;
-// let mut _8: isize;
-// let _9: &str;
-// bb0: {
-//   StorageLive(_1);
-//   StorageLive(_2);
-//   _2 = Test1::C;
-//   _3 = discriminant(_2);
-//   switchInt(move _3) -> bb1;
-// }
-// bb1: {
-//   StorageLive(_5);
-//   _5 = const "C";
-//   _1 = &(*_5);
-//   StorageDead(_5);
-//   goto -> bb4;
-// }
-// bb2: {
-//   _1 = const "A(Empty)";
-//   goto -> bb4;
-// }
-// bb3: {
-//   StorageLive(_4);
-//   _4 = const "B(Empty)";
-//   _1 = &(*_4);
-//   StorageDead(_4);
-//   goto -> bb4;
-// }
-// bb4: {
-//   StorageDead(_2);
-//   StorageDead(_1);
-//   StorageLive(_6);
-//   StorageLive(_7);
-//   _7 = Test2::D;
-//   _8 = discriminant(_7);
-//   switchInt(move _8) -> [4isize: bb6, otherwise: bb5];
-// }
-// bb5: {
-//   StorageLive(_9);
-//   _9 = const "E";
-//   _6 = &(*_9);
-//   StorageDead(_9);
-//   goto -> bb7;
-// }
-// bb6: {
-//   _6 = const "D";
-//   goto -> bb7;
-// }
-// bb7: {
-//   StorageDead(_7);
-//   StorageDead(_6);
-//   _0 = ();
-//   return;
-// }
-// END rustc.main.UninhabitedEnumBranching.after.mir
-// START rustc.main.SimplifyCfg-after-uninhabited-enum-branching.after.mir
-// let mut _0: ();
-// let _1: &str;
-// let mut _2: Test1;
-// let mut _3: isize;
-// let _4: &str;
-// let _5: &str;
-// let _6: &str;
-// let mut _7: Test2;
-// let mut _8: isize;
-// let _9: &str;
-// bb0: {
-//   StorageLive(_1);
-//   StorageLive(_2);
-//   _2 = Test1::C;
-//   _3 = discriminant(_2);
-//   StorageLive(_5);
-//   _5 = const "C";
-//   _1 = &(*_5);
-//   StorageDead(_5);
-//   StorageDead(_2);
-//   StorageDead(_1);
-//   StorageLive(_6);
-//   StorageLive(_7);
-//   _7 = Test2::D;
-//   _8 = discriminant(_7);
-//   switchInt(move _8) -> [4isize: bb2, otherwise: bb1];
-// }
-// bb1: {
-//   StorageLive(_9);
-//   _9 = const "E";
-//   _6 = &(*_9);
-//   StorageDead(_9);
-//   goto -> bb3;
-// }
-// bb2: {
-//   _6 = const "D";
-//   goto -> bb3;
-// }
-// bb3: {
-//   StorageDead(_7);
-//   StorageDead(_6);
-//   _0 = ();
-//   return;
-// }
-// END rustc.main.SimplifyCfg-after-uninhabited-enum-branching.after.mir
diff --git a/src/test/mir-opt/uninhabited_enum_branching/rustc.main.SimplifyCfg-after-uninhabited-enum-branching.after.mir b/src/test/mir-opt/uninhabited_enum_branching/rustc.main.SimplifyCfg-after-uninhabited-enum-branching.after.mir
new file mode 100644
index 00000000000..c8dde4d360c
--- /dev/null
+++ b/src/test/mir-opt/uninhabited_enum_branching/rustc.main.SimplifyCfg-after-uninhabited-enum-branching.after.mir
@@ -0,0 +1,70 @@
+// MIR for `main` after SimplifyCfg-after-uninhabited-enum-branching
+
+fn main() -> () {
+    let mut _0: ();                      // return place in scope 0 at $DIR/uninhabited_enum_branching.rs:19:11: 19:11
+    let _1: &str;                        // in scope 0 at $DIR/uninhabited_enum_branching.rs:20:5: 24:6
+    let mut _2: Test1;                   // in scope 0 at $DIR/uninhabited_enum_branching.rs:20:11: 20:19
+    let mut _3: isize;                   // in scope 0 at $DIR/uninhabited_enum_branching.rs:21:9: 21:20
+    let _4: &str;                        // in scope 0 at $DIR/uninhabited_enum_branching.rs:22:24: 22:34
+    let _5: &str;                        // in scope 0 at $DIR/uninhabited_enum_branching.rs:23:21: 23:24
+    let _6: &str;                        // in scope 0 at $DIR/uninhabited_enum_branching.rs:26:5: 29:6
+    let mut _7: Test2;                   // in scope 0 at $DIR/uninhabited_enum_branching.rs:26:11: 26:19
+    let mut _8: isize;                   // in scope 0 at $DIR/uninhabited_enum_branching.rs:27:9: 27:17
+    let _9: &str;                        // in scope 0 at $DIR/uninhabited_enum_branching.rs:28:21: 28:24
+
+    bb0: {
+        StorageLive(_1);                 // bb0[0]: scope 0 at $DIR/uninhabited_enum_branching.rs:20:5: 24:6
+        StorageLive(_2);                 // bb0[1]: scope 0 at $DIR/uninhabited_enum_branching.rs:20:11: 20:19
+        _2 = Test1::C;                   // bb0[2]: scope 0 at $DIR/uninhabited_enum_branching.rs:20:11: 20:19
+        _3 = discriminant(_2);           // bb0[3]: scope 0 at $DIR/uninhabited_enum_branching.rs:21:9: 21:20
+        StorageLive(_5);                 // bb0[4]: scope 0 at $DIR/uninhabited_enum_branching.rs:23:21: 23:24
+        _5 = const "C";                  // bb0[5]: scope 0 at $DIR/uninhabited_enum_branching.rs:23:21: 23:24
+                                         // ty::Const
+                                         // + ty: &str
+                                         // + val: Value(Slice { data: Allocation { bytes: [67], relocations: Relocations(SortedMap { data: [] }), undef_mask: UndefMask { blocks: [1], len: Size { raw: 1 } }, size: Size { raw: 1 }, align: Align { pow2: 0 }, mutability: Not, extra: () }, start: 0, end: 1 })
+                                         // mir::Constant
+                                         // + span: $DIR/uninhabited_enum_branching.rs:23:21: 23:24
+                                         // + literal: Const { ty: &str, val: Value(Slice { data: Allocation { bytes: [67], relocations: Relocations(SortedMap { data: [] }), undef_mask: UndefMask { blocks: [1], len: Size { raw: 1 } }, size: Size { raw: 1 }, align: Align { pow2: 0 }, mutability: Not, extra: () }, start: 0, end: 1 }) }
+        _1 = &(*_5);                     // bb0[6]: scope 0 at $DIR/uninhabited_enum_branching.rs:23:21: 23:24
+        StorageDead(_5);                 // bb0[7]: scope 0 at $DIR/uninhabited_enum_branching.rs:23:23: 23:24
+        StorageDead(_2);                 // bb0[8]: scope 0 at $DIR/uninhabited_enum_branching.rs:24:6: 24:7
+        StorageDead(_1);                 // bb0[9]: scope 0 at $DIR/uninhabited_enum_branching.rs:24:6: 24:7
+        StorageLive(_6);                 // bb0[10]: scope 0 at $DIR/uninhabited_enum_branching.rs:26:5: 29:6
+        StorageLive(_7);                 // bb0[11]: scope 0 at $DIR/uninhabited_enum_branching.rs:26:11: 26:19
+        _7 = Test2::D;                   // bb0[12]: scope 0 at $DIR/uninhabited_enum_branching.rs:26:11: 26:19
+        _8 = discriminant(_7);           // bb0[13]: scope 0 at $DIR/uninhabited_enum_branching.rs:27:9: 27:17
+        switchInt(move _8) -> [4isize: bb2, otherwise: bb1]; // bb0[14]: scope 0 at $DIR/uninhabited_enum_branching.rs:27:9: 27:17
+    }
+
+    bb1: {
+        StorageLive(_9);                 // bb1[0]: scope 0 at $DIR/uninhabited_enum_branching.rs:28:21: 28:24
+        _9 = const "E";                  // bb1[1]: scope 0 at $DIR/uninhabited_enum_branching.rs:28:21: 28:24
+                                         // ty::Const
+                                         // + ty: &str
+                                         // + val: Value(Slice { data: Allocation { bytes: [69], relocations: Relocations(SortedMap { data: [] }), undef_mask: UndefMask { blocks: [1], len: Size { raw: 1 } }, size: Size { raw: 1 }, align: Align { pow2: 0 }, mutability: Not, extra: () }, start: 0, end: 1 })
+                                         // mir::Constant
+                                         // + span: $DIR/uninhabited_enum_branching.rs:28:21: 28:24
+                                         // + literal: Const { ty: &str, val: Value(Slice { data: Allocation { bytes: [69], relocations: Relocations(SortedMap { data: [] }), undef_mask: UndefMask { blocks: [1], len: Size { raw: 1 } }, size: Size { raw: 1 }, align: Align { pow2: 0 }, mutability: Not, extra: () }, start: 0, end: 1 }) }
+        _6 = &(*_9);                     // bb1[2]: scope 0 at $DIR/uninhabited_enum_branching.rs:28:21: 28:24
+        StorageDead(_9);                 // bb1[3]: scope 0 at $DIR/uninhabited_enum_branching.rs:28:23: 28:24
+        goto -> bb3;                     // bb1[4]: scope 0 at $DIR/uninhabited_enum_branching.rs:26:5: 29:6
+    }
+
+    bb2: {
+        _6 = const "D";                  // bb2[0]: scope 0 at $DIR/uninhabited_enum_branching.rs:27:21: 27:24
+                                         // ty::Const
+                                         // + ty: &str
+                                         // + val: Value(Slice { data: Allocation { bytes: [68], relocations: Relocations(SortedMap { data: [] }), undef_mask: UndefMask { blocks: [1], len: Size { raw: 1 } }, size: Size { raw: 1 }, align: Align { pow2: 0 }, mutability: Not, extra: () }, start: 0, end: 1 })
+                                         // mir::Constant
+                                         // + span: $DIR/uninhabited_enum_branching.rs:27:21: 27:24
+                                         // + literal: Const { ty: &str, val: Value(Slice { data: Allocation { bytes: [68], relocations: Relocations(SortedMap { data: [] }), undef_mask: UndefMask { blocks: [1], len: Size { raw: 1 } }, size: Size { raw: 1 }, align: Align { pow2: 0 }, mutability: Not, extra: () }, start: 0, end: 1 }) }
+        goto -> bb3;                     // bb2[1]: scope 0 at $DIR/uninhabited_enum_branching.rs:26:5: 29:6
+    }
+
+    bb3: {
+        StorageDead(_7);                 // bb3[0]: scope 0 at $DIR/uninhabited_enum_branching.rs:29:6: 29:7
+        StorageDead(_6);                 // bb3[1]: scope 0 at $DIR/uninhabited_enum_branching.rs:29:6: 29:7
+        _0 = ();                         // bb3[2]: scope 0 at $DIR/uninhabited_enum_branching.rs:19:11: 30:2
+        return;                          // bb3[3]: scope 0 at $DIR/uninhabited_enum_branching.rs:30:2: 30:2
+    }
+}
diff --git a/src/test/mir-opt/uninhabited_enum_branching/rustc.main.UninhabitedEnumBranching.diff b/src/test/mir-opt/uninhabited_enum_branching/rustc.main.UninhabitedEnumBranching.diff
new file mode 100644
index 00000000000..cccd6aa3230
--- /dev/null
+++ b/src/test/mir-opt/uninhabited_enum_branching/rustc.main.UninhabitedEnumBranching.diff
@@ -0,0 +1,106 @@
+- // MIR for `main` before UninhabitedEnumBranching
++ // MIR for `main` after UninhabitedEnumBranching
+  
+  fn main() -> () {
+      let mut _0: ();                      // return place in scope 0 at $DIR/uninhabited_enum_branching.rs:19:11: 19:11
+      let _1: &str;                        // in scope 0 at $DIR/uninhabited_enum_branching.rs:20:5: 24:6
+      let mut _2: Test1;                   // in scope 0 at $DIR/uninhabited_enum_branching.rs:20:11: 20:19
+      let mut _3: isize;                   // in scope 0 at $DIR/uninhabited_enum_branching.rs:21:9: 21:20
+      let _4: &str;                        // in scope 0 at $DIR/uninhabited_enum_branching.rs:22:24: 22:34
+      let _5: &str;                        // in scope 0 at $DIR/uninhabited_enum_branching.rs:23:21: 23:24
+      let _6: &str;                        // in scope 0 at $DIR/uninhabited_enum_branching.rs:26:5: 29:6
+      let mut _7: Test2;                   // in scope 0 at $DIR/uninhabited_enum_branching.rs:26:11: 26:19
+      let mut _8: isize;                   // in scope 0 at $DIR/uninhabited_enum_branching.rs:27:9: 27:17
+      let _9: &str;                        // in scope 0 at $DIR/uninhabited_enum_branching.rs:28:21: 28:24
+  
+      bb0: {
+          StorageLive(_1);                 // bb0[0]: scope 0 at $DIR/uninhabited_enum_branching.rs:20:5: 24:6
+          StorageLive(_2);                 // bb0[1]: scope 0 at $DIR/uninhabited_enum_branching.rs:20:11: 20:19
+          _2 = Test1::C;                   // bb0[2]: scope 0 at $DIR/uninhabited_enum_branching.rs:20:11: 20:19
+          _3 = discriminant(_2);           // bb0[3]: scope 0 at $DIR/uninhabited_enum_branching.rs:21:9: 21:20
+-         switchInt(move _3) -> [0isize: bb2, 1isize: bb3, otherwise: bb1]; // bb0[4]: scope 0 at $DIR/uninhabited_enum_branching.rs:21:9: 21:20
++         switchInt(move _3) -> bb1;       // bb0[4]: scope 0 at $DIR/uninhabited_enum_branching.rs:21:9: 21:20
+      }
+  
+      bb1: {
+          StorageLive(_5);                 // bb1[0]: scope 0 at $DIR/uninhabited_enum_branching.rs:23:21: 23:24
+          _5 = const "C";                  // bb1[1]: scope 0 at $DIR/uninhabited_enum_branching.rs:23:21: 23:24
+                                           // ty::Const
+                                           // + ty: &str
+                                           // + val: Value(Slice { data: Allocation { bytes: [67], relocations: Relocations(SortedMap { data: [] }), undef_mask: UndefMask { blocks: [1], len: Size { raw: 1 } }, size: Size { raw: 1 }, align: Align { pow2: 0 }, mutability: Not, extra: () }, start: 0, end: 1 })
+                                           // mir::Constant
+                                           // + span: $DIR/uninhabited_enum_branching.rs:23:21: 23:24
+                                           // + literal: Const { ty: &str, val: Value(Slice { data: Allocation { bytes: [67], relocations: Relocations(SortedMap { data: [] }), undef_mask: UndefMask { blocks: [1], len: Size { raw: 1 } }, size: Size { raw: 1 }, align: Align { pow2: 0 }, mutability: Not, extra: () }, start: 0, end: 1 }) }
+          _1 = &(*_5);                     // bb1[2]: scope 0 at $DIR/uninhabited_enum_branching.rs:23:21: 23:24
+          StorageDead(_5);                 // bb1[3]: scope 0 at $DIR/uninhabited_enum_branching.rs:23:23: 23:24
+          goto -> bb4;                     // bb1[4]: scope 0 at $DIR/uninhabited_enum_branching.rs:20:5: 24:6
+      }
+  
+      bb2: {
+          _1 = const "A(Empty)";           // bb2[0]: scope 0 at $DIR/uninhabited_enum_branching.rs:21:24: 21:34
+                                           // ty::Const
+                                           // + ty: &str
+                                           // + val: Value(Slice { data: Allocation { bytes: [65, 40, 69, 109, 112, 116, 121, 41], relocations: Relocations(SortedMap { data: [] }), undef_mask: UndefMask { blocks: [255], len: Size { raw: 8 } }, size: Size { raw: 8 }, align: Align { pow2: 0 }, mutability: Not, extra: () }, start: 0, end: 8 })
+                                           // mir::Constant
+                                           // + span: $DIR/uninhabited_enum_branching.rs:21:24: 21:34
+                                           // + literal: Const { ty: &str, val: Value(Slice { data: Allocation { bytes: [65, 40, 69, 109, 112, 116, 121, 41], relocations: Relocations(SortedMap { data: [] }), undef_mask: UndefMask { blocks: [255], len: Size { raw: 8 } }, size: Size { raw: 8 }, align: Align { pow2: 0 }, mutability: Not, extra: () }, start: 0, end: 8 }) }
+          goto -> bb4;                     // bb2[1]: scope 0 at $DIR/uninhabited_enum_branching.rs:20:5: 24:6
+      }
+  
+      bb3: {
+          StorageLive(_4);                 // bb3[0]: scope 0 at $DIR/uninhabited_enum_branching.rs:22:24: 22:34
+          _4 = const "B(Empty)";           // bb3[1]: scope 0 at $DIR/uninhabited_enum_branching.rs:22:24: 22:34
+                                           // ty::Const
+                                           // + ty: &str
+                                           // + val: Value(Slice { data: Allocation { bytes: [66, 40, 69, 109, 112, 116, 121, 41], relocations: Relocations(SortedMap { data: [] }), undef_mask: UndefMask { blocks: [255], len: Size { raw: 8 } }, size: Size { raw: 8 }, align: Align { pow2: 0 }, mutability: Not, extra: () }, start: 0, end: 8 })
+                                           // mir::Constant
+                                           // + span: $DIR/uninhabited_enum_branching.rs:22:24: 22:34
+                                           // + literal: Const { ty: &str, val: Value(Slice { data: Allocation { bytes: [66, 40, 69, 109, 112, 116, 121, 41], relocations: Relocations(SortedMap { data: [] }), undef_mask: UndefMask { blocks: [255], len: Size { raw: 8 } }, size: Size { raw: 8 }, align: Align { pow2: 0 }, mutability: Not, extra: () }, start: 0, end: 8 }) }
+          _1 = &(*_4);                     // bb3[2]: scope 0 at $DIR/uninhabited_enum_branching.rs:22:24: 22:34
+          StorageDead(_4);                 // bb3[3]: scope 0 at $DIR/uninhabited_enum_branching.rs:22:33: 22:34
+          goto -> bb4;                     // bb3[4]: scope 0 at $DIR/uninhabited_enum_branching.rs:20:5: 24:6
+      }
+  
+      bb4: {
+          StorageDead(_2);                 // bb4[0]: scope 0 at $DIR/uninhabited_enum_branching.rs:24:6: 24:7
+          StorageDead(_1);                 // bb4[1]: scope 0 at $DIR/uninhabited_enum_branching.rs:24:6: 24:7
+          StorageLive(_6);                 // bb4[2]: scope 0 at $DIR/uninhabited_enum_branching.rs:26:5: 29:6
+          StorageLive(_7);                 // bb4[3]: scope 0 at $DIR/uninhabited_enum_branching.rs:26:11: 26:19
+          _7 = Test2::D;                   // bb4[4]: scope 0 at $DIR/uninhabited_enum_branching.rs:26:11: 26:19
+          _8 = discriminant(_7);           // bb4[5]: scope 0 at $DIR/uninhabited_enum_branching.rs:27:9: 27:17
+          switchInt(move _8) -> [4isize: bb6, otherwise: bb5]; // bb4[6]: scope 0 at $DIR/uninhabited_enum_branching.rs:27:9: 27:17
+      }
+  
+      bb5: {
+          StorageLive(_9);                 // bb5[0]: scope 0 at $DIR/uninhabited_enum_branching.rs:28:21: 28:24
+          _9 = const "E";                  // bb5[1]: scope 0 at $DIR/uninhabited_enum_branching.rs:28:21: 28:24
+                                           // ty::Const
+                                           // + ty: &str
+                                           // + val: Value(Slice { data: Allocation { bytes: [69], relocations: Relocations(SortedMap { data: [] }), undef_mask: UndefMask { blocks: [1], len: Size { raw: 1 } }, size: Size { raw: 1 }, align: Align { pow2: 0 }, mutability: Not, extra: () }, start: 0, end: 1 })
+                                           // mir::Constant
+                                           // + span: $DIR/uninhabited_enum_branching.rs:28:21: 28:24
+                                           // + literal: Const { ty: &str, val: Value(Slice { data: Allocation { bytes: [69], relocations: Relocations(SortedMap { data: [] }), undef_mask: UndefMask { blocks: [1], len: Size { raw: 1 } }, size: Size { raw: 1 }, align: Align { pow2: 0 }, mutability: Not, extra: () }, start: 0, end: 1 }) }
+          _6 = &(*_9);                     // bb5[2]: scope 0 at $DIR/uninhabited_enum_branching.rs:28:21: 28:24
+          StorageDead(_9);                 // bb5[3]: scope 0 at $DIR/uninhabited_enum_branching.rs:28:23: 28:24
+          goto -> bb7;                     // bb5[4]: scope 0 at $DIR/uninhabited_enum_branching.rs:26:5: 29:6
+      }
+  
+      bb6: {
+          _6 = const "D";                  // bb6[0]: scope 0 at $DIR/uninhabited_enum_branching.rs:27:21: 27:24
+                                           // ty::Const
+                                           // + ty: &str
+                                           // + val: Value(Slice { data: Allocation { bytes: [68], relocations: Relocations(SortedMap { data: [] }), undef_mask: UndefMask { blocks: [1], len: Size { raw: 1 } }, size: Size { raw: 1 }, align: Align { pow2: 0 }, mutability: Not, extra: () }, start: 0, end: 1 })
+                                           // mir::Constant
+                                           // + span: $DIR/uninhabited_enum_branching.rs:27:21: 27:24
+                                           // + literal: Const { ty: &str, val: Value(Slice { data: Allocation { bytes: [68], relocations: Relocations(SortedMap { data: [] }), undef_mask: UndefMask { blocks: [1], len: Size { raw: 1 } }, size: Size { raw: 1 }, align: Align { pow2: 0 }, mutability: Not, extra: () }, start: 0, end: 1 }) }
+          goto -> bb7;                     // bb6[1]: scope 0 at $DIR/uninhabited_enum_branching.rs:26:5: 29:6
+      }
+  
+      bb7: {
+          StorageDead(_7);                 // bb7[0]: scope 0 at $DIR/uninhabited_enum_branching.rs:29:6: 29:7
+          StorageDead(_6);                 // bb7[1]: scope 0 at $DIR/uninhabited_enum_branching.rs:29:6: 29:7
+          _0 = ();                         // bb7[2]: scope 0 at $DIR/uninhabited_enum_branching.rs:19:11: 30:2
+          return;                          // bb7[3]: scope 0 at $DIR/uninhabited_enum_branching.rs:30:2: 30:2
+      }
+  }
+  
diff --git a/src/test/mir-opt/unreachable.rs b/src/test/mir-opt/unreachable.rs
index fa5c1a074ee..6f0c4ca3cf5 100644
--- a/src/test/mir-opt/unreachable.rs
+++ b/src/test/mir-opt/unreachable.rs
@@ -4,6 +4,7 @@ fn empty() -> Option<Empty> {
     None
 }
 
+// EMIT_MIR rustc.main.UnreachablePropagation.diff
 fn main() {
     if let Some(_x) = empty() {
         let mut _y;
@@ -17,62 +18,3 @@ fn main() {
         match _x { }
     }
 }
-
-// END RUST SOURCE
-// START rustc.main.UnreachablePropagation.before.mir
-//      bb0: {
-//          StorageLive(_1);
-//          _1 = const empty() -> bb1;
-//      }
-//      bb1: {
-//          _2 = discriminant(_1);
-//          switchInt(move _2) -> [1isize: bb3, otherwise: bb2];
-//      }
-//      bb2: {
-//          _0 = ();
-//          StorageDead(_1);
-//          return;
-//      }
-//      bb3: {
-//          StorageLive(_3);
-//          _3 = move ((_1 as Some).0: Empty);
-//          StorageLive(_4);
-//          StorageLive(_5);
-//          StorageLive(_6);
-//          _6 = const true;
-//          switchInt(_6) -> [false: bb4, otherwise: bb5];
-//      }
-//      bb4: {
-//          _4 = const 42i32;
-//          _5 = ();
-//          goto -> bb6;
-//      }
-//      bb5: {
-//          _4 = const 21i32;
-//          _5 = ();
-//          goto -> bb6;
-//      }
-//      bb6: {
-//          StorageDead(_6);
-//          StorageDead(_5);
-//          StorageLive(_7);
-//          unreachable;
-//      }
-//  }
-// END rustc.main.UnreachablePropagation.before.mir
-// START rustc.main.UnreachablePropagation.after.mir
-//      bb0: {
-//          StorageLive(_1);
-//          _1 = const empty() -> bb1;
-//      }
-//      bb1: {
-//          _2 = discriminant(_1);
-//          goto -> bb2;
-//      }
-//      bb2: {
-//          _0 = ();
-//          StorageDead(_1);
-//          return;
-//      }
-//  }
-// END rustc.main.UnreachablePropagation.after.mir
diff --git a/src/test/mir-opt/unreachable/rustc.main.UnreachablePropagation.diff b/src/test/mir-opt/unreachable/rustc.main.UnreachablePropagation.diff
new file mode 100644
index 00000000000..3a239c6e3b0
--- /dev/null
+++ b/src/test/mir-opt/unreachable/rustc.main.UnreachablePropagation.diff
@@ -0,0 +1,90 @@
+- // MIR for `main` before UnreachablePropagation
++ // MIR for `main` after UnreachablePropagation
+  
+  fn main() -> () {
+      let mut _0: ();                      // return place in scope 0 at $DIR/unreachable.rs:8:11: 8:11
+      let mut _1: std::option::Option<Empty>; // in scope 0 at $DIR/unreachable.rs:9:23: 9:30
+      let mut _2: isize;                   // in scope 0 at $DIR/unreachable.rs:9:12: 9:20
+      let _3: Empty;                       // in scope 0 at $DIR/unreachable.rs:9:17: 9:19
+      let _5: ();                          // in scope 0 at $DIR/unreachable.rs:12:9: 16:10
+      let mut _6: bool;                    // in scope 0 at $DIR/unreachable.rs:12:12: 12:16
+      let mut _7: !;                       // in scope 0 at $DIR/unreachable.rs:18:9: 18:21
+      scope 1 {
+          debug _x => _3;                  // in scope 1 at $DIR/unreachable.rs:9:17: 9:19
+          let mut _4: i32;                 // in scope 1 at $DIR/unreachable.rs:10:13: 10:19
+          scope 2 {
+              debug _y => _4;              // in scope 2 at $DIR/unreachable.rs:10:13: 10:19
+          }
+      }
+  
+      bb0: {
+          StorageLive(_1);                 // bb0[0]: scope 0 at $DIR/unreachable.rs:9:23: 9:30
+          _1 = const empty() -> bb1;       // bb0[1]: scope 0 at $DIR/unreachable.rs:9:23: 9:30
+                                           // ty::Const
+                                           // + ty: fn() -> std::option::Option<Empty> {empty}
+                                           // + val: Value(Scalar(<ZST>))
+                                           // mir::Constant
+                                           // + span: $DIR/unreachable.rs:9:23: 9:28
+                                           // + literal: Const { ty: fn() -> std::option::Option<Empty> {empty}, val: Value(Scalar(<ZST>)) }
+      }
+  
+      bb1: {
+          _2 = discriminant(_1);           // bb1[0]: scope 0 at $DIR/unreachable.rs:9:12: 9:20
+-         switchInt(move _2) -> [1isize: bb3, otherwise: bb2]; // bb1[1]: scope 0 at $DIR/unreachable.rs:9:12: 9:20
++         goto -> bb2;                     // bb1[1]: scope 0 at $DIR/unreachable.rs:9:12: 9:20
+      }
+  
+      bb2: {
+          _0 = ();                         // bb2[0]: scope 0 at $DIR/unreachable.rs:9:5: 19:6
+          StorageDead(_1);                 // bb2[1]: scope 0 at $DIR/unreachable.rs:20:1: 20:2
+          return;                          // bb2[2]: scope 0 at $DIR/unreachable.rs:20:2: 20:2
+-     }
+- 
+-     bb3: {
+-         StorageLive(_3);                 // bb3[0]: scope 0 at $DIR/unreachable.rs:9:17: 9:19
+-         _3 = move ((_1 as Some).0: Empty); // bb3[1]: scope 0 at $DIR/unreachable.rs:9:17: 9:19
+-         StorageLive(_4);                 // bb3[2]: scope 1 at $DIR/unreachable.rs:10:13: 10:19
+-         StorageLive(_5);                 // bb3[3]: scope 2 at $DIR/unreachable.rs:12:9: 16:10
+-         StorageLive(_6);                 // bb3[4]: scope 2 at $DIR/unreachable.rs:12:12: 12:16
+-         _6 = const true;                 // bb3[5]: scope 2 at $DIR/unreachable.rs:12:12: 12:16
+-                                          // ty::Const
+-                                          // + ty: bool
+-                                          // + val: Value(Scalar(0x01))
+-                                          // mir::Constant
+-                                          // + span: $DIR/unreachable.rs:12:12: 12:16
+-                                          // + literal: Const { ty: bool, val: Value(Scalar(0x01)) }
+-         switchInt(_6) -> [false: bb4, otherwise: bb5]; // bb3[6]: scope 2 at $DIR/unreachable.rs:12:9: 16:10
+-     }
+- 
+-     bb4: {
+-         _4 = const 42i32;                // bb4[0]: scope 2 at $DIR/unreachable.rs:15:13: 15:20
+-                                          // ty::Const
+-                                          // + ty: i32
+-                                          // + val: Value(Scalar(0x0000002a))
+-                                          // mir::Constant
+-                                          // + span: $DIR/unreachable.rs:15:18: 15:20
+-                                          // + literal: Const { ty: i32, val: Value(Scalar(0x0000002a)) }
+-         _5 = ();                         // bb4[1]: scope 2 at $DIR/unreachable.rs:14:16: 16:10
+-         goto -> bb6;                     // bb4[2]: scope 2 at $DIR/unreachable.rs:12:9: 16:10
+-     }
+- 
+-     bb5: {
+-         _4 = const 21i32;                // bb5[0]: scope 2 at $DIR/unreachable.rs:13:13: 13:20
+-                                          // ty::Const
+-                                          // + ty: i32
+-                                          // + val: Value(Scalar(0x00000015))
+-                                          // mir::Constant
+-                                          // + span: $DIR/unreachable.rs:13:18: 13:20
+-                                          // + literal: Const { ty: i32, val: Value(Scalar(0x00000015)) }
+-         _5 = ();                         // bb5[1]: scope 2 at $DIR/unreachable.rs:12:17: 14:10
+-         goto -> bb6;                     // bb5[2]: scope 2 at $DIR/unreachable.rs:12:9: 16:10
+-     }
+- 
+-     bb6: {
+-         StorageDead(_6);                 // bb6[0]: scope 2 at $DIR/unreachable.rs:16:9: 16:10
+-         StorageDead(_5);                 // bb6[1]: scope 2 at $DIR/unreachable.rs:16:9: 16:10
+-         StorageLive(_7);                 // bb6[2]: scope 2 at $DIR/unreachable.rs:18:9: 18:21
+-         unreachable;                     // bb6[3]: scope 2 at $DIR/unreachable.rs:18:15: 18:17
+      }
+  }
+  
diff --git a/src/test/mir-opt/unreachable_asm.rs b/src/test/mir-opt/unreachable_asm.rs
index 990141657f4..4bbf22b8227 100644
--- a/src/test/mir-opt/unreachable_asm.rs
+++ b/src/test/mir-opt/unreachable_asm.rs
@@ -1,4 +1,3 @@
-// ignore-tidy-linelength
 #![feature(llvm_asm)]
 
 enum Empty {}
@@ -7,6 +6,7 @@ fn empty() -> Option<Empty> {
     None
 }
 
+// EMIT_MIR rustc.main.UnreachablePropagation.diff
 fn main() {
     if let Some(_x) = empty() {
         let mut _y;
@@ -22,51 +22,3 @@ fn main() {
         match _x { }
     }
 }
-
-// END RUST SOURCE
-// START rustc.main.UnreachablePropagation.before.mir
-//      bb4: {
-//          _4 = const 42i32;
-//          _5 = ();
-//          goto -> bb6;
-//      }
-//      bb5: {
-//          _4 = const 21i32;
-//          _5 = ();
-//          goto -> bb6;
-//      }
-//      bb6: {
-//          StorageDead(_6);
-//          StorageDead(_5);
-//          StorageLive(_7);
-//          llvm_asm!(LlvmInlineAsmInner { asm: "NOP", asm_str_style: Cooked, outputs: [], inputs: [], clobbers: [], volatile: true, alignstack: false, dialect: Att } : [] : []);
-//          _7 = ();
-//          StorageDead(_7);
-//          StorageLive(_8);
-//          unreachable;
-//      }
-//  }
-// END rustc.main.UnreachablePropagation.before.mir
-// START rustc.main.UnreachablePropagation.after.mir
-//      bb4: {
-//          _4 = const 42i32;
-//          _5 = ();
-//          goto -> bb6;
-//      }
-//      bb5: {
-//          _4 = const 21i32;
-//          _5 = ();
-//          goto -> bb6;
-//      }
-//      bb6: {
-//          StorageDead(_6);
-//          StorageDead(_5);
-//          StorageLive(_7);
-//          llvm_asm!(LlvmInlineAsmInner { asm: "NOP", asm_str_style: Cooked, outputs: [], inputs: [], clobbers: [], volatile: true, alignstack: false, dialect: Att } : [] : []);
-//          _7 = ();
-//          StorageDead(_7);
-//          StorageLive(_8);
-//          unreachable;
-//      }
-//  }
-// END rustc.main.UnreachablePropagation.after.mir
diff --git a/src/test/mir-opt/unreachable_asm/rustc.main.UnreachablePropagation.diff b/src/test/mir-opt/unreachable_asm/rustc.main.UnreachablePropagation.diff
new file mode 100644
index 00000000000..c32165a3893
--- /dev/null
+++ b/src/test/mir-opt/unreachable_asm/rustc.main.UnreachablePropagation.diff
@@ -0,0 +1,96 @@
+- // MIR for `main` before UnreachablePropagation
++ // MIR for `main` after UnreachablePropagation
+  
+  fn main() -> () {
+      let mut _0: ();                      // return place in scope 0 at $DIR/unreachable_asm.rs:10:11: 10:11
+      let mut _1: std::option::Option<Empty>; // in scope 0 at $DIR/unreachable_asm.rs:11:23: 11:30
+      let mut _2: isize;                   // in scope 0 at $DIR/unreachable_asm.rs:11:12: 11:20
+      let _3: Empty;                       // in scope 0 at $DIR/unreachable_asm.rs:11:17: 11:19
+      let _5: ();                          // in scope 0 at $DIR/unreachable_asm.rs:14:9: 18:10
+      let mut _6: bool;                    // in scope 0 at $DIR/unreachable_asm.rs:14:12: 14:16
+      let _7: ();                          // in scope 0 at $DIR/unreachable_asm.rs:21:9: 21:37
+      let mut _8: !;                       // in scope 0 at $DIR/unreachable_asm.rs:22:9: 22:21
+      scope 1 {
+          debug _x => _3;                  // in scope 1 at $DIR/unreachable_asm.rs:11:17: 11:19
+          let mut _4: i32;                 // in scope 1 at $DIR/unreachable_asm.rs:12:13: 12:19
+          scope 2 {
+              debug _y => _4;              // in scope 2 at $DIR/unreachable_asm.rs:12:13: 12:19
+              scope 3 {
+              }
+          }
+      }
+  
+      bb0: {
+          StorageLive(_1);                 // bb0[0]: scope 0 at $DIR/unreachable_asm.rs:11:23: 11:30
+          _1 = const empty() -> bb1;       // bb0[1]: scope 0 at $DIR/unreachable_asm.rs:11:23: 11:30
+                                           // ty::Const
+                                           // + ty: fn() -> std::option::Option<Empty> {empty}
+                                           // + val: Value(Scalar(<ZST>))
+                                           // mir::Constant
+                                           // + span: $DIR/unreachable_asm.rs:11:23: 11:28
+                                           // + literal: Const { ty: fn() -> std::option::Option<Empty> {empty}, val: Value(Scalar(<ZST>)) }
+      }
+  
+      bb1: {
+          _2 = discriminant(_1);           // bb1[0]: scope 0 at $DIR/unreachable_asm.rs:11:12: 11:20
+          switchInt(move _2) -> [1isize: bb3, otherwise: bb2]; // bb1[1]: scope 0 at $DIR/unreachable_asm.rs:11:12: 11:20
+      }
+  
+      bb2: {
+          _0 = ();                         // bb2[0]: scope 0 at $DIR/unreachable_asm.rs:11:5: 23:6
+          StorageDead(_1);                 // bb2[1]: scope 0 at $DIR/unreachable_asm.rs:24:1: 24:2
+          return;                          // bb2[2]: scope 0 at $DIR/unreachable_asm.rs:24:2: 24:2
+      }
+  
+      bb3: {
+          StorageLive(_3);                 // bb3[0]: scope 0 at $DIR/unreachable_asm.rs:11:17: 11:19
+          _3 = move ((_1 as Some).0: Empty); // bb3[1]: scope 0 at $DIR/unreachable_asm.rs:11:17: 11:19
+          StorageLive(_4);                 // bb3[2]: scope 1 at $DIR/unreachable_asm.rs:12:13: 12:19
+          StorageLive(_5);                 // bb3[3]: scope 2 at $DIR/unreachable_asm.rs:14:9: 18:10
+          StorageLive(_6);                 // bb3[4]: scope 2 at $DIR/unreachable_asm.rs:14:12: 14:16
+          _6 = const true;                 // bb3[5]: scope 2 at $DIR/unreachable_asm.rs:14:12: 14:16
+                                           // ty::Const
+                                           // + ty: bool
+                                           // + val: Value(Scalar(0x01))
+                                           // mir::Constant
+                                           // + span: $DIR/unreachable_asm.rs:14:12: 14:16
+                                           // + literal: Const { ty: bool, val: Value(Scalar(0x01)) }
+          switchInt(_6) -> [false: bb4, otherwise: bb5]; // bb3[6]: scope 2 at $DIR/unreachable_asm.rs:14:9: 18:10
+      }
+  
+      bb4: {
+          _4 = const 42i32;                // bb4[0]: scope 2 at $DIR/unreachable_asm.rs:17:13: 17:20
+                                           // ty::Const
+                                           // + ty: i32
+                                           // + val: Value(Scalar(0x0000002a))
+                                           // mir::Constant
+                                           // + span: $DIR/unreachable_asm.rs:17:18: 17:20
+                                           // + literal: Const { ty: i32, val: Value(Scalar(0x0000002a)) }
+          _5 = ();                         // bb4[1]: scope 2 at $DIR/unreachable_asm.rs:16:16: 18:10
+          goto -> bb6;                     // bb4[2]: scope 2 at $DIR/unreachable_asm.rs:14:9: 18:10
+      }
+  
+      bb5: {
+          _4 = const 21i32;                // bb5[0]: scope 2 at $DIR/unreachable_asm.rs:15:13: 15:20
+                                           // ty::Const
+                                           // + ty: i32
+                                           // + val: Value(Scalar(0x00000015))
+                                           // mir::Constant
+                                           // + span: $DIR/unreachable_asm.rs:15:18: 15:20
+                                           // + literal: Const { ty: i32, val: Value(Scalar(0x00000015)) }
+          _5 = ();                         // bb5[1]: scope 2 at $DIR/unreachable_asm.rs:14:17: 16:10
+          goto -> bb6;                     // bb5[2]: scope 2 at $DIR/unreachable_asm.rs:14:9: 18:10
+      }
+  
+      bb6: {
+          StorageDead(_6);                 // bb6[0]: scope 2 at $DIR/unreachable_asm.rs:18:9: 18:10
+          StorageDead(_5);                 // bb6[1]: scope 2 at $DIR/unreachable_asm.rs:18:9: 18:10
+          StorageLive(_7);                 // bb6[2]: scope 2 at $DIR/unreachable_asm.rs:21:9: 21:37
+          llvm_asm!(LlvmInlineAsmInner { asm: "NOP", asm_str_style: Cooked, outputs: [], inputs: [], clobbers: [], volatile: true, alignstack: false, dialect: Att } : [] : []); // bb6[3]: scope 3 at $DIR/unreachable_asm.rs:21:18: 21:35
+          _7 = ();                         // bb6[4]: scope 3 at $DIR/unreachable_asm.rs:21:9: 21:37
+          StorageDead(_7);                 // bb6[5]: scope 2 at $DIR/unreachable_asm.rs:21:36: 21:37
+          StorageLive(_8);                 // bb6[6]: scope 2 at $DIR/unreachable_asm.rs:22:9: 22:21
+          unreachable;                     // bb6[7]: scope 2 at $DIR/unreachable_asm.rs:22:15: 22:17
+      }
+  }
+  
diff --git a/src/test/mir-opt/unreachable_asm_2.rs b/src/test/mir-opt/unreachable_asm_2.rs
index 0851e24d410..f1610db999e 100644
--- a/src/test/mir-opt/unreachable_asm_2.rs
+++ b/src/test/mir-opt/unreachable_asm_2.rs
@@ -1,4 +1,3 @@
-// ignore-tidy-linelength
 #![feature(llvm_asm)]
 
 enum Empty {}
@@ -7,6 +6,7 @@ fn empty() -> Option<Empty> {
     None
 }
 
+// EMIT_MIR rustc.main.UnreachablePropagation.diff
 fn main() {
     if let Some(_x) = empty() {
         let mut _y;
@@ -24,61 +24,3 @@ fn main() {
         match _x { }
     }
 }
-
-// END RUST SOURCE
-// START rustc.main.UnreachablePropagation.before.mir
-//      bb3: {
-//          ...
-//          switchInt(_6) -> [false: bb4, otherwise: bb5];
-//      }
-//      bb4: {
-//          StorageLive(_8);
-//          llvm_asm!(LlvmInlineAsmInner { asm: "NOP", asm_str_style: Cooked, outputs: [], inputs: [], clobbers: [], volatile: true, alignstack: false, dialect: Att } : [] : []);
-//          _8 = ();
-//          StorageDead(_8);
-//          _4 = const 42i32;
-//          _5 = ();
-//          goto -> bb6;
-//      }
-//          bb5: {
-//          StorageLive(_7);
-//          llvm_asm!(LlvmInlineAsmInner { asm: "NOP", asm_str_style: Cooked, outputs: [], inputs: [], clobbers: [], volatile: true, alignstack: false, dialect: Att } : [] : []);
-//          _7 = ();
-//          StorageDead(_7);
-//          _4 = const 21i32;
-//          _5 = ();
-//          goto -> bb6;
-//      }
-//      bb6: {
-//          StorageDead(_6);
-//          StorageDead(_5);
-//          StorageLive(_9);
-//          unreachable;
-//      }
-//  }
-// END rustc.main.UnreachablePropagation.before.mir
-// START rustc.main.UnreachablePropagation.after.mir
-//      bb3: {
-//          ...
-//          switchInt(_6) -> [false: bb4, otherwise: bb5];
-//      }
-//      bb4: {
-//          StorageLive(_8);
-//          llvm_asm!(LlvmInlineAsmInner { asm: "NOP", asm_str_style: Cooked, outputs: [], inputs: [], clobbers: [], volatile: true, alignstack: false, dialect: Att } : [] : []);
-//          _8 = ();
-//          StorageDead(_8);
-//          _4 = const 42i32;
-//          _5 = ();
-//          unreachable;
-//      }
-//          bb5: {
-//          StorageLive(_7);
-//          llvm_asm!(LlvmInlineAsmInner { asm: "NOP", asm_str_style: Cooked, outputs: [], inputs: [], clobbers: [], volatile: true, alignstack: false, dialect: Att } : [] : []);
-//          _7 = ();
-//          StorageDead(_7);
-//          _4 = const 21i32;
-//          _5 = ();
-//          unreachable;
-//      }
-//  }
-// END rustc.main.UnreachablePropagation.after.mir
diff --git a/src/test/mir-opt/unreachable_asm_2/rustc.main.UnreachablePropagation.diff b/src/test/mir-opt/unreachable_asm_2/rustc.main.UnreachablePropagation.diff
new file mode 100644
index 00000000000..a3741787566
--- /dev/null
+++ b/src/test/mir-opt/unreachable_asm_2/rustc.main.UnreachablePropagation.diff
@@ -0,0 +1,105 @@
+- // MIR for `main` before UnreachablePropagation
++ // MIR for `main` after UnreachablePropagation
+  
+  fn main() -> () {
+      let mut _0: ();                      // return place in scope 0 at $DIR/unreachable_asm_2.rs:10:11: 10:11
+      let mut _1: std::option::Option<Empty>; // in scope 0 at $DIR/unreachable_asm_2.rs:11:23: 11:30
+      let mut _2: isize;                   // in scope 0 at $DIR/unreachable_asm_2.rs:11:12: 11:20
+      let _3: Empty;                       // in scope 0 at $DIR/unreachable_asm_2.rs:11:17: 11:19
+      let _5: ();                          // in scope 0 at $DIR/unreachable_asm_2.rs:14:9: 22:10
+      let mut _6: bool;                    // in scope 0 at $DIR/unreachable_asm_2.rs:14:12: 14:16
+      let _7: ();                          // in scope 0 at $DIR/unreachable_asm_2.rs:16:13: 16:41
+      let _8: ();                          // in scope 0 at $DIR/unreachable_asm_2.rs:20:13: 20:41
+      let mut _9: !;                       // in scope 0 at $DIR/unreachable_asm_2.rs:24:9: 24:21
+      scope 1 {
+          debug _x => _3;                  // in scope 1 at $DIR/unreachable_asm_2.rs:11:17: 11:19
+          let mut _4: i32;                 // in scope 1 at $DIR/unreachable_asm_2.rs:12:13: 12:19
+          scope 2 {
+              debug _y => _4;              // in scope 2 at $DIR/unreachable_asm_2.rs:12:13: 12:19
+              scope 3 {
+              }
+              scope 4 {
+              }
+          }
+      }
+  
+      bb0: {
+          StorageLive(_1);                 // bb0[0]: scope 0 at $DIR/unreachable_asm_2.rs:11:23: 11:30
+          _1 = const empty() -> bb1;       // bb0[1]: scope 0 at $DIR/unreachable_asm_2.rs:11:23: 11:30
+                                           // ty::Const
+                                           // + ty: fn() -> std::option::Option<Empty> {empty}
+                                           // + val: Value(Scalar(<ZST>))
+                                           // mir::Constant
+                                           // + span: $DIR/unreachable_asm_2.rs:11:23: 11:28
+                                           // + literal: Const { ty: fn() -> std::option::Option<Empty> {empty}, val: Value(Scalar(<ZST>)) }
+      }
+  
+      bb1: {
+          _2 = discriminant(_1);           // bb1[0]: scope 0 at $DIR/unreachable_asm_2.rs:11:12: 11:20
+          switchInt(move _2) -> [1isize: bb3, otherwise: bb2]; // bb1[1]: scope 0 at $DIR/unreachable_asm_2.rs:11:12: 11:20
+      }
+  
+      bb2: {
+          _0 = ();                         // bb2[0]: scope 0 at $DIR/unreachable_asm_2.rs:11:5: 25:6
+          StorageDead(_1);                 // bb2[1]: scope 0 at $DIR/unreachable_asm_2.rs:26:1: 26:2
+          return;                          // bb2[2]: scope 0 at $DIR/unreachable_asm_2.rs:26:2: 26:2
+      }
+  
+      bb3: {
+          StorageLive(_3);                 // bb3[0]: scope 0 at $DIR/unreachable_asm_2.rs:11:17: 11:19
+          _3 = move ((_1 as Some).0: Empty); // bb3[1]: scope 0 at $DIR/unreachable_asm_2.rs:11:17: 11:19
+          StorageLive(_4);                 // bb3[2]: scope 1 at $DIR/unreachable_asm_2.rs:12:13: 12:19
+          StorageLive(_5);                 // bb3[3]: scope 2 at $DIR/unreachable_asm_2.rs:14:9: 22:10
+          StorageLive(_6);                 // bb3[4]: scope 2 at $DIR/unreachable_asm_2.rs:14:12: 14:16
+          _6 = const true;                 // bb3[5]: scope 2 at $DIR/unreachable_asm_2.rs:14:12: 14:16
+                                           // ty::Const
+                                           // + ty: bool
+                                           // + val: Value(Scalar(0x01))
+                                           // mir::Constant
+                                           // + span: $DIR/unreachable_asm_2.rs:14:12: 14:16
+                                           // + literal: Const { ty: bool, val: Value(Scalar(0x01)) }
+          switchInt(_6) -> [false: bb4, otherwise: bb5]; // bb3[6]: scope 2 at $DIR/unreachable_asm_2.rs:14:9: 22:10
+      }
+  
+      bb4: {
+          StorageLive(_8);                 // bb4[0]: scope 2 at $DIR/unreachable_asm_2.rs:20:13: 20:41
+          llvm_asm!(LlvmInlineAsmInner { asm: "NOP", asm_str_style: Cooked, outputs: [], inputs: [], clobbers: [], volatile: true, alignstack: false, dialect: Att } : [] : []); // bb4[1]: scope 4 at $DIR/unreachable_asm_2.rs:20:22: 20:39
+          _8 = ();                         // bb4[2]: scope 4 at $DIR/unreachable_asm_2.rs:20:13: 20:41
+          StorageDead(_8);                 // bb4[3]: scope 2 at $DIR/unreachable_asm_2.rs:20:40: 20:41
+          _4 = const 42i32;                // bb4[4]: scope 2 at $DIR/unreachable_asm_2.rs:21:13: 21:20
+                                           // ty::Const
+                                           // + ty: i32
+                                           // + val: Value(Scalar(0x0000002a))
+                                           // mir::Constant
+                                           // + span: $DIR/unreachable_asm_2.rs:21:18: 21:20
+                                           // + literal: Const { ty: i32, val: Value(Scalar(0x0000002a)) }
+          _5 = ();                         // bb4[5]: scope 2 at $DIR/unreachable_asm_2.rs:18:16: 22:10
+-         goto -> bb6;                     // bb4[6]: scope 2 at $DIR/unreachable_asm_2.rs:14:9: 22:10
++         unreachable;                     // bb4[6]: scope 2 at $DIR/unreachable_asm_2.rs:14:9: 22:10
+      }
+  
+      bb5: {
+          StorageLive(_7);                 // bb5[0]: scope 2 at $DIR/unreachable_asm_2.rs:16:13: 16:41
+          llvm_asm!(LlvmInlineAsmInner { asm: "NOP", asm_str_style: Cooked, outputs: [], inputs: [], clobbers: [], volatile: true, alignstack: false, dialect: Att } : [] : []); // bb5[1]: scope 3 at $DIR/unreachable_asm_2.rs:16:22: 16:39
+          _7 = ();                         // bb5[2]: scope 3 at $DIR/unreachable_asm_2.rs:16:13: 16:41
+          StorageDead(_7);                 // bb5[3]: scope 2 at $DIR/unreachable_asm_2.rs:16:40: 16:41
+          _4 = const 21i32;                // bb5[4]: scope 2 at $DIR/unreachable_asm_2.rs:17:13: 17:20
+                                           // ty::Const
+                                           // + ty: i32
+                                           // + val: Value(Scalar(0x00000015))
+                                           // mir::Constant
+                                           // + span: $DIR/unreachable_asm_2.rs:17:18: 17:20
+                                           // + literal: Const { ty: i32, val: Value(Scalar(0x00000015)) }
+          _5 = ();                         // bb5[5]: scope 2 at $DIR/unreachable_asm_2.rs:14:17: 18:10
+-         goto -> bb6;                     // bb5[6]: scope 2 at $DIR/unreachable_asm_2.rs:14:9: 22:10
+-     }
+- 
+-     bb6: {
+-         StorageDead(_6);                 // bb6[0]: scope 2 at $DIR/unreachable_asm_2.rs:22:9: 22:10
+-         StorageDead(_5);                 // bb6[1]: scope 2 at $DIR/unreachable_asm_2.rs:22:9: 22:10
+-         StorageLive(_9);                 // bb6[2]: scope 2 at $DIR/unreachable_asm_2.rs:24:9: 24:21
+-         unreachable;                     // bb6[3]: scope 2 at $DIR/unreachable_asm_2.rs:24:15: 24:17
++         unreachable;                     // bb5[6]: scope 2 at $DIR/unreachable_asm_2.rs:14:9: 22:10
+      }
+  }
+  
diff --git a/src/test/mir-opt/unreachable_diverging.rs b/src/test/mir-opt/unreachable_diverging.rs
index bf05019d5ce..53c753f717b 100644
--- a/src/test/mir-opt/unreachable_diverging.rs
+++ b/src/test/mir-opt/unreachable_diverging.rs
@@ -8,6 +8,7 @@ fn loop_forever() {
     loop {}
 }
 
+// EMIT_MIR rustc.main.UnreachablePropagation.diff
 fn main() {
     let x = true;
     if let Some(bomb) = empty() {
@@ -17,49 +18,3 @@ fn main() {
         match bomb {}
     }
 }
-
-// END RUST SOURCE
-// START rustc.main.UnreachablePropagation.before.mir
-//      bb3: {
-//          StorageLive(_4);
-//          _4 = move ((_2 as Some).0: Empty);
-//          StorageLive(_5);
-//          StorageLive(_6);
-//          _6 = _1;
-//          switchInt(_6) -> [false: bb4, otherwise: bb5];
-//      }
-//      bb4: {
-//          _5 = ();
-//          goto -> bb6;
-//      }
-//      bb5: {
-//          _5 = const loop_forever() -> bb6;
-//      }
-//      bb6: {
-//          StorageDead(_6);
-//          StorageDead(_5);
-//          StorageLive(_7);
-//          unreachable;
-//      }
-//  }
-// END rustc.main.UnreachablePropagation.before.mir
-// START rustc.main.UnreachablePropagation.after.mir
-//      bb3: {
-//          StorageLive(_4);
-//          _4 = move ((_2 as Some).0: Empty);
-//          StorageLive(_5);
-//          StorageLive(_6);
-//          _6 = _1;
-//          goto -> bb4;
-//      }
-//      bb4: {
-//          _5 = const loop_forever() -> bb5;
-//      }
-//      bb5: {
-//          StorageDead(_6);
-//          StorageDead(_5);
-//          StorageLive(_7);
-//          unreachable;
-//      }
-//  }
-// END rustc.main.UnreachablePropagation.after.mir
diff --git a/src/test/mir-opt/unreachable_diverging/rustc.main.UnreachablePropagation.diff b/src/test/mir-opt/unreachable_diverging/rustc.main.UnreachablePropagation.diff
new file mode 100644
index 00000000000..8d1d137f192
--- /dev/null
+++ b/src/test/mir-opt/unreachable_diverging/rustc.main.UnreachablePropagation.diff
@@ -0,0 +1,89 @@
+- // MIR for `main` before UnreachablePropagation
++ // MIR for `main` after UnreachablePropagation
+  
+  fn main() -> () {
+      let mut _0: ();                      // return place in scope 0 at $DIR/unreachable_diverging.rs:12:11: 12:11
+      let _1: bool;                        // in scope 0 at $DIR/unreachable_diverging.rs:13:9: 13:10
+      let mut _2: std::option::Option<Empty>; // in scope 0 at $DIR/unreachable_diverging.rs:14:25: 14:32
+      let mut _3: isize;                   // in scope 0 at $DIR/unreachable_diverging.rs:14:12: 14:22
+      let _5: ();                          // in scope 0 at $DIR/unreachable_diverging.rs:15:9: 17:10
+      let mut _6: bool;                    // in scope 0 at $DIR/unreachable_diverging.rs:15:12: 15:13
+      let mut _7: !;                       // in scope 0 at $DIR/unreachable_diverging.rs:18:9: 18:22
+      scope 1 {
+          debug x => _1;                   // in scope 1 at $DIR/unreachable_diverging.rs:13:9: 13:10
+          let _4: Empty;                   // in scope 1 at $DIR/unreachable_diverging.rs:14:17: 14:21
+          scope 2 {
+              debug bomb => _4;            // in scope 2 at $DIR/unreachable_diverging.rs:14:17: 14:21
+          }
+      }
+  
+      bb0: {
+          StorageLive(_1);                 // bb0[0]: scope 0 at $DIR/unreachable_diverging.rs:13:9: 13:10
+          _1 = const true;                 // bb0[1]: scope 0 at $DIR/unreachable_diverging.rs:13:13: 13:17
+                                           // ty::Const
+                                           // + ty: bool
+                                           // + val: Value(Scalar(0x01))
+                                           // mir::Constant
+                                           // + span: $DIR/unreachable_diverging.rs:13:13: 13:17
+                                           // + literal: Const { ty: bool, val: Value(Scalar(0x01)) }
+          StorageLive(_2);                 // bb0[2]: scope 1 at $DIR/unreachable_diverging.rs:14:25: 14:32
+          _2 = const empty() -> bb1;       // bb0[3]: scope 1 at $DIR/unreachable_diverging.rs:14:25: 14:32
+                                           // ty::Const
+                                           // + ty: fn() -> std::option::Option<Empty> {empty}
+                                           // + val: Value(Scalar(<ZST>))
+                                           // mir::Constant
+                                           // + span: $DIR/unreachable_diverging.rs:14:25: 14:30
+                                           // + literal: Const { ty: fn() -> std::option::Option<Empty> {empty}, val: Value(Scalar(<ZST>)) }
+      }
+  
+      bb1: {
+          _3 = discriminant(_2);           // bb1[0]: scope 1 at $DIR/unreachable_diverging.rs:14:12: 14:22
+          switchInt(move _3) -> [1isize: bb3, otherwise: bb2]; // bb1[1]: scope 1 at $DIR/unreachable_diverging.rs:14:12: 14:22
+      }
+  
+      bb2: {
+          _0 = ();                         // bb2[0]: scope 1 at $DIR/unreachable_diverging.rs:14:5: 19:6
+          StorageDead(_1);                 // bb2[1]: scope 0 at $DIR/unreachable_diverging.rs:20:1: 20:2
+          StorageDead(_2);                 // bb2[2]: scope 0 at $DIR/unreachable_diverging.rs:20:1: 20:2
+          return;                          // bb2[3]: scope 0 at $DIR/unreachable_diverging.rs:20:2: 20:2
+      }
+  
+      bb3: {
+          StorageLive(_4);                 // bb3[0]: scope 1 at $DIR/unreachable_diverging.rs:14:17: 14:21
+          _4 = move ((_2 as Some).0: Empty); // bb3[1]: scope 1 at $DIR/unreachable_diverging.rs:14:17: 14:21
+          StorageLive(_5);                 // bb3[2]: scope 2 at $DIR/unreachable_diverging.rs:15:9: 17:10
+          StorageLive(_6);                 // bb3[3]: scope 2 at $DIR/unreachable_diverging.rs:15:12: 15:13
+          _6 = _1;                         // bb3[4]: scope 2 at $DIR/unreachable_diverging.rs:15:12: 15:13
+-         switchInt(_6) -> [false: bb4, otherwise: bb5]; // bb3[5]: scope 2 at $DIR/unreachable_diverging.rs:15:9: 17:10
++         goto -> bb4;                     // bb3[5]: scope 2 at $DIR/unreachable_diverging.rs:15:9: 17:10
+      }
+  
+      bb4: {
+-         _5 = ();                         // bb4[0]: scope 2 at $DIR/unreachable_diverging.rs:15:9: 17:10
+-         goto -> bb6;                     // bb4[1]: scope 2 at $DIR/unreachable_diverging.rs:15:9: 17:10
+-     }
+- 
+-     bb5: {
+-         _5 = const loop_forever() -> bb6; // bb5[0]: scope 2 at $DIR/unreachable_diverging.rs:16:13: 16:27
++         _5 = const loop_forever() -> bb5; // bb4[0]: scope 2 at $DIR/unreachable_diverging.rs:16:13: 16:27
+                                           // ty::Const
+                                           // + ty: fn() {loop_forever}
+                                           // + val: Value(Scalar(<ZST>))
+                                           // mir::Constant
+                                           // + span: $DIR/unreachable_diverging.rs:16:13: 16:25
+                                           // + literal: Const { ty: fn() {loop_forever}, val: Value(Scalar(<ZST>)) }
+      }
+  
+-     bb6: {
+-         StorageDead(_6);                 // bb6[0]: scope 2 at $DIR/unreachable_diverging.rs:17:9: 17:10
+-         StorageDead(_5);                 // bb6[1]: scope 2 at $DIR/unreachable_diverging.rs:17:9: 17:10
+-         StorageLive(_7);                 // bb6[2]: scope 2 at $DIR/unreachable_diverging.rs:18:9: 18:22
+-         unreachable;                     // bb6[3]: scope 2 at $DIR/unreachable_diverging.rs:18:15: 18:19
++     bb5: {
++         StorageDead(_6);                 // bb5[0]: scope 2 at $DIR/unreachable_diverging.rs:17:9: 17:10
++         StorageDead(_5);                 // bb5[1]: scope 2 at $DIR/unreachable_diverging.rs:17:9: 17:10
++         StorageLive(_7);                 // bb5[2]: scope 2 at $DIR/unreachable_diverging.rs:18:9: 18:22
++         unreachable;                     // bb5[3]: scope 2 at $DIR/unreachable_diverging.rs:18:15: 18:19
+      }
+  }
+  
diff --git a/src/test/mir-opt/unusual-item-types.rs b/src/test/mir-opt/unusual-item-types.rs
index 88cfb62a0d0..73a01b1f471 100644
--- a/src/test/mir-opt/unusual-item-types.rs
+++ b/src/test/mir-opt/unusual-item-types.rs
@@ -1,86 +1,27 @@
 // Test that we don't ICE when trying to dump MIR for unusual item types and
 // that we don't create filenames containing `<` and `>`
-// ignore-tidy-linelength
 
 struct A;
 
+// EMIT_MIR rustc.{{impl}}-ASSOCIATED_CONSTANT.mir_map.0.mir
 impl A {
     const ASSOCIATED_CONSTANT: i32 = 2;
 }
 
 // See #59021
+// EMIT_MIR rustc.Test-X-{{constructor}}.mir_map.0.mir
 enum Test {
     X(usize),
     Y { a: usize },
 }
 
+// EMIT_MIR rustc.E-V-{{constant}}.mir_map.0.mir
 enum E {
     V = 5,
 }
 
 fn main() {
     let f = Test::X as fn(usize) -> Test;
+// EMIT_MIR rustc.ptr-drop_in_place.std__vec__Vec_i32_.AddMovesForPackedDrops.before.mir
     let v = Vec::<i32>::new();
 }
-
-// END RUST SOURCE
-
-// START rustc.{{impl}}-ASSOCIATED_CONSTANT.mir_map.0.mir
-// bb0: {
-//     _0 = const 2i32;
-//     return;
-// }
-// bb1 (cleanup): {
-//     resume;
-// }
-// END rustc.{{impl}}-ASSOCIATED_CONSTANT.mir_map.0.mir
-
-// START rustc.E-V-{{constant}}.mir_map.0.mir
-// bb0: {
-//     _0 = const 5isize;
-//     return;
-// }
-// bb1 (cleanup): {
-//     resume;
-// }
-// END rustc.E-V-{{constant}}.mir_map.0.mir
-
-// START rustc.ptr-drop_in_place.std__vec__Vec_i32_.AddMovesForPackedDrops.before.mir
-//     bb0: {
-//     goto -> bb7;
-// }
-// bb1: {
-//     return;
-// }
-// bb2 (cleanup): {
-//     resume;
-// }
-// bb3: {
-//     goto -> bb1;
-// }
-// bb4 (cleanup): {
-//     goto -> bb2;
-// }
-// bb5 (cleanup): {
-//     drop(((*_1).0: alloc::raw_vec::RawVec<i32>)) -> bb4;
-// }
-// bb6: {
-//     drop(((*_1).0: alloc::raw_vec::RawVec<i32>)) -> [return: bb3, unwind: bb4];
-// }
-// bb7: {
-//     _2 = &mut (*_1);
-//     _3 = const <std::vec::Vec<i32> as std::ops::Drop>::drop(move _2) -> [return: bb6, unwind: bb5];
-// }
-// END rustc.ptr-drop_in_place.std__vec__Vec_i32_.AddMovesForPackedDrops.before.mir
-
-// START rustc.Test-X-{{constructor}}.mir_map.0.mir
-// fn Test::X(_1: usize) -> Test {
-//     let mut _0: Test;
-//
-//     bb0: {
-//         ((_0 as X).0: usize) = move _1;
-//         discriminant(_0) = 0;
-//         return;
-//     }
-// }
-// END rustc.Test-X-{{constructor}}.mir_map.0.mir
diff --git a/src/test/mir-opt/unusual-item-types/rustc.E-V-{{constant}}.mir_map.0.mir b/src/test/mir-opt/unusual-item-types/rustc.E-V-{{constant}}.mir_map.0.mir
new file mode 100644
index 00000000000..10c5f8b7fed
--- /dev/null
+++ b/src/test/mir-opt/unusual-item-types/rustc.E-V-{{constant}}.mir_map.0.mir
@@ -0,0 +1,20 @@
+// MIR for `E::V::{{constant}}#0` 0 mir_map
+
+E::V::{{constant}}#0: isize = {
+    let mut _0: isize;                   // return place in scope 0 at $DIR/unusual-item-types.rs:20:9: 20:10
+
+    bb0: {
+        _0 = const 5isize;               // bb0[0]: scope 0 at $DIR/unusual-item-types.rs:20:9: 20:10
+                                         // ty::Const
+                                         // + ty: isize
+                                         // + val: Value(Scalar(0x0000000000000005))
+                                         // mir::Constant
+                                         // + span: $DIR/unusual-item-types.rs:20:9: 20:10
+                                         // + literal: Const { ty: isize, val: Value(Scalar(0x0000000000000005)) }
+        return;                          // bb0[1]: scope 0 at $DIR/unusual-item-types.rs:20:9: 20:10
+    }
+
+    bb1 (cleanup): {
+        resume;                          // bb1[0]: scope 0 at $DIR/unusual-item-types.rs:20:9: 20:10
+    }
+}
diff --git a/src/test/mir-opt/unusual-item-types/rustc.Test-X-{{constructor}}.mir_map.0.mir b/src/test/mir-opt/unusual-item-types/rustc.Test-X-{{constructor}}.mir_map.0.mir
new file mode 100644
index 00000000000..12765ac51ab
--- /dev/null
+++ b/src/test/mir-opt/unusual-item-types/rustc.Test-X-{{constructor}}.mir_map.0.mir
@@ -0,0 +1,11 @@
+// MIR for `Test::X` 0 mir_map
+
+fn Test::X(_1: usize) -> Test {
+    let mut _0: Test;                    // return place in scope 0 at $DIR/unusual-item-types.rs:14:5: 14:13
+
+    bb0: {
+        ((_0 as X).0: usize) = move _1;  // bb0[0]: scope 0 at $DIR/unusual-item-types.rs:14:5: 14:13
+        discriminant(_0) = 0;            // bb0[1]: scope 0 at $DIR/unusual-item-types.rs:14:5: 14:13
+        return;                          // bb0[2]: scope 0 at $DIR/unusual-item-types.rs:14:5: 14:13
+    }
+}
diff --git a/src/test/mir-opt/unusual-item-types/rustc.ptr-drop_in_place.std__vec__Vec_i32_.AddMovesForPackedDrops.before.mir b/src/test/mir-opt/unusual-item-types/rustc.ptr-drop_in_place.std__vec__Vec_i32_.AddMovesForPackedDrops.before.mir
new file mode 100644
index 00000000000..473c72a342e
--- /dev/null
+++ b/src/test/mir-opt/unusual-item-types/rustc.ptr-drop_in_place.std__vec__Vec_i32_.AddMovesForPackedDrops.before.mir
@@ -0,0 +1,46 @@
+// MIR for `std::intrinsics::drop_in_place` before AddMovesForPackedDrops
+
+fn std::intrinsics::drop_in_place(_1: *mut std::vec::Vec<i32>) -> () {
+    let mut _0: ();                      // return place in scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+    let mut _2: &mut std::vec::Vec<i32>; // in scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+    let mut _3: ();                      // in scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+
+    bb0: {
+        goto -> bb7;                     // bb0[0]: scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+    }
+
+    bb1: {
+        return;                          // bb1[0]: scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+    }
+
+    bb2 (cleanup): {
+        resume;                          // bb2[0]: scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+    }
+
+    bb3: {
+        goto -> bb1;                     // bb3[0]: scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+    }
+
+    bb4 (cleanup): {
+        goto -> bb2;                     // bb4[0]: scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+    }
+
+    bb5 (cleanup): {
+        drop(((*_1).0: alloc::raw_vec::RawVec<i32>)) -> bb4; // bb5[0]: scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+    }
+
+    bb6: {
+        drop(((*_1).0: alloc::raw_vec::RawVec<i32>)) -> [return: bb3, unwind: bb4]; // bb6[0]: scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+    }
+
+    bb7: {
+        _2 = &mut (*_1);                 // bb7[0]: scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+        _3 = const <std::vec::Vec<i32> as std::ops::Drop>::drop(move _2) -> [return: bb6, unwind: bb5]; // bb7[1]: scope 0 at $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+                                         // ty::Const
+                                         // + ty: for<'r> fn(&'r mut std::vec::Vec<i32>) {<std::vec::Vec<i32> as std::ops::Drop>::drop}
+                                         // + val: Value(Scalar(<ZST>))
+                                         // mir::Constant
+                                         // + span: $SRC_DIR/libcore/ptr/mod.rs:LL:COL: 181:2
+                                         // + literal: Const { ty: for<'r> fn(&'r mut std::vec::Vec<i32>) {<std::vec::Vec<i32> as std::ops::Drop>::drop}, val: Value(Scalar(<ZST>)) }
+    }
+}
diff --git a/src/test/mir-opt/unusual-item-types/rustc.{{impl}}-ASSOCIATED_CONSTANT.mir_map.0.mir b/src/test/mir-opt/unusual-item-types/rustc.{{impl}}-ASSOCIATED_CONSTANT.mir_map.0.mir
new file mode 100644
index 00000000000..2a87294f1c8
--- /dev/null
+++ b/src/test/mir-opt/unusual-item-types/rustc.{{impl}}-ASSOCIATED_CONSTANT.mir_map.0.mir
@@ -0,0 +1,20 @@
+// MIR for `<impl at $DIR/unusual-item-types.rs:7:1: 9:2>::ASSOCIATED_CONSTANT` 0 mir_map
+
+const <impl at $DIR/unusual-item-types.rs:7:1: 9:2>::ASSOCIATED_CONSTANT: i32 = {
+    let mut _0: i32;                     // return place in scope 0 at $DIR/unusual-item-types.rs:8:32: 8:35
+
+    bb0: {
+        _0 = const 2i32;                 // bb0[0]: scope 0 at $DIR/unusual-item-types.rs:8:38: 8:39
+                                         // ty::Const
+                                         // + ty: i32
+                                         // + val: Value(Scalar(0x00000002))
+                                         // mir::Constant
+                                         // + span: $DIR/unusual-item-types.rs:8:38: 8:39
+                                         // + literal: Const { ty: i32, val: Value(Scalar(0x00000002)) }
+        return;                          // bb0[1]: scope 0 at $DIR/unusual-item-types.rs:8:5: 8:40
+    }
+
+    bb1 (cleanup): {
+        resume;                          // bb1[0]: scope 0 at $DIR/unusual-item-types.rs:8:5: 8:40
+    }
+}
diff --git a/src/test/mir-opt/while-storage.rs b/src/test/mir-opt/while-storage.rs
index 86c3f79d3a7..56f6c3380a7 100644
--- a/src/test/mir-opt/while-storage.rs
+++ b/src/test/mir-opt/while-storage.rs
@@ -5,6 +5,7 @@ fn get_bool(c: bool) -> bool {
     c
 }
 
+// EMIT_MIR rustc.while_loop.PreCodegen.after.mir
 fn while_loop(c: bool) {
     while get_bool(c) {
         if get_bool(c) {
@@ -16,41 +17,3 @@ fn while_loop(c: bool) {
 fn main() {
     while_loop(false);
 }
-
-// END RUST SOURCE
-
-// START rustc.while_loop.PreCodegen.after.mir
-// bb0: {
-//     StorageLive(_2);
-//     StorageLive(_3);
-//     _3 = _1;
-//     _2 = const get_bool(move _3) -> bb1;
-// }
-// bb1: {
-//     StorageDead(_3);
-//     switchInt(_2) -> [false: bb6, otherwise: bb2];
-// }
-// bb2: {
-//      StorageLive(_4);
-//      StorageLive(_5);
-//      _5 = _1;
-//      _4 = const get_bool(move _5) -> bb3;
-// }
-// bb3: {
-//      StorageDead(_5);
-//      switchInt(_4) -> [false: bb4, otherwise: bb5];
-// }
-// bb4: {
-//      StorageDead(_4);
-//      StorageDead(_2);
-//      goto -> bb0;
-// }
-//  bb5: {
-//      StorageDead(_4);
-//      goto -> bb6;
-//  }
-//  bb6: {
-//      StorageDead(_2);
-//      return;
-//  }
-// END rustc.while_loop.PreCodegen.after.mir
diff --git a/src/test/mir-opt/while-storage/rustc.while_loop.PreCodegen.after.mir b/src/test/mir-opt/while-storage/rustc.while_loop.PreCodegen.after.mir
new file mode 100644
index 00000000000..8fadcb8c12f
--- /dev/null
+++ b/src/test/mir-opt/while-storage/rustc.while_loop.PreCodegen.after.mir
@@ -0,0 +1,62 @@
+// MIR for `while_loop` after PreCodegen
+
+fn while_loop(_1: bool) -> () {
+    debug c => _1;                       // in scope 0 at $DIR/while-storage.rs:9:15: 9:16
+    let mut _0: ();                      // return place in scope 0 at $DIR/while-storage.rs:9:24: 9:24
+    let mut _2: bool;                    // in scope 0 at $DIR/while-storage.rs:10:11: 10:22
+    let mut _3: bool;                    // in scope 0 at $DIR/while-storage.rs:10:20: 10:21
+    let mut _4: bool;                    // in scope 0 at $DIR/while-storage.rs:11:12: 11:23
+    let mut _5: bool;                    // in scope 0 at $DIR/while-storage.rs:11:21: 11:22
+
+    bb0: {
+        StorageLive(_2);                 // bb0[0]: scope 0 at $DIR/while-storage.rs:10:11: 10:22
+        StorageLive(_3);                 // bb0[1]: scope 0 at $DIR/while-storage.rs:10:20: 10:21
+        _3 = _1;                         // bb0[2]: scope 0 at $DIR/while-storage.rs:10:20: 10:21
+        _2 = const get_bool(move _3) -> bb1; // bb0[3]: scope 0 at $DIR/while-storage.rs:10:11: 10:22
+                                         // ty::Const
+                                         // + ty: fn(bool) -> bool {get_bool}
+                                         // + val: Value(Scalar(<ZST>))
+                                         // mir::Constant
+                                         // + span: $DIR/while-storage.rs:10:11: 10:19
+                                         // + literal: Const { ty: fn(bool) -> bool {get_bool}, val: Value(Scalar(<ZST>)) }
+    }
+
+    bb1: {
+        StorageDead(_3);                 // bb1[0]: scope 0 at $DIR/while-storage.rs:10:21: 10:22
+        switchInt(_2) -> [false: bb6, otherwise: bb2]; // bb1[1]: scope 0 at $DIR/while-storage.rs:10:5: 14:6
+    }
+
+    bb2: {
+        StorageLive(_4);                 // bb2[0]: scope 0 at $DIR/while-storage.rs:11:12: 11:23
+        StorageLive(_5);                 // bb2[1]: scope 0 at $DIR/while-storage.rs:11:21: 11:22
+        _5 = _1;                         // bb2[2]: scope 0 at $DIR/while-storage.rs:11:21: 11:22
+        _4 = const get_bool(move _5) -> bb3; // bb2[3]: scope 0 at $DIR/while-storage.rs:11:12: 11:23
+                                         // ty::Const
+                                         // + ty: fn(bool) -> bool {get_bool}
+                                         // + val: Value(Scalar(<ZST>))
+                                         // mir::Constant
+                                         // + span: $DIR/while-storage.rs:11:12: 11:20
+                                         // + literal: Const { ty: fn(bool) -> bool {get_bool}, val: Value(Scalar(<ZST>)) }
+    }
+
+    bb3: {
+        StorageDead(_5);                 // bb3[0]: scope 0 at $DIR/while-storage.rs:11:22: 11:23
+        switchInt(_4) -> [false: bb4, otherwise: bb5]; // bb3[1]: scope 0 at $DIR/while-storage.rs:11:9: 13:10
+    }
+
+    bb4: {
+        StorageDead(_4);                 // bb4[0]: scope 0 at $DIR/while-storage.rs:14:5: 14:6
+        StorageDead(_2);                 // bb4[1]: scope 0 at $DIR/while-storage.rs:10:21: 10:22
+        goto -> bb0;                     // bb4[2]: scope 0 at $DIR/while-storage.rs:10:5: 14:6
+    }
+
+    bb5: {
+        StorageDead(_4);                 // bb5[0]: scope 0 at $DIR/while-storage.rs:14:5: 14:6
+        goto -> bb6;                     // bb5[1]: scope 0 at $DIR/while-storage.rs:12:13: 12:18
+    }
+
+    bb6: {
+        StorageDead(_2);                 // bb6[0]: scope 0 at $DIR/while-storage.rs:10:21: 10:22
+        return;                          // bb6[1]: scope 0 at $DIR/while-storage.rs:15:2: 15:2
+    }
+}