Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit aa05ea6

Browse files
committedFeb 9, 2024
Enable DestinationPropagation by default.
1 parent f4cfd87 commit aa05ea6

16 files changed

+272
-532
lines changed
 

‎compiler/rustc_mir_transform/src/dest_prop.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ impl<'tcx> MirPass<'tcx> for DestinationPropagation {
159159
// 2. Despite being an overall perf improvement, this still causes a 30% regression in
160160
// keccak. We can temporarily fix this by bounding function size, but in the long term
161161
// we should fix this by being smarter about invalidating analysis results.
162-
sess.mir_opt_level() >= 3
162+
sess.mir_opt_level() >= 2
163163
}
164164

165165
fn run_pass(&self, tcx: TyCtxt<'tcx>, body: &mut Body<'tcx>) {

‎compiler/rustc_mir_transform/src/lib.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,6 @@ mod lower_slice_len;
9292
mod match_branches;
9393
mod multiple_return_terminators;
9494
mod normalize_array_len;
95-
mod nrvo;
9695
mod prettify;
9796
mod promote_consts;
9897
mod ref_prop;
@@ -611,13 +610,12 @@ fn run_optimization_passes<'tcx>(tcx: TyCtxt<'tcx>, body: &mut Body<'tcx>) {
611610
&jump_threading::JumpThreading,
612611
&early_otherwise_branch::EarlyOtherwiseBranch,
613612
&simplify_comparison_integral::SimplifyComparisonIntegral,
614-
&dest_prop::DestinationPropagation,
615613
&o1(simplify_branches::SimplifyConstCondition::Final),
616614
&o1(remove_noop_landing_pads::RemoveNoopLandingPads),
617615
&o1(simplify::SimplifyCfg::Final),
618616
&copy_prop::CopyProp,
619617
&dead_store_elimination::DeadStoreElimination::Final,
620-
&nrvo::RenameReturnPlace,
618+
&dest_prop::DestinationPropagation,
621619
&simplify::SimplifyLocals::Final,
622620
&multiple_return_terminators::MultipleReturnTerminators,
623621
&deduplicate_blocks::DeduplicateBlocks,

‎compiler/rustc_mir_transform/src/nrvo.rs

Lines changed: 0 additions & 237 deletions
This file was deleted.

‎tests/mir-opt/nrvo_simple.nrvo.RenameReturnPlace.panic-abort.diff renamed to ‎tests/mir-opt/dest-prop/nrvo_borrowed.nrvo.DestinationPropagation.panic-abort.diff

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
- // MIR for `nrvo` before RenameReturnPlace
2-
+ // MIR for `nrvo` after RenameReturnPlace
1+
- // MIR for `nrvo` before DestinationPropagation
2+
+ // MIR for `nrvo` after DestinationPropagation
33

44
fn nrvo(_1: for<'a> fn(&'a mut [u8; 1024])) -> [u8; 1024] {
55
debug init => _1;
@@ -10,32 +10,33 @@
1010
let mut _5: &mut [u8; 1024];
1111
let mut _6: &mut [u8; 1024];
1212
scope 1 {
13-
- debug buf => _2;
14-
+ debug buf => _0;
13+
debug buf => _2;
1514
}
1615

1716
bb0: {
18-
- StorageLive(_2);
19-
- _2 = [const 0_u8; 1024];
20-
+ _0 = [const 0_u8; 1024];
17+
StorageLive(_2);
18+
_2 = [const 0_u8; 1024];
2119
StorageLive(_3);
22-
StorageLive(_4);
23-
_4 = _1;
20+
- StorageLive(_4);
21+
- _4 = _1;
22+
+ nop;
23+
+ nop;
2424
StorageLive(_5);
2525
StorageLive(_6);
26-
- _6 = &mut _2;
27-
+ _6 = &mut _0;
26+
_6 = &mut _2;
2827
_5 = &mut (*_6);
29-
_3 = move _4(move _5) -> [return: bb1, unwind unreachable];
28+
- _3 = move _4(move _5) -> [return: bb1, unwind unreachable];
29+
+ _3 = move _1(move _5) -> [return: bb1, unwind unreachable];
3030
}
3131

3232
bb1: {
3333
StorageDead(_5);
34-
StorageDead(_4);
34+
- StorageDead(_4);
35+
+ nop;
3536
StorageDead(_6);
3637
StorageDead(_3);
37-
- _0 = _2;
38-
- StorageDead(_2);
38+
_0 = _2;
39+
StorageDead(_2);
3940
return;
4041
}
4142
}

‎tests/mir-opt/nrvo_simple.nrvo.RenameReturnPlace.panic-unwind.diff renamed to ‎tests/mir-opt/dest-prop/nrvo_borrowed.nrvo.DestinationPropagation.panic-unwind.diff

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
- // MIR for `nrvo` before RenameReturnPlace
2-
+ // MIR for `nrvo` after RenameReturnPlace
1+
- // MIR for `nrvo` before DestinationPropagation
2+
+ // MIR for `nrvo` after DestinationPropagation
33

44
fn nrvo(_1: for<'a> fn(&'a mut [u8; 1024])) -> [u8; 1024] {
55
debug init => _1;
@@ -10,32 +10,33 @@
1010
let mut _5: &mut [u8; 1024];
1111
let mut _6: &mut [u8; 1024];
1212
scope 1 {
13-
- debug buf => _2;
14-
+ debug buf => _0;
13+
debug buf => _2;
1514
}
1615

1716
bb0: {
18-
- StorageLive(_2);
19-
- _2 = [const 0_u8; 1024];
20-
+ _0 = [const 0_u8; 1024];
17+
StorageLive(_2);
18+
_2 = [const 0_u8; 1024];
2119
StorageLive(_3);
22-
StorageLive(_4);
23-
_4 = _1;
20+
- StorageLive(_4);
21+
- _4 = _1;
22+
+ nop;
23+
+ nop;
2424
StorageLive(_5);
2525
StorageLive(_6);
26-
- _6 = &mut _2;
27-
+ _6 = &mut _0;
26+
_6 = &mut _2;
2827
_5 = &mut (*_6);
29-
_3 = move _4(move _5) -> [return: bb1, unwind continue];
28+
- _3 = move _4(move _5) -> [return: bb1, unwind continue];
29+
+ _3 = move _1(move _5) -> [return: bb1, unwind continue];
3030
}
3131

3232
bb1: {
3333
StorageDead(_5);
34-
StorageDead(_4);
34+
- StorageDead(_4);
35+
+ nop;
3536
StorageDead(_6);
3637
StorageDead(_3);
37-
- _0 = _2;
38-
- StorageDead(_2);
38+
_0 = _2;
39+
StorageDead(_2);
3940
return;
4041
}
4142
}

‎tests/mir-opt/nrvo_simple.rs renamed to ‎tests/mir-opt/dest-prop/nrvo_borrowed.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
// skip-filecheck
22
// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
3-
// unit-test: RenameReturnPlace
3+
// unit-test: DestinationPropagation
44

5-
// EMIT_MIR nrvo_simple.nrvo.RenameReturnPlace.diff
5+
// EMIT_MIR nrvo_borrowed.nrvo.DestinationPropagation.diff
66
fn nrvo(init: fn(&mut [u8; 1024])) -> [u8; 1024] {
77
let mut buf = [0; 1024];
88
init(&mut buf);

‎tests/mir-opt/dest-prop/union.main.DestinationPropagation.panic-abort.diff

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
bb0: {
2121
StorageLive(_1);
2222
StorageLive(_2);
23-
_2 = const 1_u32;
23+
nop;
2424
_1 = Un { us: const 1_u32 };
2525
StorageDead(_2);
2626
StorageLive(_3);

‎tests/mir-opt/dest-prop/union.main.DestinationPropagation.panic-unwind.diff

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
bb0: {
2121
StorageLive(_1);
2222
StorageLive(_2);
23-
_2 = const 1_u32;
23+
nop;
2424
_1 = Un { us: const 1_u32 };
2525
StorageDead(_2);
2626
StorageLive(_3);

‎tests/mir-opt/nrvo_miscompile_111005.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
// skip-filecheck
22
// This is a miscompilation, #111005 to track
33

4-
// unit-test: RenameReturnPlace
4+
// unit-test: DestinationPropagation
55

66
#![feature(custom_mir, core_intrinsics)]
77
extern crate core;
88
use core::intrinsics::mir::*;
99

10-
// EMIT_MIR nrvo_miscompile_111005.wrong.RenameReturnPlace.diff
10+
// EMIT_MIR nrvo_miscompile_111005.wrong.DestinationPropagation.diff
1111
#[custom_mir(dialect = "runtime", phase = "initial")]
1212
pub fn wrong(arg: char) -> char {
1313
mir!({

‎tests/mir-opt/nrvo_miscompile_111005.wrong.RenameReturnPlace.diff renamed to ‎tests/mir-opt/nrvo_miscompile_111005.wrong.DestinationPropagation.diff

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
- // MIR for `wrong` before RenameReturnPlace
2-
+ // MIR for `wrong` after RenameReturnPlace
1+
- // MIR for `wrong` before DestinationPropagation
2+
+ // MIR for `wrong` after DestinationPropagation
33

44
fn wrong(_1: char) -> char {
55
let mut _0: char;
@@ -9,8 +9,9 @@
99
- _2 = _1;
1010
- _0 = _2;
1111
- _2 = const 'b';
12+
+ nop;
1213
+ _0 = _1;
13-
+ _0 = const 'b';
14+
+ _1 = const 'b';
1415
return;
1516
}
1617
}

‎tests/mir-opt/pre-codegen/slice_iter.enumerated_loop.PreCodegen.after.panic-abort.mir

Lines changed: 41 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,22 @@ fn enumerated_loop(_1: &[T], _2: impl Fn(usize, &T)) -> () {
44
debug slice => _1;
55
debug f => _2;
66
let mut _0: ();
7-
let mut _15: std::slice::Iter<'_, T>;
7+
let mut _14: std::slice::Iter<'_, T>;
8+
let mut _15: std::iter::Enumerate<std::slice::Iter<'_, T>>;
89
let mut _16: std::iter::Enumerate<std::slice::Iter<'_, T>>;
9-
let mut _17: std::iter::Enumerate<std::slice::Iter<'_, T>>;
10-
let mut _18: &mut std::iter::Enumerate<std::slice::Iter<'_, T>>;
11-
let mut _19: std::option::Option<(usize, &T)>;
12-
let mut _20: isize;
13-
let mut _23: &impl Fn(usize, &T);
14-
let mut _24: (usize, &T);
15-
let _25: ();
10+
let mut _17: &mut std::iter::Enumerate<std::slice::Iter<'_, T>>;
11+
let mut _18: std::option::Option<(usize, &T)>;
12+
let mut _19: isize;
13+
let mut _22: &impl Fn(usize, &T);
14+
let mut _23: (usize, &T);
15+
let _24: ();
1616
scope 1 {
17-
debug iter => _17;
18-
let _21: usize;
19-
let _22: &T;
17+
debug iter => _16;
18+
let _20: usize;
19+
let _21: &T;
2020
scope 2 {
21-
debug i => _21;
22-
debug x => _22;
21+
debug i => _20;
22+
debug x => _21;
2323
}
2424
}
2525
scope 3 (inlined core::slice::<impl [T]>::iter) {
@@ -31,14 +31,13 @@ fn enumerated_loop(_1: &[T], _2: impl Fn(usize, &T)) -> () {
3131
let mut _10: bool;
3232
let mut _11: *mut T;
3333
let mut _12: *mut T;
34-
let mut _14: *const T;
34+
let mut _13: *const T;
3535
scope 5 {
3636
debug len => _3;
3737
let _9: std::ptr::NonNull<T>;
3838
scope 6 {
3939
debug ptr => _9;
4040
scope 7 {
41-
let _13: *const T;
4241
scope 8 {
4342
debug end_or_len => _13;
4443
}
@@ -79,19 +78,20 @@ fn enumerated_loop(_1: &[T], _2: impl Fn(usize, &T)) -> () {
7978
}
8079
}
8180
scope 19 (inlined <std::slice::Iter<'_, T> as Iterator>::enumerate) {
82-
debug self => _15;
81+
debug self => _14;
8382
scope 20 (inlined Enumerate::<std::slice::Iter<'_, T>>::new) {
84-
debug iter => _15;
83+
debug iter => _14;
8584
}
8685
}
8786
scope 21 (inlined <Enumerate<std::slice::Iter<'_, T>> as IntoIterator>::into_iter) {
88-
debug self => _16;
87+
debug self => _15;
8988
}
9089

9190
bb0: {
92-
StorageLive(_15);
91+
StorageLive(_14);
9392
StorageLive(_3);
9493
StorageLive(_9);
94+
StorageLive(_13);
9595
StorageLive(_4);
9696
StorageLive(_8);
9797
_3 = Len((*_1));
@@ -107,7 +107,6 @@ fn enumerated_loop(_1: &[T], _2: impl Fn(usize, &T)) -> () {
107107
StorageDead(_7);
108108
_9 = NonNull::<T> { pointer: _8 };
109109
StorageDead(_5);
110-
StorageLive(_13);
111110
StorageLive(_10);
112111
_10 = const _;
113112
switchInt(move _10) -> [0: bb1, otherwise: bb2];
@@ -131,38 +130,35 @@ fn enumerated_loop(_1: &[T], _2: impl Fn(usize, &T)) -> () {
131130

132131
bb3: {
133132
StorageDead(_10);
134-
StorageLive(_14);
135-
_14 = _13;
136-
_15 = std::slice::Iter::<'_, T> { ptr: _9, end_or_len: move _14, _marker: const ZeroSized: PhantomData<&T> };
137-
StorageDead(_14);
138-
StorageDead(_13);
133+
_14 = std::slice::Iter::<'_, T> { ptr: _9, end_or_len: move _13, _marker: const ZeroSized: PhantomData<&T> };
139134
StorageDead(_8);
140135
StorageDead(_4);
136+
StorageDead(_13);
141137
StorageDead(_9);
142138
StorageDead(_3);
143-
_16 = Enumerate::<std::slice::Iter<'_, T>> { iter: _15, count: const 0_usize };
144-
StorageDead(_15);
145-
StorageLive(_17);
146-
_17 = _16;
139+
_15 = Enumerate::<std::slice::Iter<'_, T>> { iter: _14, count: const 0_usize };
140+
StorageDead(_14);
141+
StorageLive(_16);
142+
_16 = _15;
147143
goto -> bb4;
148144
}
149145

150146
bb4: {
151-
StorageLive(_19);
152147
StorageLive(_18);
153-
_18 = &mut _17;
154-
_19 = <Enumerate<std::slice::Iter<'_, T>> as Iterator>::next(move _18) -> [return: bb5, unwind unreachable];
148+
StorageLive(_17);
149+
_17 = &mut _16;
150+
_18 = <Enumerate<std::slice::Iter<'_, T>> as Iterator>::next(move _17) -> [return: bb5, unwind unreachable];
155151
}
156152

157153
bb5: {
158-
StorageDead(_18);
159-
_20 = discriminant(_19);
160-
switchInt(move _20) -> [0: bb6, 1: bb8, otherwise: bb10];
154+
StorageDead(_17);
155+
_19 = discriminant(_18);
156+
switchInt(move _19) -> [0: bb6, 1: bb8, otherwise: bb10];
161157
}
162158

163159
bb6: {
164-
StorageDead(_19);
165-
StorageDead(_17);
160+
StorageDead(_18);
161+
StorageDead(_16);
166162
drop(_2) -> [return: bb7, unwind unreachable];
167163
}
168164

@@ -171,19 +167,19 @@ fn enumerated_loop(_1: &[T], _2: impl Fn(usize, &T)) -> () {
171167
}
172168

173169
bb8: {
174-
_21 = (((_19 as Some).0: (usize, &T)).0: usize);
175-
_22 = (((_19 as Some).0: (usize, &T)).1: &T);
170+
_20 = (((_18 as Some).0: (usize, &T)).0: usize);
171+
_21 = (((_18 as Some).0: (usize, &T)).1: &T);
172+
StorageLive(_22);
173+
_22 = &_2;
176174
StorageLive(_23);
177-
_23 = &_2;
178-
StorageLive(_24);
179-
_24 = (_21, _22);
180-
_25 = <impl Fn(usize, &T) as Fn<(usize, &T)>>::call(move _23, move _24) -> [return: bb9, unwind unreachable];
175+
_23 = (_20, _21);
176+
_24 = <impl Fn(usize, &T) as Fn<(usize, &T)>>::call(move _22, move _23) -> [return: bb9, unwind unreachable];
181177
}
182178

183179
bb9: {
184-
StorageDead(_24);
185180
StorageDead(_23);
186-
StorageDead(_19);
181+
StorageDead(_22);
182+
StorageDead(_18);
187183
goto -> bb4;
188184
}
189185

‎tests/mir-opt/pre-codegen/slice_iter.enumerated_loop.PreCodegen.after.panic-unwind.mir

Lines changed: 41 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,22 @@ fn enumerated_loop(_1: &[T], _2: impl Fn(usize, &T)) -> () {
44
debug slice => _1;
55
debug f => _2;
66
let mut _0: ();
7-
let mut _15: std::slice::Iter<'_, T>;
7+
let mut _14: std::slice::Iter<'_, T>;
8+
let mut _15: std::iter::Enumerate<std::slice::Iter<'_, T>>;
89
let mut _16: std::iter::Enumerate<std::slice::Iter<'_, T>>;
9-
let mut _17: std::iter::Enumerate<std::slice::Iter<'_, T>>;
10-
let mut _18: &mut std::iter::Enumerate<std::slice::Iter<'_, T>>;
11-
let mut _19: std::option::Option<(usize, &T)>;
12-
let mut _20: isize;
13-
let mut _23: &impl Fn(usize, &T);
14-
let mut _24: (usize, &T);
15-
let _25: ();
10+
let mut _17: &mut std::iter::Enumerate<std::slice::Iter<'_, T>>;
11+
let mut _18: std::option::Option<(usize, &T)>;
12+
let mut _19: isize;
13+
let mut _22: &impl Fn(usize, &T);
14+
let mut _23: (usize, &T);
15+
let _24: ();
1616
scope 1 {
17-
debug iter => _17;
18-
let _21: usize;
19-
let _22: &T;
17+
debug iter => _16;
18+
let _20: usize;
19+
let _21: &T;
2020
scope 2 {
21-
debug i => _21;
22-
debug x => _22;
21+
debug i => _20;
22+
debug x => _21;
2323
}
2424
}
2525
scope 3 (inlined core::slice::<impl [T]>::iter) {
@@ -31,14 +31,13 @@ fn enumerated_loop(_1: &[T], _2: impl Fn(usize, &T)) -> () {
3131
let mut _10: bool;
3232
let mut _11: *mut T;
3333
let mut _12: *mut T;
34-
let mut _14: *const T;
34+
let mut _13: *const T;
3535
scope 5 {
3636
debug len => _3;
3737
let _9: std::ptr::NonNull<T>;
3838
scope 6 {
3939
debug ptr => _9;
4040
scope 7 {
41-
let _13: *const T;
4241
scope 8 {
4342
debug end_or_len => _13;
4443
}
@@ -79,19 +78,20 @@ fn enumerated_loop(_1: &[T], _2: impl Fn(usize, &T)) -> () {
7978
}
8079
}
8180
scope 19 (inlined <std::slice::Iter<'_, T> as Iterator>::enumerate) {
82-
debug self => _15;
81+
debug self => _14;
8382
scope 20 (inlined Enumerate::<std::slice::Iter<'_, T>>::new) {
84-
debug iter => _15;
83+
debug iter => _14;
8584
}
8685
}
8786
scope 21 (inlined <Enumerate<std::slice::Iter<'_, T>> as IntoIterator>::into_iter) {
88-
debug self => _16;
87+
debug self => _15;
8988
}
9089

9190
bb0: {
92-
StorageLive(_15);
91+
StorageLive(_14);
9392
StorageLive(_3);
9493
StorageLive(_9);
94+
StorageLive(_13);
9595
StorageLive(_4);
9696
StorageLive(_8);
9797
_3 = Len((*_1));
@@ -107,7 +107,6 @@ fn enumerated_loop(_1: &[T], _2: impl Fn(usize, &T)) -> () {
107107
StorageDead(_7);
108108
_9 = NonNull::<T> { pointer: _8 };
109109
StorageDead(_5);
110-
StorageLive(_13);
111110
StorageLive(_10);
112111
_10 = const _;
113112
switchInt(move _10) -> [0: bb1, otherwise: bb2];
@@ -131,38 +130,35 @@ fn enumerated_loop(_1: &[T], _2: impl Fn(usize, &T)) -> () {
131130

132131
bb3: {
133132
StorageDead(_10);
134-
StorageLive(_14);
135-
_14 = _13;
136-
_15 = std::slice::Iter::<'_, T> { ptr: _9, end_or_len: move _14, _marker: const ZeroSized: PhantomData<&T> };
137-
StorageDead(_14);
138-
StorageDead(_13);
133+
_14 = std::slice::Iter::<'_, T> { ptr: _9, end_or_len: move _13, _marker: const ZeroSized: PhantomData<&T> };
139134
StorageDead(_8);
140135
StorageDead(_4);
136+
StorageDead(_13);
141137
StorageDead(_9);
142138
StorageDead(_3);
143-
_16 = Enumerate::<std::slice::Iter<'_, T>> { iter: _15, count: const 0_usize };
144-
StorageDead(_15);
145-
StorageLive(_17);
146-
_17 = _16;
139+
_15 = Enumerate::<std::slice::Iter<'_, T>> { iter: _14, count: const 0_usize };
140+
StorageDead(_14);
141+
StorageLive(_16);
142+
_16 = _15;
147143
goto -> bb4;
148144
}
149145

150146
bb4: {
151-
StorageLive(_19);
152147
StorageLive(_18);
153-
_18 = &mut _17;
154-
_19 = <Enumerate<std::slice::Iter<'_, T>> as Iterator>::next(move _18) -> [return: bb5, unwind: bb11];
148+
StorageLive(_17);
149+
_17 = &mut _16;
150+
_18 = <Enumerate<std::slice::Iter<'_, T>> as Iterator>::next(move _17) -> [return: bb5, unwind: bb11];
155151
}
156152

157153
bb5: {
158-
StorageDead(_18);
159-
_20 = discriminant(_19);
160-
switchInt(move _20) -> [0: bb6, 1: bb8, otherwise: bb10];
154+
StorageDead(_17);
155+
_19 = discriminant(_18);
156+
switchInt(move _19) -> [0: bb6, 1: bb8, otherwise: bb10];
161157
}
162158

163159
bb6: {
164-
StorageDead(_19);
165-
StorageDead(_17);
160+
StorageDead(_18);
161+
StorageDead(_16);
166162
drop(_2) -> [return: bb7, unwind continue];
167163
}
168164

@@ -171,19 +167,19 @@ fn enumerated_loop(_1: &[T], _2: impl Fn(usize, &T)) -> () {
171167
}
172168

173169
bb8: {
174-
_21 = (((_19 as Some).0: (usize, &T)).0: usize);
175-
_22 = (((_19 as Some).0: (usize, &T)).1: &T);
170+
_20 = (((_18 as Some).0: (usize, &T)).0: usize);
171+
_21 = (((_18 as Some).0: (usize, &T)).1: &T);
172+
StorageLive(_22);
173+
_22 = &_2;
176174
StorageLive(_23);
177-
_23 = &_2;
178-
StorageLive(_24);
179-
_24 = (_21, _22);
180-
_25 = <impl Fn(usize, &T) as Fn<(usize, &T)>>::call(move _23, move _24) -> [return: bb9, unwind: bb11];
175+
_23 = (_20, _21);
176+
_24 = <impl Fn(usize, &T) as Fn<(usize, &T)>>::call(move _22, move _23) -> [return: bb9, unwind: bb11];
181177
}
182178

183179
bb9: {
184-
StorageDead(_24);
185180
StorageDead(_23);
186-
StorageDead(_19);
181+
StorageDead(_22);
182+
StorageDead(_18);
187183
goto -> bb4;
188184
}
189185

‎tests/mir-opt/pre-codegen/slice_iter.forward_loop.PreCodegen.after.panic-abort.mir

Lines changed: 32 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,19 @@ fn forward_loop(_1: &[T], _2: impl Fn(&T)) -> () {
44
debug slice => _1;
55
debug f => _2;
66
let mut _0: ();
7+
let mut _14: std::slice::Iter<'_, T>;
78
let mut _15: std::slice::Iter<'_, T>;
8-
let mut _16: std::slice::Iter<'_, T>;
9-
let mut _17: &mut std::slice::Iter<'_, T>;
10-
let mut _18: std::option::Option<&T>;
11-
let mut _19: isize;
12-
let mut _21: &impl Fn(&T);
13-
let mut _22: (&T,);
14-
let _23: ();
9+
let mut _16: &mut std::slice::Iter<'_, T>;
10+
let mut _17: std::option::Option<&T>;
11+
let mut _18: isize;
12+
let mut _20: &impl Fn(&T);
13+
let mut _21: (&T,);
14+
let _22: ();
1515
scope 1 {
16-
debug iter => _16;
17-
let _20: &T;
16+
debug iter => _15;
17+
let _19: &T;
1818
scope 2 {
19-
debug x => _20;
19+
debug x => _19;
2020
}
2121
}
2222
scope 3 (inlined core::slice::<impl [T]>::iter) {
@@ -28,14 +28,13 @@ fn forward_loop(_1: &[T], _2: impl Fn(&T)) -> () {
2828
let mut _10: bool;
2929
let mut _11: *mut T;
3030
let mut _12: *mut T;
31-
let mut _14: *const T;
31+
let mut _13: *const T;
3232
scope 5 {
3333
debug len => _3;
3434
let _9: std::ptr::NonNull<T>;
3535
scope 6 {
3636
debug ptr => _9;
3737
scope 7 {
38-
let _13: *const T;
3938
scope 8 {
4039
debug end_or_len => _13;
4140
}
@@ -76,12 +75,13 @@ fn forward_loop(_1: &[T], _2: impl Fn(&T)) -> () {
7675
}
7776
}
7877
scope 19 (inlined <std::slice::Iter<'_, T> as IntoIterator>::into_iter) {
79-
debug self => _15;
78+
debug self => _14;
8079
}
8180

8281
bb0: {
8382
StorageLive(_3);
8483
StorageLive(_9);
84+
StorageLive(_13);
8585
StorageLive(_4);
8686
StorageLive(_8);
8787
_3 = Len((*_1));
@@ -97,7 +97,6 @@ fn forward_loop(_1: &[T], _2: impl Fn(&T)) -> () {
9797
StorageDead(_7);
9898
_9 = NonNull::<T> { pointer: _8 };
9999
StorageDead(_5);
100-
StorageLive(_13);
101100
StorageLive(_10);
102101
_10 = const _;
103102
switchInt(move _10) -> [0: bb1, otherwise: bb2];
@@ -121,36 +120,33 @@ fn forward_loop(_1: &[T], _2: impl Fn(&T)) -> () {
121120

122121
bb3: {
123122
StorageDead(_10);
124-
StorageLive(_14);
125-
_14 = _13;
126-
_15 = std::slice::Iter::<'_, T> { ptr: _9, end_or_len: move _14, _marker: const ZeroSized: PhantomData<&T> };
127-
StorageDead(_14);
128-
StorageDead(_13);
123+
_14 = std::slice::Iter::<'_, T> { ptr: _9, end_or_len: move _13, _marker: const ZeroSized: PhantomData<&T> };
129124
StorageDead(_8);
130125
StorageDead(_4);
126+
StorageDead(_13);
131127
StorageDead(_9);
132128
StorageDead(_3);
133-
StorageLive(_16);
134-
_16 = _15;
129+
StorageLive(_15);
130+
_15 = _14;
135131
goto -> bb4;
136132
}
137133

138134
bb4: {
139-
StorageLive(_18);
140135
StorageLive(_17);
141-
_17 = &mut _16;
142-
_18 = <std::slice::Iter<'_, T> as Iterator>::next(move _17) -> [return: bb5, unwind unreachable];
136+
StorageLive(_16);
137+
_16 = &mut _15;
138+
_17 = <std::slice::Iter<'_, T> as Iterator>::next(move _16) -> [return: bb5, unwind unreachable];
143139
}
144140

145141
bb5: {
146-
StorageDead(_17);
147-
_19 = discriminant(_18);
148-
switchInt(move _19) -> [0: bb6, 1: bb8, otherwise: bb10];
142+
StorageDead(_16);
143+
_18 = discriminant(_17);
144+
switchInt(move _18) -> [0: bb6, 1: bb8, otherwise: bb10];
149145
}
150146

151147
bb6: {
152-
StorageDead(_18);
153-
StorageDead(_16);
148+
StorageDead(_17);
149+
StorageDead(_15);
154150
drop(_2) -> [return: bb7, unwind unreachable];
155151
}
156152

@@ -159,18 +155,18 @@ fn forward_loop(_1: &[T], _2: impl Fn(&T)) -> () {
159155
}
160156

161157
bb8: {
162-
_20 = ((_18 as Some).0: &T);
158+
_19 = ((_17 as Some).0: &T);
159+
StorageLive(_20);
160+
_20 = &_2;
163161
StorageLive(_21);
164-
_21 = &_2;
165-
StorageLive(_22);
166-
_22 = (_20,);
167-
_23 = <impl Fn(&T) as Fn<(&T,)>>::call(move _21, move _22) -> [return: bb9, unwind unreachable];
162+
_21 = (_19,);
163+
_22 = <impl Fn(&T) as Fn<(&T,)>>::call(move _20, move _21) -> [return: bb9, unwind unreachable];
168164
}
169165

170166
bb9: {
171-
StorageDead(_22);
172167
StorageDead(_21);
173-
StorageDead(_18);
168+
StorageDead(_20);
169+
StorageDead(_17);
174170
goto -> bb4;
175171
}
176172

‎tests/mir-opt/pre-codegen/slice_iter.forward_loop.PreCodegen.after.panic-unwind.mir

Lines changed: 32 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,19 @@ fn forward_loop(_1: &[T], _2: impl Fn(&T)) -> () {
44
debug slice => _1;
55
debug f => _2;
66
let mut _0: ();
7+
let mut _14: std::slice::Iter<'_, T>;
78
let mut _15: std::slice::Iter<'_, T>;
8-
let mut _16: std::slice::Iter<'_, T>;
9-
let mut _17: &mut std::slice::Iter<'_, T>;
10-
let mut _18: std::option::Option<&T>;
11-
let mut _19: isize;
12-
let mut _21: &impl Fn(&T);
13-
let mut _22: (&T,);
14-
let _23: ();
9+
let mut _16: &mut std::slice::Iter<'_, T>;
10+
let mut _17: std::option::Option<&T>;
11+
let mut _18: isize;
12+
let mut _20: &impl Fn(&T);
13+
let mut _21: (&T,);
14+
let _22: ();
1515
scope 1 {
16-
debug iter => _16;
17-
let _20: &T;
16+
debug iter => _15;
17+
let _19: &T;
1818
scope 2 {
19-
debug x => _20;
19+
debug x => _19;
2020
}
2121
}
2222
scope 3 (inlined core::slice::<impl [T]>::iter) {
@@ -28,14 +28,13 @@ fn forward_loop(_1: &[T], _2: impl Fn(&T)) -> () {
2828
let mut _10: bool;
2929
let mut _11: *mut T;
3030
let mut _12: *mut T;
31-
let mut _14: *const T;
31+
let mut _13: *const T;
3232
scope 5 {
3333
debug len => _3;
3434
let _9: std::ptr::NonNull<T>;
3535
scope 6 {
3636
debug ptr => _9;
3737
scope 7 {
38-
let _13: *const T;
3938
scope 8 {
4039
debug end_or_len => _13;
4140
}
@@ -76,12 +75,13 @@ fn forward_loop(_1: &[T], _2: impl Fn(&T)) -> () {
7675
}
7776
}
7877
scope 19 (inlined <std::slice::Iter<'_, T> as IntoIterator>::into_iter) {
79-
debug self => _15;
78+
debug self => _14;
8079
}
8180

8281
bb0: {
8382
StorageLive(_3);
8483
StorageLive(_9);
84+
StorageLive(_13);
8585
StorageLive(_4);
8686
StorageLive(_8);
8787
_3 = Len((*_1));
@@ -97,7 +97,6 @@ fn forward_loop(_1: &[T], _2: impl Fn(&T)) -> () {
9797
StorageDead(_7);
9898
_9 = NonNull::<T> { pointer: _8 };
9999
StorageDead(_5);
100-
StorageLive(_13);
101100
StorageLive(_10);
102101
_10 = const _;
103102
switchInt(move _10) -> [0: bb1, otherwise: bb2];
@@ -121,36 +120,33 @@ fn forward_loop(_1: &[T], _2: impl Fn(&T)) -> () {
121120

122121
bb3: {
123122
StorageDead(_10);
124-
StorageLive(_14);
125-
_14 = _13;
126-
_15 = std::slice::Iter::<'_, T> { ptr: _9, end_or_len: move _14, _marker: const ZeroSized: PhantomData<&T> };
127-
StorageDead(_14);
128-
StorageDead(_13);
123+
_14 = std::slice::Iter::<'_, T> { ptr: _9, end_or_len: move _13, _marker: const ZeroSized: PhantomData<&T> };
129124
StorageDead(_8);
130125
StorageDead(_4);
126+
StorageDead(_13);
131127
StorageDead(_9);
132128
StorageDead(_3);
133-
StorageLive(_16);
134-
_16 = _15;
129+
StorageLive(_15);
130+
_15 = _14;
135131
goto -> bb4;
136132
}
137133

138134
bb4: {
139-
StorageLive(_18);
140135
StorageLive(_17);
141-
_17 = &mut _16;
142-
_18 = <std::slice::Iter<'_, T> as Iterator>::next(move _17) -> [return: bb5, unwind: bb11];
136+
StorageLive(_16);
137+
_16 = &mut _15;
138+
_17 = <std::slice::Iter<'_, T> as Iterator>::next(move _16) -> [return: bb5, unwind: bb11];
143139
}
144140

145141
bb5: {
146-
StorageDead(_17);
147-
_19 = discriminant(_18);
148-
switchInt(move _19) -> [0: bb6, 1: bb8, otherwise: bb10];
142+
StorageDead(_16);
143+
_18 = discriminant(_17);
144+
switchInt(move _18) -> [0: bb6, 1: bb8, otherwise: bb10];
149145
}
150146

151147
bb6: {
152-
StorageDead(_18);
153-
StorageDead(_16);
148+
StorageDead(_17);
149+
StorageDead(_15);
154150
drop(_2) -> [return: bb7, unwind continue];
155151
}
156152

@@ -159,18 +155,18 @@ fn forward_loop(_1: &[T], _2: impl Fn(&T)) -> () {
159155
}
160156

161157
bb8: {
162-
_20 = ((_18 as Some).0: &T);
158+
_19 = ((_17 as Some).0: &T);
159+
StorageLive(_20);
160+
_20 = &_2;
163161
StorageLive(_21);
164-
_21 = &_2;
165-
StorageLive(_22);
166-
_22 = (_20,);
167-
_23 = <impl Fn(&T) as Fn<(&T,)>>::call(move _21, move _22) -> [return: bb9, unwind: bb11];
162+
_21 = (_19,);
163+
_22 = <impl Fn(&T) as Fn<(&T,)>>::call(move _20, move _21) -> [return: bb9, unwind: bb11];
168164
}
169165

170166
bb9: {
171-
StorageDead(_22);
172167
StorageDead(_21);
173-
StorageDead(_18);
168+
StorageDead(_20);
169+
StorageDead(_17);
174170
goto -> bb4;
175171
}
176172

‎tests/mir-opt/pre-codegen/slice_iter.reverse_loop.PreCodegen.after.panic-abort.mir

Lines changed: 41 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -4,24 +4,24 @@ fn reverse_loop(_1: &[T], _2: impl Fn(&T)) -> () {
44
debug slice => _1;
55
debug f => _2;
66
let mut _0: ();
7-
let mut _15: std::slice::Iter<'_, T>;
7+
let mut _14: std::slice::Iter<'_, T>;
8+
let mut _15: std::iter::Rev<std::slice::Iter<'_, T>>;
89
let mut _16: std::iter::Rev<std::slice::Iter<'_, T>>;
9-
let mut _17: std::iter::Rev<std::slice::Iter<'_, T>>;
10-
let mut _18: &mut std::iter::Rev<std::slice::Iter<'_, T>>;
11-
let mut _20: std::option::Option<&T>;
12-
let mut _21: isize;
13-
let mut _23: &impl Fn(&T);
14-
let mut _24: (&T,);
15-
let _25: ();
10+
let mut _17: &mut std::iter::Rev<std::slice::Iter<'_, T>>;
11+
let mut _19: std::option::Option<&T>;
12+
let mut _20: isize;
13+
let mut _22: &impl Fn(&T);
14+
let mut _23: (&T,);
15+
let _24: ();
1616
scope 1 {
17-
debug iter => _17;
18-
let _22: &T;
17+
debug iter => _16;
18+
let _21: &T;
1919
scope 2 {
20-
debug x => _22;
20+
debug x => _21;
2121
}
2222
scope 22 (inlined <Rev<std::slice::Iter<'_, T>> as Iterator>::next) {
23-
debug self => _18;
24-
let mut _19: &mut std::slice::Iter<'_, T>;
23+
debug self => _17;
24+
let mut _18: &mut std::slice::Iter<'_, T>;
2525
}
2626
}
2727
scope 3 (inlined core::slice::<impl [T]>::iter) {
@@ -33,14 +33,13 @@ fn reverse_loop(_1: &[T], _2: impl Fn(&T)) -> () {
3333
let mut _10: bool;
3434
let mut _11: *mut T;
3535
let mut _12: *mut T;
36-
let mut _14: *const T;
36+
let mut _13: *const T;
3737
scope 5 {
3838
debug len => _3;
3939
let _9: std::ptr::NonNull<T>;
4040
scope 6 {
4141
debug ptr => _9;
4242
scope 7 {
43-
let _13: *const T;
4443
scope 8 {
4544
debug end_or_len => _13;
4645
}
@@ -81,19 +80,20 @@ fn reverse_loop(_1: &[T], _2: impl Fn(&T)) -> () {
8180
}
8281
}
8382
scope 19 (inlined <std::slice::Iter<'_, T> as Iterator>::rev) {
84-
debug self => _15;
83+
debug self => _14;
8584
scope 20 (inlined Rev::<std::slice::Iter<'_, T>>::new) {
86-
debug iter => _15;
85+
debug iter => _14;
8786
}
8887
}
8988
scope 21 (inlined <Rev<std::slice::Iter<'_, T>> as IntoIterator>::into_iter) {
90-
debug self => _16;
89+
debug self => _15;
9190
}
9291

9392
bb0: {
94-
StorageLive(_15);
93+
StorageLive(_14);
9594
StorageLive(_3);
9695
StorageLive(_9);
96+
StorageLive(_13);
9797
StorageLive(_4);
9898
StorageLive(_8);
9999
_3 = Len((*_1));
@@ -109,7 +109,6 @@ fn reverse_loop(_1: &[T], _2: impl Fn(&T)) -> () {
109109
StorageDead(_7);
110110
_9 = NonNull::<T> { pointer: _8 };
111111
StorageDead(_5);
112-
StorageLive(_13);
113112
StorageLive(_10);
114113
_10 = const _;
115114
switchInt(move _10) -> [0: bb1, otherwise: bb2];
@@ -133,39 +132,36 @@ fn reverse_loop(_1: &[T], _2: impl Fn(&T)) -> () {
133132

134133
bb3: {
135134
StorageDead(_10);
136-
StorageLive(_14);
137-
_14 = _13;
138-
_15 = std::slice::Iter::<'_, T> { ptr: _9, end_or_len: move _14, _marker: const ZeroSized: PhantomData<&T> };
139-
StorageDead(_14);
140-
StorageDead(_13);
135+
_14 = std::slice::Iter::<'_, T> { ptr: _9, end_or_len: move _13, _marker: const ZeroSized: PhantomData<&T> };
141136
StorageDead(_8);
142137
StorageDead(_4);
138+
StorageDead(_13);
143139
StorageDead(_9);
144140
StorageDead(_3);
145-
_16 = Rev::<std::slice::Iter<'_, T>> { iter: _15 };
146-
StorageDead(_15);
147-
StorageLive(_17);
148-
_17 = _16;
141+
_15 = Rev::<std::slice::Iter<'_, T>> { iter: _14 };
142+
StorageDead(_14);
143+
StorageLive(_16);
144+
_16 = _15;
149145
goto -> bb4;
150146
}
151147

152148
bb4: {
153-
StorageLive(_20);
154-
_18 = &mut _17;
155149
StorageLive(_19);
156-
_19 = &mut (_17.0: std::slice::Iter<'_, T>);
157-
_20 = <std::slice::Iter<'_, T> as DoubleEndedIterator>::next_back(move _19) -> [return: bb5, unwind unreachable];
150+
_17 = &mut _16;
151+
StorageLive(_18);
152+
_18 = &mut (_16.0: std::slice::Iter<'_, T>);
153+
_19 = <std::slice::Iter<'_, T> as DoubleEndedIterator>::next_back(move _18) -> [return: bb5, unwind unreachable];
158154
}
159155

160156
bb5: {
161-
StorageDead(_19);
162-
_21 = discriminant(_20);
163-
switchInt(move _21) -> [0: bb6, 1: bb8, otherwise: bb10];
157+
StorageDead(_18);
158+
_20 = discriminant(_19);
159+
switchInt(move _20) -> [0: bb6, 1: bb8, otherwise: bb10];
164160
}
165161

166162
bb6: {
167-
StorageDead(_20);
168-
StorageDead(_17);
163+
StorageDead(_19);
164+
StorageDead(_16);
169165
drop(_2) -> [return: bb7, unwind unreachable];
170166
}
171167

@@ -174,18 +170,18 @@ fn reverse_loop(_1: &[T], _2: impl Fn(&T)) -> () {
174170
}
175171

176172
bb8: {
177-
_22 = ((_20 as Some).0: &T);
173+
_21 = ((_19 as Some).0: &T);
174+
StorageLive(_22);
175+
_22 = &_2;
178176
StorageLive(_23);
179-
_23 = &_2;
180-
StorageLive(_24);
181-
_24 = (_22,);
182-
_25 = <impl Fn(&T) as Fn<(&T,)>>::call(move _23, move _24) -> [return: bb9, unwind unreachable];
177+
_23 = (_21,);
178+
_24 = <impl Fn(&T) as Fn<(&T,)>>::call(move _22, move _23) -> [return: bb9, unwind unreachable];
183179
}
184180

185181
bb9: {
186-
StorageDead(_24);
187182
StorageDead(_23);
188-
StorageDead(_20);
183+
StorageDead(_22);
184+
StorageDead(_19);
189185
goto -> bb4;
190186
}
191187

‎tests/mir-opt/pre-codegen/slice_iter.reverse_loop.PreCodegen.after.panic-unwind.mir

Lines changed: 41 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -4,24 +4,24 @@ fn reverse_loop(_1: &[T], _2: impl Fn(&T)) -> () {
44
debug slice => _1;
55
debug f => _2;
66
let mut _0: ();
7-
let mut _15: std::slice::Iter<'_, T>;
7+
let mut _14: std::slice::Iter<'_, T>;
8+
let mut _15: std::iter::Rev<std::slice::Iter<'_, T>>;
89
let mut _16: std::iter::Rev<std::slice::Iter<'_, T>>;
9-
let mut _17: std::iter::Rev<std::slice::Iter<'_, T>>;
10-
let mut _18: &mut std::iter::Rev<std::slice::Iter<'_, T>>;
11-
let mut _20: std::option::Option<&T>;
12-
let mut _21: isize;
13-
let mut _23: &impl Fn(&T);
14-
let mut _24: (&T,);
15-
let _25: ();
10+
let mut _17: &mut std::iter::Rev<std::slice::Iter<'_, T>>;
11+
let mut _19: std::option::Option<&T>;
12+
let mut _20: isize;
13+
let mut _22: &impl Fn(&T);
14+
let mut _23: (&T,);
15+
let _24: ();
1616
scope 1 {
17-
debug iter => _17;
18-
let _22: &T;
17+
debug iter => _16;
18+
let _21: &T;
1919
scope 2 {
20-
debug x => _22;
20+
debug x => _21;
2121
}
2222
scope 22 (inlined <Rev<std::slice::Iter<'_, T>> as Iterator>::next) {
23-
debug self => _18;
24-
let mut _19: &mut std::slice::Iter<'_, T>;
23+
debug self => _17;
24+
let mut _18: &mut std::slice::Iter<'_, T>;
2525
}
2626
}
2727
scope 3 (inlined core::slice::<impl [T]>::iter) {
@@ -33,14 +33,13 @@ fn reverse_loop(_1: &[T], _2: impl Fn(&T)) -> () {
3333
let mut _10: bool;
3434
let mut _11: *mut T;
3535
let mut _12: *mut T;
36-
let mut _14: *const T;
36+
let mut _13: *const T;
3737
scope 5 {
3838
debug len => _3;
3939
let _9: std::ptr::NonNull<T>;
4040
scope 6 {
4141
debug ptr => _9;
4242
scope 7 {
43-
let _13: *const T;
4443
scope 8 {
4544
debug end_or_len => _13;
4645
}
@@ -81,19 +80,20 @@ fn reverse_loop(_1: &[T], _2: impl Fn(&T)) -> () {
8180
}
8281
}
8382
scope 19 (inlined <std::slice::Iter<'_, T> as Iterator>::rev) {
84-
debug self => _15;
83+
debug self => _14;
8584
scope 20 (inlined Rev::<std::slice::Iter<'_, T>>::new) {
86-
debug iter => _15;
85+
debug iter => _14;
8786
}
8887
}
8988
scope 21 (inlined <Rev<std::slice::Iter<'_, T>> as IntoIterator>::into_iter) {
90-
debug self => _16;
89+
debug self => _15;
9190
}
9291

9392
bb0: {
94-
StorageLive(_15);
93+
StorageLive(_14);
9594
StorageLive(_3);
9695
StorageLive(_9);
96+
StorageLive(_13);
9797
StorageLive(_4);
9898
StorageLive(_8);
9999
_3 = Len((*_1));
@@ -109,7 +109,6 @@ fn reverse_loop(_1: &[T], _2: impl Fn(&T)) -> () {
109109
StorageDead(_7);
110110
_9 = NonNull::<T> { pointer: _8 };
111111
StorageDead(_5);
112-
StorageLive(_13);
113112
StorageLive(_10);
114113
_10 = const _;
115114
switchInt(move _10) -> [0: bb1, otherwise: bb2];
@@ -133,39 +132,36 @@ fn reverse_loop(_1: &[T], _2: impl Fn(&T)) -> () {
133132

134133
bb3: {
135134
StorageDead(_10);
136-
StorageLive(_14);
137-
_14 = _13;
138-
_15 = std::slice::Iter::<'_, T> { ptr: _9, end_or_len: move _14, _marker: const ZeroSized: PhantomData<&T> };
139-
StorageDead(_14);
140-
StorageDead(_13);
135+
_14 = std::slice::Iter::<'_, T> { ptr: _9, end_or_len: move _13, _marker: const ZeroSized: PhantomData<&T> };
141136
StorageDead(_8);
142137
StorageDead(_4);
138+
StorageDead(_13);
143139
StorageDead(_9);
144140
StorageDead(_3);
145-
_16 = Rev::<std::slice::Iter<'_, T>> { iter: _15 };
146-
StorageDead(_15);
147-
StorageLive(_17);
148-
_17 = _16;
141+
_15 = Rev::<std::slice::Iter<'_, T>> { iter: _14 };
142+
StorageDead(_14);
143+
StorageLive(_16);
144+
_16 = _15;
149145
goto -> bb4;
150146
}
151147

152148
bb4: {
153-
StorageLive(_20);
154-
_18 = &mut _17;
155149
StorageLive(_19);
156-
_19 = &mut (_17.0: std::slice::Iter<'_, T>);
157-
_20 = <std::slice::Iter<'_, T> as DoubleEndedIterator>::next_back(move _19) -> [return: bb5, unwind: bb11];
150+
_17 = &mut _16;
151+
StorageLive(_18);
152+
_18 = &mut (_16.0: std::slice::Iter<'_, T>);
153+
_19 = <std::slice::Iter<'_, T> as DoubleEndedIterator>::next_back(move _18) -> [return: bb5, unwind: bb11];
158154
}
159155

160156
bb5: {
161-
StorageDead(_19);
162-
_21 = discriminant(_20);
163-
switchInt(move _21) -> [0: bb6, 1: bb8, otherwise: bb10];
157+
StorageDead(_18);
158+
_20 = discriminant(_19);
159+
switchInt(move _20) -> [0: bb6, 1: bb8, otherwise: bb10];
164160
}
165161

166162
bb6: {
167-
StorageDead(_20);
168-
StorageDead(_17);
163+
StorageDead(_19);
164+
StorageDead(_16);
169165
drop(_2) -> [return: bb7, unwind continue];
170166
}
171167

@@ -174,18 +170,18 @@ fn reverse_loop(_1: &[T], _2: impl Fn(&T)) -> () {
174170
}
175171

176172
bb8: {
177-
_22 = ((_20 as Some).0: &T);
173+
_21 = ((_19 as Some).0: &T);
174+
StorageLive(_22);
175+
_22 = &_2;
178176
StorageLive(_23);
179-
_23 = &_2;
180-
StorageLive(_24);
181-
_24 = (_22,);
182-
_25 = <impl Fn(&T) as Fn<(&T,)>>::call(move _23, move _24) -> [return: bb9, unwind: bb11];
177+
_23 = (_21,);
178+
_24 = <impl Fn(&T) as Fn<(&T,)>>::call(move _22, move _23) -> [return: bb9, unwind: bb11];
183179
}
184180

185181
bb9: {
186-
StorageDead(_24);
187182
StorageDead(_23);
188-
StorageDead(_20);
183+
StorageDead(_22);
184+
StorageDead(_19);
189185
goto -> bb4;
190186
}
191187

0 commit comments

Comments
 (0)
Please sign in to comment.