Enable by default.

This commit is contained in:
Camille GILLOT 2023-03-11 15:27:44 +00:00
parent 341e0f78d1
commit b74a144a5f
22 changed files with 576 additions and 763 deletions

View File

@ -71,7 +71,7 @@ pub struct ReferencePropagation;
impl<'tcx> MirPass<'tcx> for ReferencePropagation {
fn is_enabled(&self, sess: &rustc_session::Session) -> bool {
sess.mir_opt_level() >= 4
sess.mir_opt_level() >= 2
}
#[instrument(level = "trace", skip(self, tcx, body))]

View File

@ -7,8 +7,7 @@
let mut _2: std::option::Option<T>;
+ scope 1 (inlined #[track_caller] Option::<T>::unwrap_unchecked) {
+ debug self => _2;
+ let mut _3: &std::option::Option<T>;
+ let mut _4: isize;
+ let mut _3: isize;
+ scope 2 {
+ debug val => _0;
+ }
@ -21,7 +20,7 @@
+ }
+ }
+ scope 4 (inlined Option::<T>::is_some) {
+ debug self => _3;
+ debug self => &_2;
+ }
+ }
@ -29,9 +28,8 @@
StorageLive(_2);
_2 = move _1;
- _0 = Option::<T>::unwrap_unchecked(move _2) -> [return: bb1, unwind unreachable];
+ StorageLive(_3);
+ _4 = discriminant(_2);
+ switchInt(move _4) -> [1: bb2, otherwise: bb1];
+ _3 = discriminant(_2);
+ switchInt(move _3) -> [1: bb2, otherwise: bb1];
}
bb1: {
@ -40,7 +38,6 @@
+
+ bb2: {
+ _0 = move ((_2 as Some).0: T);
+ StorageDead(_3);
StorageDead(_2);
return;
}

View File

@ -7,8 +7,7 @@
let mut _2: std::option::Option<T>;
+ scope 1 (inlined #[track_caller] Option::<T>::unwrap_unchecked) {
+ debug self => _2;
+ let mut _3: &std::option::Option<T>;
+ let mut _4: isize;
+ let mut _3: isize;
+ scope 2 {
+ debug val => _0;
+ }
@ -21,7 +20,7 @@
+ }
+ }
+ scope 4 (inlined Option::<T>::is_some) {
+ debug self => _3;
+ debug self => &_2;
+ }
+ }
@ -29,9 +28,8 @@
StorageLive(_2);
_2 = move _1;
- _0 = Option::<T>::unwrap_unchecked(move _2) -> [return: bb1, unwind: bb2];
+ StorageLive(_3);
+ _4 = discriminant(_2);
+ switchInt(move _4) -> [1: bb2, otherwise: bb1];
+ _3 = discriminant(_2);
+ switchInt(move _3) -> [1: bb2, otherwise: bb1];
}
bb1: {
@ -44,7 +42,6 @@
- resume;
+ bb2: {
+ _0 = move ((_2 as Some).0: T);
+ StorageDead(_3);
+ StorageDead(_2);
+ return;
}

View File

@ -6,7 +6,6 @@ fn unwrap_unchecked(_1: Option<T>) -> T {
scope 1 (inlined #[track_caller] Option::<T>::unwrap_unchecked) {
debug self => _1;
let mut _2: isize;
let mut _3: &std::option::Option<T>;
scope 2 {
debug val => _0;
}
@ -19,19 +18,17 @@ fn unwrap_unchecked(_1: Option<T>) -> T {
}
}
scope 4 (inlined Option::<T>::is_some) {
debug self => _3;
debug self => &_1;
}
}
bb0: {
StorageLive(_3);
_2 = discriminant(_1);
switchInt(move _2) -> [1: bb1, otherwise: bb2];
}
bb1: {
_0 = move ((_1 as Some).0: T);
StorageDead(_3);
return;
}

View File

@ -6,7 +6,6 @@ fn unwrap_unchecked(_1: Option<T>) -> T {
scope 1 (inlined #[track_caller] Option::<T>::unwrap_unchecked) {
debug self => _1;
let mut _2: isize;
let mut _3: &std::option::Option<T>;
scope 2 {
debug val => _0;
}
@ -19,19 +18,17 @@ fn unwrap_unchecked(_1: Option<T>) -> T {
}
}
scope 4 (inlined Option::<T>::is_some) {
debug self => _3;
debug self => &_1;
}
}
bb0: {
StorageLive(_3);
_2 = discriminant(_1);
switchInt(move _2) -> [1: bb1, otherwise: bb2];
}
bb1: {
_0 = move ((_1 as Some).0: T);
StorageDead(_3);
return;
}

View File

@ -3,57 +3,53 @@
fn num_to_digit(_1: char) -> u32 {
debug num => _1;
let mut _0: u32;
let mut _5: std::option::Option<u32>;
let mut _4: std::option::Option<u32>;
scope 1 (inlined char::methods::<impl char>::is_digit) {
debug self => _1;
debug radix => const 8_u32;
let _2: std::option::Option<u32>;
let mut _3: &std::option::Option<u32>;
scope 2 (inlined Option::<u32>::is_some) {
debug self => _3;
let mut _4: isize;
debug self => &_2;
let mut _3: isize;
}
}
scope 3 (inlined #[track_caller] Option::<u32>::unwrap) {
debug self => _5;
let mut _6: isize;
let mut _7: !;
debug self => _4;
let mut _5: isize;
let mut _6: !;
scope 4 {
debug val => _0;
}
}
bb0: {
StorageLive(_3);
StorageLive(_2);
_2 = char::methods::<impl char>::to_digit(_1, const 8_u32) -> [return: bb1, unwind unreachable];
}
bb1: {
_3 = &_2;
_4 = discriminant((*_3));
StorageDead(_3);
_3 = discriminant(_2);
StorageDead(_2);
switchInt(move _4) -> [1: bb2, otherwise: bb7];
switchInt(move _3) -> [1: bb2, otherwise: bb7];
}
bb2: {
StorageLive(_5);
_5 = char::methods::<impl char>::to_digit(_1, const 8_u32) -> [return: bb3, unwind unreachable];
StorageLive(_4);
_4 = char::methods::<impl char>::to_digit(_1, const 8_u32) -> [return: bb3, unwind unreachable];
}
bb3: {
_6 = discriminant(_5);
switchInt(move _6) -> [0: bb4, 1: bb5, otherwise: bb6];
_5 = discriminant(_4);
switchInt(move _5) -> [0: bb4, 1: bb5, otherwise: bb6];
}
bb4: {
_7 = core::panicking::panic(const "called `Option::unwrap()` on a `None` value") -> unwind unreachable;
_6 = core::panicking::panic(const "called `Option::unwrap()` on a `None` value") -> unwind unreachable;
}
bb5: {
_0 = move ((_5 as Some).0: u32);
StorageDead(_5);
_0 = move ((_4 as Some).0: u32);
StorageDead(_4);
goto -> bb8;
}

View File

@ -3,57 +3,53 @@
fn num_to_digit(_1: char) -> u32 {
debug num => _1;
let mut _0: u32;
let mut _5: std::option::Option<u32>;
let mut _4: std::option::Option<u32>;
scope 1 (inlined char::methods::<impl char>::is_digit) {
debug self => _1;
debug radix => const 8_u32;
let _2: std::option::Option<u32>;
let mut _3: &std::option::Option<u32>;
scope 2 (inlined Option::<u32>::is_some) {
debug self => _3;
let mut _4: isize;
debug self => &_2;
let mut _3: isize;
}
}
scope 3 (inlined #[track_caller] Option::<u32>::unwrap) {
debug self => _5;
let mut _6: isize;
let mut _7: !;
debug self => _4;
let mut _5: isize;
let mut _6: !;
scope 4 {
debug val => _0;
}
}
bb0: {
StorageLive(_3);
StorageLive(_2);
_2 = char::methods::<impl char>::to_digit(_1, const 8_u32) -> [return: bb1, unwind continue];
}
bb1: {
_3 = &_2;
_4 = discriminant((*_3));
StorageDead(_3);
_3 = discriminant(_2);
StorageDead(_2);
switchInt(move _4) -> [1: bb2, otherwise: bb7];
switchInt(move _3) -> [1: bb2, otherwise: bb7];
}
bb2: {
StorageLive(_5);
_5 = char::methods::<impl char>::to_digit(_1, const 8_u32) -> [return: bb3, unwind continue];
StorageLive(_4);
_4 = char::methods::<impl char>::to_digit(_1, const 8_u32) -> [return: bb3, unwind continue];
}
bb3: {
_6 = discriminant(_5);
switchInt(move _6) -> [0: bb4, 1: bb5, otherwise: bb6];
_5 = discriminant(_4);
switchInt(move _5) -> [0: bb4, 1: bb5, otherwise: bb6];
}
bb4: {
_7 = core::panicking::panic(const "called `Option::unwrap()` on a `None` value") -> unwind continue;
_6 = core::panicking::panic(const "called `Option::unwrap()` on a `None` value") -> unwind continue;
}
bb5: {
_0 = move ((_5 as Some).0: u32);
StorageDead(_5);
_0 = move ((_4 as Some).0: u32);
StorageDead(_4);
goto -> bb8;
}

View File

@ -8,42 +8,38 @@ fn step_forward(_1: u32, _2: usize) -> u32 {
debug start => _1;
debug n => _2;
let _3: std::option::Option<u32>;
let mut _4: &std::option::Option<u32>;
let mut _7: bool;
let mut _8: u32;
let mut _6: bool;
let mut _7: u32;
scope 2 {
}
scope 3 (inlined Option::<u32>::is_none) {
debug self => _4;
let mut _6: bool;
debug self => &_3;
let mut _5: bool;
scope 4 (inlined Option::<u32>::is_some) {
debug self => _4;
let mut _5: isize;
debug self => &_3;
let mut _4: isize;
}
}
scope 5 (inlined core::num::<impl u32>::wrapping_add) {
debug self => _1;
debug rhs => _8;
debug rhs => _7;
}
}
bb0: {
StorageLive(_7);
StorageLive(_4);
StorageLive(_6);
StorageLive(_3);
_3 = <u32 as Step>::forward_checked(_1, _2) -> [return: bb1, unwind continue];
}
bb1: {
_4 = &_3;
StorageLive(_6);
_5 = discriminant((*_4));
_6 = Eq(_5, const 1_isize);
_7 = Not(move _6);
StorageDead(_6);
StorageLive(_5);
_4 = discriminant(_3);
_5 = Eq(_4, const 1_isize);
_6 = Not(move _5);
StorageDead(_5);
StorageDead(_3);
StorageDead(_4);
switchInt(move _7) -> [0: bb3, otherwise: bb2];
switchInt(move _6) -> [0: bb3, otherwise: bb2];
}
bb2: {
@ -51,11 +47,11 @@ fn step_forward(_1: u32, _2: usize) -> u32 {
}
bb3: {
StorageDead(_6);
StorageLive(_7);
_7 = _2 as u32 (IntToInt);
_0 = Add(_1, _7);
StorageDead(_7);
StorageLive(_8);
_8 = _2 as u32 (IntToInt);
_0 = Add(_1, _8);
StorageDead(_8);
return;
}
}

View File

@ -7,20 +7,19 @@ fn filter_mapped(_1: impl Iterator<Item = T>, _2: impl Fn(T) -> Option<U>) -> ()
let mut _3: std::iter::FilterMap<impl Iterator<Item = T>, impl Fn(T) -> Option<U>>;
let mut _4: std::iter::FilterMap<impl Iterator<Item = T>, impl Fn(T) -> Option<U>>;
let mut _5: std::iter::FilterMap<impl Iterator<Item = T>, impl Fn(T) -> Option<U>>;
let mut _6: &mut std::iter::FilterMap<impl Iterator<Item = T>, impl Fn(T) -> Option<U>>;
let mut _9: std::option::Option<U>;
let mut _10: isize;
let _12: ();
let mut _8: std::option::Option<U>;
let mut _9: isize;
let _11: ();
scope 1 {
debug iter => _5;
let _11: U;
let _10: U;
scope 2 {
debug x => _11;
debug x => _10;
}
scope 4 (inlined <FilterMap<impl Iterator<Item = T>, impl Fn(T) -> Option<U>> as Iterator>::next) {
debug self => _6;
let mut _7: &mut impl Iterator<Item = T>;
let mut _8: &mut impl Fn(T) -> Option<U>;
debug self => &_5;
let mut _6: &mut impl Iterator<Item = T>;
let mut _7: &mut impl Fn(T) -> Option<U>;
}
}
scope 3 (inlined <FilterMap<impl Iterator<Item = T>, impl Fn(T) -> Option<U>> as IntoIterator>::into_iter) {
@ -42,24 +41,23 @@ fn filter_mapped(_1: impl Iterator<Item = T>, _2: impl Fn(T) -> Option<U>) -> ()
}
bb2: {
StorageLive(_9);
_6 = &mut _5;
StorageLive(_7);
_7 = &mut ((*_6).0: impl Iterator<Item = T>);
StorageLive(_8);
_8 = &mut ((*_6).1: impl Fn(T) -> Option<U>);
_9 = <impl Iterator<Item = T> as Iterator>::find_map::<U, &mut impl Fn(T) -> Option<U>>(move _7, move _8) -> [return: bb3, unwind: bb9];
StorageLive(_6);
_6 = &mut (_5.0: impl Iterator<Item = T>);
StorageLive(_7);
_7 = &mut (_5.1: impl Fn(T) -> Option<U>);
_8 = <impl Iterator<Item = T> as Iterator>::find_map::<U, &mut impl Fn(T) -> Option<U>>(move _6, move _7) -> [return: bb3, unwind: bb9];
}
bb3: {
StorageDead(_8);
StorageDead(_7);
_10 = discriminant(_9);
switchInt(move _10) -> [0: bb4, 1: bb6, otherwise: bb8];
StorageDead(_6);
_9 = discriminant(_8);
switchInt(move _9) -> [0: bb4, 1: bb6, otherwise: bb8];
}
bb4: {
StorageDead(_9);
StorageDead(_8);
drop(_5) -> [return: bb5, unwind continue];
}
@ -70,12 +68,12 @@ fn filter_mapped(_1: impl Iterator<Item = T>, _2: impl Fn(T) -> Option<U>) -> ()
}
bb6: {
_11 = move ((_9 as Some).0: U);
_12 = opaque::<U>(move _11) -> [return: bb7, unwind: bb9];
_10 = move ((_8 as Some).0: U);
_11 = opaque::<U>(move _10) -> [return: bb7, unwind: bb9];
}
bb7: {
StorageDead(_9);
StorageDead(_8);
goto -> bb2;
}

View File

@ -6,35 +6,33 @@ fn int_range(_1: usize, _2: usize) -> () {
let mut _0: ();
let mut _3: std::ops::Range<usize>;
let mut _4: std::ops::Range<usize>;
let mut _5: &mut std::ops::Range<usize>;
let mut _11: std::option::Option<usize>;
let mut _14: isize;
let _16: ();
let mut _8: std::option::Option<usize>;
let mut _11: isize;
let _13: ();
let mut _14: &mut std::ops::Range<usize>;
scope 1 {
debug iter => _4;
let _15: usize;
let _12: usize;
scope 2 {
debug i => _15;
debug i => _12;
}
scope 4 (inlined iter::range::<impl Iterator for std::ops::Range<usize>>::next) {
debug self => _5;
debug self => &_4;
scope 5 (inlined <std::ops::Range<usize> as iter::range::RangeIteratorImpl>::spec_next) {
debug self => _5;
let mut _6: &usize;
let mut _7: &usize;
let mut _10: bool;
let _12: usize;
let mut _13: usize;
debug self => &_4;
let mut _7: bool;
let _9: usize;
let mut _10: usize;
scope 6 {
debug old => _12;
debug old => _9;
scope 7 {
}
}
scope 8 (inlined cmp::impls::<impl PartialOrd for usize>::lt) {
debug self => _6;
debug other => _7;
let mut _8: usize;
let mut _9: usize;
debug self => &((*_14).0: usize);
debug other => &((*_14).1: usize);
let mut _5: usize;
let mut _6: usize;
}
}
}
@ -51,64 +49,57 @@ fn int_range(_1: usize, _2: usize) -> () {
}
bb1: {
StorageLive(_11);
_5 = &mut _4;
StorageLive(_12);
StorageLive(_10);
StorageLive(_6);
_6 = &((*_5).0: usize);
StorageLive(_7);
_7 = &((*_5).1: usize);
StorageLive(_8);
_8 = (*_6);
StorageLive(_9);
_9 = (*_7);
_10 = Lt(move _8, move _9);
StorageDead(_9);
StorageDead(_8);
StorageDead(_7);
StorageLive(_7);
StorageLive(_5);
_5 = (_4.0: usize);
StorageLive(_6);
_6 = (_4.1: usize);
_7 = Lt(move _5, move _6);
StorageDead(_6);
switchInt(move _10) -> [0: bb2, otherwise: bb3];
StorageDead(_5);
switchInt(move _7) -> [0: bb2, otherwise: bb3];
}
bb2: {
_11 = Option::<usize>::None;
_8 = Option::<usize>::None;
goto -> bb5;
}
bb3: {
_12 = ((*_5).0: usize);
StorageLive(_13);
_13 = <usize as Step>::forward_unchecked(_12, const 1_usize) -> [return: bb4, unwind continue];
_9 = (_4.0: usize);
StorageLive(_10);
_10 = <usize as Step>::forward_unchecked(_9, const 1_usize) -> [return: bb4, unwind continue];
}
bb4: {
((*_5).0: usize) = move _13;
StorageDead(_13);
_11 = Option::<usize>::Some(_12);
(_4.0: usize) = move _10;
StorageDead(_10);
_8 = Option::<usize>::Some(_9);
goto -> bb5;
}
bb5: {
StorageDead(_10);
StorageDead(_12);
_14 = discriminant(_11);
switchInt(move _14) -> [0: bb6, 1: bb7, otherwise: bb9];
StorageDead(_7);
StorageDead(_9);
_11 = discriminant(_8);
switchInt(move _11) -> [0: bb6, 1: bb7, otherwise: bb9];
}
bb6: {
StorageDead(_11);
StorageDead(_8);
StorageDead(_4);
return;
}
bb7: {
_15 = ((_11 as Some).0: usize);
_16 = opaque::<usize>(_15) -> [return: bb8, unwind continue];
_12 = ((_8 as Some).0: usize);
_13 = opaque::<usize>(_12) -> [return: bb8, unwind continue];
}
bb8: {
StorageDead(_11);
StorageDead(_8);
goto -> bb1;
}

View File

@ -7,26 +7,24 @@ fn mem_replace(_1: &mut u32, _2: u32) -> u32 {
scope 1 (inlined std::mem::replace::<u32>) {
debug dest => _1;
debug src => _2;
let mut _3: *const u32;
let mut _4: *mut u32;
scope 2 {
scope 3 {
debug result => _0;
scope 7 (inlined std::ptr::write::<u32>) {
debug dst => _4;
debug dst => _1;
debug src => _2;
scope 8 {
scope 9 (inlined std::ptr::write::runtime::<u32>) {
debug dst => _4;
debug dst => _1;
}
}
}
}
scope 4 (inlined std::ptr::read::<u32>) {
debug src => _3;
debug src => _1;
scope 5 {
scope 6 (inlined std::ptr::read::runtime::<u32>) {
debug src => _3;
debug src => _1;
}
}
}
@ -34,14 +32,8 @@ fn mem_replace(_1: &mut u32, _2: u32) -> u32 {
}
bb0: {
StorageLive(_3);
_3 = &raw const (*_1);
_0 = (*_3);
StorageDead(_3);
StorageLive(_4);
_4 = &raw mut (*_1);
(*_4) = _2;
StorageDead(_4);
_0 = (*_1);
(*_1) = _2;
return;
}
}

View File

@ -7,37 +7,35 @@ fn forward_loop(_1: u32, _2: u32, _3: impl Fn(u32)) -> () {
let mut _0: ();
let mut _4: std::ops::Range<u32>;
let mut _5: std::ops::Range<u32>;
let mut _6: &mut std::ops::Range<u32>;
let mut _12: std::option::Option<u32>;
let mut _15: isize;
let mut _17: &impl Fn(u32);
let mut _18: (u32,);
let _19: ();
let mut _9: std::option::Option<u32>;
let mut _12: isize;
let mut _14: &impl Fn(u32);
let mut _15: (u32,);
let _16: ();
let mut _17: &mut std::ops::Range<u32>;
scope 1 {
debug iter => _5;
let _16: u32;
let _13: u32;
scope 2 {
debug x => _16;
debug x => _13;
}
scope 4 (inlined iter::range::<impl Iterator for std::ops::Range<u32>>::next) {
debug self => _6;
debug self => &_5;
scope 5 (inlined <std::ops::Range<u32> as iter::range::RangeIteratorImpl>::spec_next) {
debug self => _6;
let mut _7: &u32;
let mut _8: &u32;
let mut _11: bool;
let _13: u32;
let mut _14: u32;
debug self => &_5;
let mut _8: bool;
let _10: u32;
let mut _11: u32;
scope 6 {
debug old => _13;
debug old => _10;
scope 7 {
}
}
scope 8 (inlined cmp::impls::<impl PartialOrd for u32>::lt) {
debug self => _7;
debug other => _8;
let mut _9: u32;
let mut _10: u32;
debug self => &((*_17).0: u32);
debug other => &((*_17).1: u32);
let mut _6: u32;
let mut _7: u32;
}
}
}
@ -54,53 +52,46 @@ fn forward_loop(_1: u32, _2: u32, _3: impl Fn(u32)) -> () {
}
bb1: {
StorageLive(_12);
_6 = &mut _5;
StorageLive(_13);
StorageLive(_11);
StorageLive(_7);
_7 = &((*_6).0: u32);
StorageLive(_8);
_8 = &((*_6).1: u32);
StorageLive(_9);
_9 = (*_7);
StorageLive(_10);
_10 = (*_8);
_11 = Lt(move _9, move _10);
StorageDead(_10);
StorageDead(_9);
StorageDead(_8);
StorageLive(_8);
StorageLive(_6);
_6 = (_5.0: u32);
StorageLive(_7);
_7 = (_5.1: u32);
_8 = Lt(move _6, move _7);
StorageDead(_7);
switchInt(move _11) -> [0: bb2, otherwise: bb3];
StorageDead(_6);
switchInt(move _8) -> [0: bb2, otherwise: bb3];
}
bb2: {
_12 = Option::<u32>::None;
_9 = Option::<u32>::None;
goto -> bb5;
}
bb3: {
_13 = ((*_6).0: u32);
StorageLive(_14);
_14 = <u32 as Step>::forward_unchecked(_13, const 1_usize) -> [return: bb4, unwind unreachable];
_10 = (_5.0: u32);
StorageLive(_11);
_11 = <u32 as Step>::forward_unchecked(_10, const 1_usize) -> [return: bb4, unwind unreachable];
}
bb4: {
((*_6).0: u32) = move _14;
StorageDead(_14);
_12 = Option::<u32>::Some(_13);
(_5.0: u32) = move _11;
StorageDead(_11);
_9 = Option::<u32>::Some(_10);
goto -> bb5;
}
bb5: {
StorageDead(_11);
StorageDead(_13);
_15 = discriminant(_12);
switchInt(move _15) -> [0: bb6, 1: bb8, otherwise: bb10];
StorageDead(_8);
StorageDead(_10);
_12 = discriminant(_9);
switchInt(move _12) -> [0: bb6, 1: bb8, otherwise: bb10];
}
bb6: {
StorageDead(_12);
StorageDead(_9);
StorageDead(_5);
drop(_3) -> [return: bb7, unwind unreachable];
}
@ -110,18 +101,18 @@ fn forward_loop(_1: u32, _2: u32, _3: impl Fn(u32)) -> () {
}
bb8: {
_16 = ((_12 as Some).0: u32);
StorageLive(_17);
_17 = &_3;
StorageLive(_18);
_18 = (_16,);
_19 = <impl Fn(u32) as Fn<(u32,)>>::call(move _17, move _18) -> [return: bb9, unwind unreachable];
_13 = ((_9 as Some).0: u32);
StorageLive(_14);
_14 = &_3;
StorageLive(_15);
_15 = (_13,);
_16 = <impl Fn(u32) as Fn<(u32,)>>::call(move _14, move _15) -> [return: bb9, unwind unreachable];
}
bb9: {
StorageDead(_18);
StorageDead(_17);
StorageDead(_12);
StorageDead(_15);
StorageDead(_14);
StorageDead(_9);
goto -> bb1;
}

View File

@ -7,37 +7,35 @@ fn forward_loop(_1: u32, _2: u32, _3: impl Fn(u32)) -> () {
let mut _0: ();
let mut _4: std::ops::Range<u32>;
let mut _5: std::ops::Range<u32>;
let mut _6: &mut std::ops::Range<u32>;
let mut _12: std::option::Option<u32>;
let mut _15: isize;
let mut _17: &impl Fn(u32);
let mut _18: (u32,);
let _19: ();
let mut _9: std::option::Option<u32>;
let mut _12: isize;
let mut _14: &impl Fn(u32);
let mut _15: (u32,);
let _16: ();
let mut _17: &mut std::ops::Range<u32>;
scope 1 {
debug iter => _5;
let _16: u32;
let _13: u32;
scope 2 {
debug x => _16;
debug x => _13;
}
scope 4 (inlined iter::range::<impl Iterator for std::ops::Range<u32>>::next) {
debug self => _6;
debug self => &_5;
scope 5 (inlined <std::ops::Range<u32> as iter::range::RangeIteratorImpl>::spec_next) {
debug self => _6;
let mut _7: &u32;
let mut _8: &u32;
let mut _11: bool;
let _13: u32;
let mut _14: u32;
debug self => &_5;
let mut _8: bool;
let _10: u32;
let mut _11: u32;
scope 6 {
debug old => _13;
debug old => _10;
scope 7 {
}
}
scope 8 (inlined cmp::impls::<impl PartialOrd for u32>::lt) {
debug self => _7;
debug other => _8;
let mut _9: u32;
let mut _10: u32;
debug self => &((*_17).0: u32);
debug other => &((*_17).1: u32);
let mut _6: u32;
let mut _7: u32;
}
}
}
@ -54,53 +52,46 @@ fn forward_loop(_1: u32, _2: u32, _3: impl Fn(u32)) -> () {
}
bb1: {
StorageLive(_12);
_6 = &mut _5;
StorageLive(_13);
StorageLive(_11);
StorageLive(_7);
_7 = &((*_6).0: u32);
StorageLive(_8);
_8 = &((*_6).1: u32);
StorageLive(_9);
_9 = (*_7);
StorageLive(_10);
_10 = (*_8);
_11 = Lt(move _9, move _10);
StorageDead(_10);
StorageDead(_9);
StorageDead(_8);
StorageLive(_8);
StorageLive(_6);
_6 = (_5.0: u32);
StorageLive(_7);
_7 = (_5.1: u32);
_8 = Lt(move _6, move _7);
StorageDead(_7);
switchInt(move _11) -> [0: bb2, otherwise: bb3];
StorageDead(_6);
switchInt(move _8) -> [0: bb2, otherwise: bb3];
}
bb2: {
_12 = Option::<u32>::None;
_9 = Option::<u32>::None;
goto -> bb5;
}
bb3: {
_13 = ((*_6).0: u32);
StorageLive(_14);
_14 = <u32 as Step>::forward_unchecked(_13, const 1_usize) -> [return: bb4, unwind: bb11];
_10 = (_5.0: u32);
StorageLive(_11);
_11 = <u32 as Step>::forward_unchecked(_10, const 1_usize) -> [return: bb4, unwind: bb11];
}
bb4: {
((*_6).0: u32) = move _14;
StorageDead(_14);
_12 = Option::<u32>::Some(_13);
(_5.0: u32) = move _11;
StorageDead(_11);
_9 = Option::<u32>::Some(_10);
goto -> bb5;
}
bb5: {
StorageDead(_11);
StorageDead(_13);
_15 = discriminant(_12);
switchInt(move _15) -> [0: bb6, 1: bb8, otherwise: bb10];
StorageDead(_8);
StorageDead(_10);
_12 = discriminant(_9);
switchInt(move _12) -> [0: bb6, 1: bb8, otherwise: bb10];
}
bb6: {
StorageDead(_12);
StorageDead(_9);
StorageDead(_5);
drop(_3) -> [return: bb7, unwind continue];
}
@ -110,18 +101,18 @@ fn forward_loop(_1: u32, _2: u32, _3: impl Fn(u32)) -> () {
}
bb8: {
_16 = ((_12 as Some).0: u32);
StorageLive(_17);
_17 = &_3;
StorageLive(_18);
_18 = (_16,);
_19 = <impl Fn(u32) as Fn<(u32,)>>::call(move _17, move _18) -> [return: bb9, unwind: bb11];
_13 = ((_9 as Some).0: u32);
StorageLive(_14);
_14 = &_3;
StorageLive(_15);
_15 = (_13,);
_16 = <impl Fn(u32) as Fn<(u32,)>>::call(move _14, move _15) -> [return: bb9, unwind: bb11];
}
bb9: {
StorageDead(_18);
StorageDead(_17);
StorageDead(_12);
StorageDead(_15);
StorageDead(_14);
StorageDead(_9);
goto -> bb1;
}

View File

@ -7,42 +7,34 @@ fn range_iter_next(_1: &mut std::ops::Range<u32>) -> Option<u32> {
debug self => _1;
scope 2 (inlined <std::ops::Range<u32> as iter::range::RangeIteratorImpl>::spec_next) {
debug self => _1;
let mut _2: &u32;
let mut _3: &u32;
let mut _6: bool;
let _7: u32;
let mut _8: u32;
let mut _4: bool;
let _5: u32;
let mut _6: u32;
scope 3 {
debug old => _7;
debug old => _5;
scope 4 {
}
}
scope 5 (inlined cmp::impls::<impl PartialOrd for u32>::lt) {
debug self => _2;
debug other => _3;
let mut _4: u32;
let mut _5: u32;
debug self => &((*_1).0: u32);
debug other => &((*_1).1: u32);
let mut _2: u32;
let mut _3: u32;
}
}
}
bb0: {
StorageLive(_7);
StorageLive(_6);
StorageLive(_2);
_2 = &((*_1).0: u32);
StorageLive(_3);
_3 = &((*_1).1: u32);
StorageLive(_4);
_4 = (*_2);
StorageLive(_5);
_5 = (*_3);
_6 = Lt(move _4, move _5);
StorageDead(_5);
StorageDead(_4);
StorageLive(_4);
StorageLive(_2);
_2 = ((*_1).0: u32);
StorageLive(_3);
_3 = ((*_1).1: u32);
_4 = Lt(move _2, move _3);
StorageDead(_3);
StorageDead(_2);
switchInt(move _6) -> [0: bb1, otherwise: bb2];
switchInt(move _4) -> [0: bb1, otherwise: bb2];
}
bb1: {
@ -51,21 +43,21 @@ fn range_iter_next(_1: &mut std::ops::Range<u32>) -> Option<u32> {
}
bb2: {
_7 = ((*_1).0: u32);
StorageLive(_8);
_8 = <u32 as Step>::forward_unchecked(_7, const 1_usize) -> [return: bb3, unwind unreachable];
_5 = ((*_1).0: u32);
StorageLive(_6);
_6 = <u32 as Step>::forward_unchecked(_5, const 1_usize) -> [return: bb3, unwind unreachable];
}
bb3: {
((*_1).0: u32) = move _8;
StorageDead(_8);
_0 = Option::<u32>::Some(_7);
((*_1).0: u32) = move _6;
StorageDead(_6);
_0 = Option::<u32>::Some(_5);
goto -> bb4;
}
bb4: {
StorageDead(_6);
StorageDead(_7);
StorageDead(_4);
StorageDead(_5);
return;
}
}

View File

@ -7,42 +7,34 @@ fn range_iter_next(_1: &mut std::ops::Range<u32>) -> Option<u32> {
debug self => _1;
scope 2 (inlined <std::ops::Range<u32> as iter::range::RangeIteratorImpl>::spec_next) {
debug self => _1;
let mut _2: &u32;
let mut _3: &u32;
let mut _6: bool;
let _7: u32;
let mut _8: u32;
let mut _4: bool;
let _5: u32;
let mut _6: u32;
scope 3 {
debug old => _7;
debug old => _5;
scope 4 {
}
}
scope 5 (inlined cmp::impls::<impl PartialOrd for u32>::lt) {
debug self => _2;
debug other => _3;
let mut _4: u32;
let mut _5: u32;
debug self => &((*_1).0: u32);
debug other => &((*_1).1: u32);
let mut _2: u32;
let mut _3: u32;
}
}
}
bb0: {
StorageLive(_7);
StorageLive(_6);
StorageLive(_2);
_2 = &((*_1).0: u32);
StorageLive(_3);
_3 = &((*_1).1: u32);
StorageLive(_4);
_4 = (*_2);
StorageLive(_5);
_5 = (*_3);
_6 = Lt(move _4, move _5);
StorageDead(_5);
StorageDead(_4);
StorageLive(_4);
StorageLive(_2);
_2 = ((*_1).0: u32);
StorageLive(_3);
_3 = ((*_1).1: u32);
_4 = Lt(move _2, move _3);
StorageDead(_3);
StorageDead(_2);
switchInt(move _6) -> [0: bb1, otherwise: bb2];
switchInt(move _4) -> [0: bb1, otherwise: bb2];
}
bb1: {
@ -51,21 +43,21 @@ fn range_iter_next(_1: &mut std::ops::Range<u32>) -> Option<u32> {
}
bb2: {
_7 = ((*_1).0: u32);
StorageLive(_8);
_8 = <u32 as Step>::forward_unchecked(_7, const 1_usize) -> [return: bb3, unwind continue];
_5 = ((*_1).0: u32);
StorageLive(_6);
_6 = <u32 as Step>::forward_unchecked(_5, const 1_usize) -> [return: bb3, unwind continue];
}
bb3: {
((*_1).0: u32) = move _8;
StorageDead(_8);
_0 = Option::<u32>::Some(_7);
((*_1).0: u32) = move _6;
StorageDead(_6);
_0 = Option::<u32>::Some(_5);
goto -> bb4;
}
bb4: {
StorageDead(_6);
StorageDead(_7);
StorageDead(_4);
StorageDead(_5);
return;
}
}

View File

@ -3,214 +3,138 @@
fn variant_a::{closure#0}(_1: &mut [closure@$DIR/slice_filter.rs:7:25: 7:39], _2: &&(usize, usize, usize, usize)) -> bool {
let mut _0: bool;
let mut _3: &(usize, usize, usize, usize);
let _4: &usize;
let mut _4: &(usize, usize, usize, usize);
let mut _5: &(usize, usize, usize, usize);
let _6: &usize;
let mut _7: &(usize, usize, usize, usize);
let _8: &usize;
let mut _9: &(usize, usize, usize, usize);
let _10: &usize;
let mut _11: &&usize;
let _12: &usize;
let mut _13: &&usize;
let mut _18: bool;
let mut _19: bool;
let mut _20: &&usize;
let _21: &usize;
let mut _22: &&usize;
let mut _27: bool;
let mut _28: &&usize;
let _29: &usize;
let mut _30: &&usize;
let mut _35: bool;
let mut _36: bool;
let mut _37: &&usize;
let _38: &usize;
let mut _39: &&usize;
let mut _44: bool;
let mut _6: &(usize, usize, usize, usize);
let mut _9: bool;
let mut _10: bool;
let mut _13: bool;
let mut _16: bool;
let mut _17: bool;
let mut _20: bool;
scope 1 {
debug a => _4;
debug b => _6;
debug c => _8;
debug d => _10;
debug a => &((*_3).0: usize);
debug b => &((*_4).1: usize);
debug c => &((*_5).2: usize);
debug d => &((*_6).3: usize);
scope 2 (inlined cmp::impls::<impl PartialOrd for &usize>::le) {
debug self => _11;
debug other => _13;
let mut _14: &usize;
let mut _15: &usize;
debug self => &&((*_3).0: usize);
debug other => &&((*_5).2: usize);
scope 3 (inlined cmp::impls::<impl PartialOrd for usize>::le) {
debug self => _14;
debug other => _15;
let mut _16: usize;
let mut _17: usize;
debug self => &((*_3).0: usize);
debug other => &((*_5).2: usize);
let mut _7: usize;
let mut _8: usize;
}
}
scope 4 (inlined cmp::impls::<impl PartialOrd for &usize>::le) {
debug self => _28;
debug other => _30;
let mut _31: &usize;
let mut _32: &usize;
debug self => &&((*_5).2: usize);
debug other => &&((*_3).0: usize);
scope 5 (inlined cmp::impls::<impl PartialOrd for usize>::le) {
debug self => _31;
debug other => _32;
let mut _33: usize;
let mut _34: usize;
debug self => &((*_5).2: usize);
debug other => &((*_3).0: usize);
let mut _14: usize;
let mut _15: usize;
}
}
scope 6 (inlined cmp::impls::<impl PartialOrd for &usize>::le) {
debug self => _20;
debug other => _22;
let mut _23: &usize;
let mut _24: &usize;
debug self => &&((*_6).3: usize);
debug other => &&((*_4).1: usize);
scope 7 (inlined cmp::impls::<impl PartialOrd for usize>::le) {
debug self => _23;
debug other => _24;
let mut _25: usize;
let mut _26: usize;
debug self => &((*_6).3: usize);
debug other => &((*_4).1: usize);
let mut _11: usize;
let mut _12: usize;
}
}
scope 8 (inlined cmp::impls::<impl PartialOrd for &usize>::le) {
debug self => _37;
debug other => _39;
let mut _40: &usize;
let mut _41: &usize;
debug self => &&((*_4).1: usize);
debug other => &&((*_6).3: usize);
scope 9 (inlined cmp::impls::<impl PartialOrd for usize>::le) {
debug self => _40;
debug other => _41;
let mut _42: usize;
let mut _43: usize;
debug self => &((*_4).1: usize);
debug other => &((*_6).3: usize);
let mut _18: usize;
let mut _19: usize;
}
}
}
bb0: {
StorageLive(_4);
_3 = deref_copy (*_2);
_4 = &((*_3).0: usize);
StorageLive(_6);
_4 = deref_copy (*_2);
_5 = deref_copy (*_2);
_6 = &((*_5).1: usize);
StorageLive(_8);
_7 = deref_copy (*_2);
_8 = &((*_7).2: usize);
_6 = deref_copy (*_2);
StorageLive(_10);
_9 = deref_copy (*_2);
_10 = &((*_9).3: usize);
StorageLive(_19);
StorageLive(_18);
StorageLive(_11);
_11 = &_4;
StorageLive(_13);
StorageLive(_12);
_12 = _8;
_13 = &_12;
_14 = deref_copy (*_11);
_15 = deref_copy (*_13);
StorageLive(_16);
_16 = (*_14);
StorageLive(_17);
_17 = (*_15);
_18 = Le(move _16, move _17);
StorageDead(_17);
StorageDead(_16);
StorageDead(_12);
StorageDead(_13);
StorageDead(_11);
switchInt(move _18) -> [0: bb1, otherwise: bb2];
StorageLive(_9);
StorageLive(_7);
_7 = ((*_3).0: usize);
StorageLive(_8);
_8 = ((*_5).2: usize);
_9 = Le(move _7, move _8);
StorageDead(_8);
StorageDead(_7);
switchInt(move _9) -> [0: bb1, otherwise: bb2];
}
bb1: {
_19 = const false;
_10 = const false;
goto -> bb3;
}
bb2: {
StorageLive(_27);
StorageLive(_20);
_20 = &_10;
StorageLive(_22);
StorageLive(_21);
_21 = _6;
_22 = &_21;
_23 = deref_copy (*_20);
_24 = deref_copy (*_22);
StorageLive(_25);
_25 = (*_23);
StorageLive(_26);
_26 = (*_24);
_27 = Le(move _25, move _26);
StorageDead(_26);
StorageDead(_25);
StorageDead(_21);
StorageDead(_22);
StorageDead(_20);
_19 = move _27;
StorageLive(_13);
StorageLive(_11);
_11 = ((*_6).3: usize);
StorageLive(_12);
_12 = ((*_4).1: usize);
_13 = Le(move _11, move _12);
StorageDead(_12);
StorageDead(_11);
_10 = move _13;
goto -> bb3;
}
bb3: {
StorageDead(_27);
StorageDead(_18);
switchInt(move _19) -> [0: bb4, otherwise: bb8];
StorageDead(_13);
StorageDead(_9);
switchInt(move _10) -> [0: bb4, otherwise: bb8];
}
bb4: {
StorageLive(_36);
StorageLive(_35);
StorageLive(_28);
_28 = &_8;
StorageLive(_30);
StorageLive(_29);
_29 = _4;
_30 = &_29;
_31 = deref_copy (*_28);
_32 = deref_copy (*_30);
StorageLive(_33);
_33 = (*_31);
StorageLive(_34);
_34 = (*_32);
_35 = Le(move _33, move _34);
StorageDead(_34);
StorageDead(_33);
StorageDead(_29);
StorageDead(_30);
StorageDead(_28);
switchInt(move _35) -> [0: bb5, otherwise: bb6];
StorageLive(_17);
StorageLive(_16);
StorageLive(_14);
_14 = ((*_5).2: usize);
StorageLive(_15);
_15 = ((*_3).0: usize);
_16 = Le(move _14, move _15);
StorageDead(_15);
StorageDead(_14);
switchInt(move _16) -> [0: bb5, otherwise: bb6];
}
bb5: {
_36 = const false;
_17 = const false;
goto -> bb7;
}
bb6: {
StorageLive(_44);
StorageLive(_37);
_37 = &_6;
StorageLive(_39);
StorageLive(_38);
_38 = _10;
_39 = &_38;
_40 = deref_copy (*_37);
_41 = deref_copy (*_39);
StorageLive(_42);
_42 = (*_40);
StorageLive(_43);
_43 = (*_41);
_44 = Le(move _42, move _43);
StorageDead(_43);
StorageDead(_42);
StorageDead(_38);
StorageDead(_39);
StorageDead(_37);
_36 = move _44;
StorageLive(_20);
StorageLive(_18);
_18 = ((*_4).1: usize);
StorageLive(_19);
_19 = ((*_6).3: usize);
_20 = Le(move _18, move _19);
StorageDead(_19);
StorageDead(_18);
_17 = move _20;
goto -> bb7;
}
bb7: {
StorageDead(_44);
StorageDead(_35);
_0 = move _36;
StorageDead(_20);
StorageDead(_16);
_0 = move _17;
goto -> bb9;
}
@ -220,12 +144,8 @@ fn variant_a::{closure#0}(_1: &mut [closure@$DIR/slice_filter.rs:7:25: 7:39], _2
}
bb9: {
StorageDead(_36);
StorageDead(_19);
StorageDead(_17);
StorageDead(_10);
StorageDead(_8);
StorageDead(_6);
StorageDead(_4);
return;
}
}

View File

@ -10,38 +10,37 @@ fn slice_get_mut_usize(_1: &mut [u32], _2: usize) -> Option<&mut u32> {
scope 2 (inlined <usize as SliceIndex<[u32]>>::get_mut) {
debug self => _2;
debug slice => _1;
let mut _3: &[u32];
let mut _4: usize;
let mut _5: bool;
let mut _6: *mut [u32];
let mut _8: *mut u32;
let mut _9: &mut u32;
let mut _3: usize;
let mut _4: bool;
let mut _5: *mut [u32];
let mut _7: *mut u32;
let mut _8: &mut u32;
scope 3 {
scope 4 (inlined <usize as SliceIndex<[u32]>>::get_unchecked_mut) {
debug self => _2;
debug slice => _6;
let mut _7: *mut u32;
debug slice => _5;
let mut _6: *mut u32;
scope 5 {
debug this => _2;
scope 6 {
scope 7 (inlined <usize as SliceIndex<[T]>>::get_unchecked_mut::runtime::<u32>) {
debug this => _2;
debug slice => _6;
debug slice => _5;
scope 8 (inlined ptr::mut_ptr::<impl *mut [u32]>::len) {
debug self => _6;
let mut _10: *const [u32];
debug self => _5;
let mut _9: *const [u32];
scope 9 (inlined std::ptr::metadata::<[u32]>) {
debug ptr => _10;
debug ptr => _9;
scope 10 {
}
}
}
}
scope 11 (inlined ptr::mut_ptr::<impl *mut [u32]>::as_mut_ptr) {
debug self => _6;
debug self => _5;
}
scope 12 (inlined ptr::mut_ptr::<impl *mut u32>::add) {
debug self => _7;
debug self => _6;
debug count => _2;
scope 13 {
}
@ -54,16 +53,13 @@ fn slice_get_mut_usize(_1: &mut [u32], _2: usize) -> Option<&mut u32> {
}
bb0: {
StorageLive(_9);
StorageLive(_5);
StorageLive(_8);
StorageLive(_4);
StorageLive(_3);
_3 = &(*_1);
_4 = Len((*_3));
_3 = Len((*_1));
_4 = Lt(_2, move _3);
StorageDead(_3);
_5 = Lt(_2, move _4);
StorageDead(_4);
switchInt(move _5) -> [0: bb1, otherwise: bb2];
switchInt(move _4) -> [0: bb1, otherwise: bb2];
}
bb1: {
@ -72,25 +68,25 @@ fn slice_get_mut_usize(_1: &mut [u32], _2: usize) -> Option<&mut u32> {
}
bb2: {
StorageLive(_8);
StorageLive(_6);
_6 = &raw mut (*_1);
StorageLive(_10);
StorageLive(_7);
_7 = _6 as *mut u32 (PtrToPtr);
_8 = Offset(_7, _2);
StorageDead(_7);
StorageDead(_10);
StorageLive(_5);
_5 = &raw mut (*_1);
StorageLive(_9);
StorageLive(_6);
_6 = _5 as *mut u32 (PtrToPtr);
_7 = Offset(_6, _2);
StorageDead(_6);
_9 = &mut (*_8);
_0 = Option::<&mut u32>::Some(_9);
StorageDead(_8);
StorageDead(_9);
StorageDead(_5);
_8 = &mut (*_7);
_0 = Option::<&mut u32>::Some(_8);
StorageDead(_7);
goto -> bb3;
}
bb3: {
StorageDead(_5);
StorageDead(_9);
StorageDead(_4);
StorageDead(_8);
return;
}
}

View File

@ -10,38 +10,37 @@ fn slice_get_mut_usize(_1: &mut [u32], _2: usize) -> Option<&mut u32> {
scope 2 (inlined <usize as SliceIndex<[u32]>>::get_mut) {
debug self => _2;
debug slice => _1;
let mut _3: &[u32];
let mut _4: usize;
let mut _5: bool;
let mut _6: *mut [u32];
let mut _8: *mut u32;
let mut _9: &mut u32;
let mut _3: usize;
let mut _4: bool;
let mut _5: *mut [u32];
let mut _7: *mut u32;
let mut _8: &mut u32;
scope 3 {
scope 4 (inlined <usize as SliceIndex<[u32]>>::get_unchecked_mut) {
debug self => _2;
debug slice => _6;
let mut _7: *mut u32;
debug slice => _5;
let mut _6: *mut u32;
scope 5 {
debug this => _2;
scope 6 {
scope 7 (inlined <usize as SliceIndex<[T]>>::get_unchecked_mut::runtime::<u32>) {
debug this => _2;
debug slice => _6;
debug slice => _5;
scope 8 (inlined ptr::mut_ptr::<impl *mut [u32]>::len) {
debug self => _6;
let mut _10: *const [u32];
debug self => _5;
let mut _9: *const [u32];
scope 9 (inlined std::ptr::metadata::<[u32]>) {
debug ptr => _10;
debug ptr => _9;
scope 10 {
}
}
}
}
scope 11 (inlined ptr::mut_ptr::<impl *mut [u32]>::as_mut_ptr) {
debug self => _6;
debug self => _5;
}
scope 12 (inlined ptr::mut_ptr::<impl *mut u32>::add) {
debug self => _7;
debug self => _6;
debug count => _2;
scope 13 {
}
@ -54,16 +53,13 @@ fn slice_get_mut_usize(_1: &mut [u32], _2: usize) -> Option<&mut u32> {
}
bb0: {
StorageLive(_9);
StorageLive(_5);
StorageLive(_8);
StorageLive(_4);
StorageLive(_3);
_3 = &(*_1);
_4 = Len((*_3));
_3 = Len((*_1));
_4 = Lt(_2, move _3);
StorageDead(_3);
_5 = Lt(_2, move _4);
StorageDead(_4);
switchInt(move _5) -> [0: bb1, otherwise: bb2];
switchInt(move _4) -> [0: bb1, otherwise: bb2];
}
bb1: {
@ -72,25 +68,25 @@ fn slice_get_mut_usize(_1: &mut [u32], _2: usize) -> Option<&mut u32> {
}
bb2: {
StorageLive(_8);
StorageLive(_6);
_6 = &raw mut (*_1);
StorageLive(_10);
StorageLive(_7);
_7 = _6 as *mut u32 (PtrToPtr);
_8 = Offset(_7, _2);
StorageDead(_7);
StorageDead(_10);
StorageLive(_5);
_5 = &raw mut (*_1);
StorageLive(_9);
StorageLive(_6);
_6 = _5 as *mut u32 (PtrToPtr);
_7 = Offset(_6, _2);
StorageDead(_6);
_9 = &mut (*_8);
_0 = Option::<&mut u32>::Some(_9);
StorageDead(_8);
StorageDead(_9);
StorageDead(_5);
_8 = &mut (*_7);
_0 = Option::<&mut u32>::Some(_8);
StorageDead(_7);
goto -> bb3;
}
bb3: {
StorageDead(_5);
StorageDead(_9);
StorageDead(_4);
StorageDead(_8);
return;
}
}

View File

@ -7,43 +7,41 @@ fn range_loop(_1: &[T], _2: impl Fn(usize, &T)) -> () {
let mut _3: usize;
let mut _4: std::ops::Range<usize>;
let mut _5: std::ops::Range<usize>;
let mut _6: &mut std::ops::Range<usize>;
let mut _12: std::option::Option<usize>;
let mut _15: isize;
let mut _17: usize;
let mut _18: bool;
let mut _20: &impl Fn(usize, &T);
let mut _21: (usize, &T);
let _22: ();
let mut _9: std::option::Option<usize>;
let mut _12: isize;
let mut _14: usize;
let mut _15: bool;
let mut _17: &impl Fn(usize, &T);
let mut _18: (usize, &T);
let _19: ();
let mut _20: &mut std::ops::Range<usize>;
scope 1 {
debug iter => _5;
let _16: usize;
let _13: usize;
scope 2 {
debug i => _16;
let _19: &T;
debug i => _13;
let _16: &T;
scope 3 {
debug x => _19;
debug x => _16;
}
}
scope 5 (inlined iter::range::<impl Iterator for std::ops::Range<usize>>::next) {
debug self => _6;
debug self => &_5;
scope 6 (inlined <std::ops::Range<usize> as iter::range::RangeIteratorImpl>::spec_next) {
debug self => _6;
let mut _7: &usize;
let mut _8: &usize;
let mut _11: bool;
let _13: usize;
let mut _14: usize;
debug self => &_5;
let mut _8: bool;
let _10: usize;
let mut _11: usize;
scope 7 {
debug old => _13;
debug old => _10;
scope 8 {
}
}
scope 9 (inlined cmp::impls::<impl PartialOrd for usize>::lt) {
debug self => _7;
debug other => _8;
let mut _9: usize;
let mut _10: usize;
debug self => &((*_20).0: usize);
debug other => &((*_20).1: usize);
let mut _6: usize;
let mut _7: usize;
}
}
}
@ -63,53 +61,46 @@ fn range_loop(_1: &[T], _2: impl Fn(usize, &T)) -> () {
}
bb1: {
StorageLive(_12);
_6 = &mut _5;
StorageLive(_13);
StorageLive(_11);
StorageLive(_7);
_7 = &((*_6).0: usize);
StorageLive(_8);
_8 = &((*_6).1: usize);
StorageLive(_9);
_9 = (*_7);
StorageLive(_10);
_10 = (*_8);
_11 = Lt(move _9, move _10);
StorageDead(_10);
StorageDead(_9);
StorageDead(_8);
StorageLive(_8);
StorageLive(_6);
_6 = (_5.0: usize);
StorageLive(_7);
_7 = (_5.1: usize);
_8 = Lt(move _6, move _7);
StorageDead(_7);
switchInt(move _11) -> [0: bb2, otherwise: bb3];
StorageDead(_6);
switchInt(move _8) -> [0: bb2, otherwise: bb3];
}
bb2: {
_12 = Option::<usize>::None;
_9 = Option::<usize>::None;
goto -> bb5;
}
bb3: {
_13 = ((*_6).0: usize);
StorageLive(_14);
_14 = <usize as Step>::forward_unchecked(_13, const 1_usize) -> [return: bb4, unwind unreachable];
_10 = (_5.0: usize);
StorageLive(_11);
_11 = <usize as Step>::forward_unchecked(_10, const 1_usize) -> [return: bb4, unwind unreachable];
}
bb4: {
((*_6).0: usize) = move _14;
StorageDead(_14);
_12 = Option::<usize>::Some(_13);
(_5.0: usize) = move _11;
StorageDead(_11);
_9 = Option::<usize>::Some(_10);
goto -> bb5;
}
bb5: {
StorageDead(_11);
StorageDead(_13);
_15 = discriminant(_12);
switchInt(move _15) -> [0: bb6, 1: bb8, otherwise: bb11];
StorageDead(_8);
StorageDead(_10);
_12 = discriminant(_9);
switchInt(move _12) -> [0: bb6, 1: bb8, otherwise: bb11];
}
bb6: {
StorageDead(_12);
StorageDead(_9);
StorageDead(_5);
drop(_2) -> [return: bb7, unwind unreachable];
}
@ -119,25 +110,25 @@ fn range_loop(_1: &[T], _2: impl Fn(usize, &T)) -> () {
}
bb8: {
_16 = ((_12 as Some).0: usize);
_17 = Len((*_1));
_18 = Lt(_16, _17);
assert(move _18, "index out of bounds: the length is {} but the index is {}", move _17, _16) -> [success: bb9, unwind unreachable];
_13 = ((_9 as Some).0: usize);
_14 = Len((*_1));
_15 = Lt(_13, _14);
assert(move _15, "index out of bounds: the length is {} but the index is {}", move _14, _13) -> [success: bb9, unwind unreachable];
}
bb9: {
_19 = &(*_1)[_16];
StorageLive(_20);
_20 = &_2;
StorageLive(_21);
_21 = (_16, _19);
_22 = <impl Fn(usize, &T) as Fn<(usize, &T)>>::call(move _20, move _21) -> [return: bb10, unwind unreachable];
_16 = &(*_1)[_13];
StorageLive(_17);
_17 = &_2;
StorageLive(_18);
_18 = (_13, _16);
_19 = <impl Fn(usize, &T) as Fn<(usize, &T)>>::call(move _17, move _18) -> [return: bb10, unwind unreachable];
}
bb10: {
StorageDead(_21);
StorageDead(_20);
StorageDead(_12);
StorageDead(_18);
StorageDead(_17);
StorageDead(_9);
goto -> bb1;
}

View File

@ -7,43 +7,41 @@ fn range_loop(_1: &[T], _2: impl Fn(usize, &T)) -> () {
let mut _3: usize;
let mut _4: std::ops::Range<usize>;
let mut _5: std::ops::Range<usize>;
let mut _6: &mut std::ops::Range<usize>;
let mut _12: std::option::Option<usize>;
let mut _15: isize;
let mut _17: usize;
let mut _18: bool;
let mut _20: &impl Fn(usize, &T);
let mut _21: (usize, &T);
let _22: ();
let mut _9: std::option::Option<usize>;
let mut _12: isize;
let mut _14: usize;
let mut _15: bool;
let mut _17: &impl Fn(usize, &T);
let mut _18: (usize, &T);
let _19: ();
let mut _20: &mut std::ops::Range<usize>;
scope 1 {
debug iter => _5;
let _16: usize;
let _13: usize;
scope 2 {
debug i => _16;
let _19: &T;
debug i => _13;
let _16: &T;
scope 3 {
debug x => _19;
debug x => _16;
}
}
scope 5 (inlined iter::range::<impl Iterator for std::ops::Range<usize>>::next) {
debug self => _6;
debug self => &_5;
scope 6 (inlined <std::ops::Range<usize> as iter::range::RangeIteratorImpl>::spec_next) {
debug self => _6;
let mut _7: &usize;
let mut _8: &usize;
let mut _11: bool;
let _13: usize;
let mut _14: usize;
debug self => &_5;
let mut _8: bool;
let _10: usize;
let mut _11: usize;
scope 7 {
debug old => _13;
debug old => _10;
scope 8 {
}
}
scope 9 (inlined cmp::impls::<impl PartialOrd for usize>::lt) {
debug self => _7;
debug other => _8;
let mut _9: usize;
let mut _10: usize;
debug self => &((*_20).0: usize);
debug other => &((*_20).1: usize);
let mut _6: usize;
let mut _7: usize;
}
}
}
@ -63,53 +61,46 @@ fn range_loop(_1: &[T], _2: impl Fn(usize, &T)) -> () {
}
bb1: {
StorageLive(_12);
_6 = &mut _5;
StorageLive(_13);
StorageLive(_11);
StorageLive(_7);
_7 = &((*_6).0: usize);
StorageLive(_8);
_8 = &((*_6).1: usize);
StorageLive(_9);
_9 = (*_7);
StorageLive(_10);
_10 = (*_8);
_11 = Lt(move _9, move _10);
StorageDead(_10);
StorageDead(_9);
StorageDead(_8);
StorageLive(_8);
StorageLive(_6);
_6 = (_5.0: usize);
StorageLive(_7);
_7 = (_5.1: usize);
_8 = Lt(move _6, move _7);
StorageDead(_7);
switchInt(move _11) -> [0: bb2, otherwise: bb3];
StorageDead(_6);
switchInt(move _8) -> [0: bb2, otherwise: bb3];
}
bb2: {
_12 = Option::<usize>::None;
_9 = Option::<usize>::None;
goto -> bb5;
}
bb3: {
_13 = ((*_6).0: usize);
StorageLive(_14);
_14 = <usize as Step>::forward_unchecked(_13, const 1_usize) -> [return: bb4, unwind: bb12];
_10 = (_5.0: usize);
StorageLive(_11);
_11 = <usize as Step>::forward_unchecked(_10, const 1_usize) -> [return: bb4, unwind: bb12];
}
bb4: {
((*_6).0: usize) = move _14;
StorageDead(_14);
_12 = Option::<usize>::Some(_13);
(_5.0: usize) = move _11;
StorageDead(_11);
_9 = Option::<usize>::Some(_10);
goto -> bb5;
}
bb5: {
StorageDead(_11);
StorageDead(_13);
_15 = discriminant(_12);
switchInt(move _15) -> [0: bb6, 1: bb8, otherwise: bb11];
StorageDead(_8);
StorageDead(_10);
_12 = discriminant(_9);
switchInt(move _12) -> [0: bb6, 1: bb8, otherwise: bb11];
}
bb6: {
StorageDead(_12);
StorageDead(_9);
StorageDead(_5);
drop(_2) -> [return: bb7, unwind continue];
}
@ -119,25 +110,25 @@ fn range_loop(_1: &[T], _2: impl Fn(usize, &T)) -> () {
}
bb8: {
_16 = ((_12 as Some).0: usize);
_17 = Len((*_1));
_18 = Lt(_16, _17);
assert(move _18, "index out of bounds: the length is {} but the index is {}", move _17, _16) -> [success: bb9, unwind: bb12];
_13 = ((_9 as Some).0: usize);
_14 = Len((*_1));
_15 = Lt(_13, _14);
assert(move _15, "index out of bounds: the length is {} but the index is {}", move _14, _13) -> [success: bb9, unwind: bb12];
}
bb9: {
_19 = &(*_1)[_16];
StorageLive(_20);
_20 = &_2;
StorageLive(_21);
_21 = (_16, _19);
_22 = <impl Fn(usize, &T) as Fn<(usize, &T)>>::call(move _20, move _21) -> [return: bb10, unwind: bb12];
_16 = &(*_1)[_13];
StorageLive(_17);
_17 = &_2;
StorageLive(_18);
_18 = (_13, _16);
_19 = <impl Fn(usize, &T) as Fn<(usize, &T)>>::call(move _17, move _18) -> [return: bb10, unwind: bb12];
}
bb10: {
StorageDead(_21);
StorageDead(_20);
StorageDead(_12);
StorageDead(_18);
StorageDead(_17);
StorageDead(_9);
goto -> bb1;
}

View File

@ -7,21 +7,20 @@ fn reverse_loop(_1: &[T], _2: impl Fn(&T)) -> () {
let mut _13: std::slice::Iter<'_, T>;
let mut _14: std::iter::Rev<std::slice::Iter<'_, T>>;
let mut _15: std::iter::Rev<std::slice::Iter<'_, T>>;
let mut _16: &mut std::iter::Rev<std::slice::Iter<'_, T>>;
let mut _18: std::option::Option<&T>;
let mut _19: isize;
let mut _21: &impl Fn(&T);
let mut _22: (&T,);
let _23: ();
let mut _17: std::option::Option<&T>;
let mut _18: isize;
let mut _20: &impl Fn(&T);
let mut _21: (&T,);
let _22: ();
scope 1 {
debug iter => _15;
let _20: &T;
let _19: &T;
scope 2 {
debug x => _20;
debug x => _19;
}
scope 25 (inlined <Rev<std::slice::Iter<'_, T>> as Iterator>::next) {
debug self => _16;
let mut _17: &mut std::slice::Iter<'_, T>;
debug self => &_15;
let mut _16: &mut std::slice::Iter<'_, T>;
}
}
scope 3 (inlined core::slice::<impl [T]>::iter) {
@ -49,15 +48,15 @@ fn reverse_loop(_1: &[T], _2: impl Fn(&T)) -> () {
debug ptr => _9;
scope 16 (inlined ptr::mut_ptr::<impl *mut T>::is_null) {
debug self => _9;
let mut _24: *mut u8;
let mut _23: *mut u8;
scope 17 {
scope 18 (inlined ptr::mut_ptr::<impl *mut T>::is_null::runtime_impl) {
debug ptr => _24;
debug ptr => _23;
scope 19 (inlined ptr::mut_ptr::<impl *mut u8>::addr) {
debug self => _24;
debug self => _23;
scope 20 {
scope 21 (inlined ptr::mut_ptr::<impl *mut u8>::cast::<()>) {
debug self => _24;
debug self => _23;
}
}
}
@ -132,10 +131,10 @@ fn reverse_loop(_1: &[T], _2: impl Fn(&T)) -> () {
StorageLive(_9);
_9 = _4 as *mut T (PtrToPtr);
StorageLive(_10);
StorageLive(_24);
StorageLive(_23);
_10 = _9 as *const T (PointerCoercion(MutToConstPointer));
_11 = NonNull::<T> { pointer: _10 };
StorageDead(_24);
StorageDead(_23);
StorageDead(_10);
StorageDead(_9);
StorageLive(_12);
@ -153,21 +152,20 @@ fn reverse_loop(_1: &[T], _2: impl Fn(&T)) -> () {
}
bb4: {
StorageLive(_18);
_16 = &mut _15;
StorageLive(_17);
_17 = &mut ((*_16).0: std::slice::Iter<'_, T>);
_18 = <std::slice::Iter<'_, T> as DoubleEndedIterator>::next_back(move _17) -> [return: bb5, unwind unreachable];
StorageLive(_16);
_16 = &mut (_15.0: std::slice::Iter<'_, T>);
_17 = <std::slice::Iter<'_, T> as DoubleEndedIterator>::next_back(move _16) -> [return: bb5, unwind unreachable];
}
bb5: {
StorageDead(_17);
_19 = discriminant(_18);
switchInt(move _19) -> [0: bb6, 1: bb8, otherwise: bb10];
StorageDead(_16);
_18 = discriminant(_17);
switchInt(move _18) -> [0: bb6, 1: bb8, otherwise: bb10];
}
bb6: {
StorageDead(_18);
StorageDead(_17);
StorageDead(_15);
drop(_2) -> [return: bb7, unwind unreachable];
}
@ -177,18 +175,18 @@ fn reverse_loop(_1: &[T], _2: impl Fn(&T)) -> () {
}
bb8: {
_20 = ((_18 as Some).0: &T);
_19 = ((_17 as Some).0: &T);
StorageLive(_20);
_20 = &_2;
StorageLive(_21);
_21 = &_2;
StorageLive(_22);
_22 = (_20,);
_23 = <impl Fn(&T) as Fn<(&T,)>>::call(move _21, move _22) -> [return: bb9, unwind unreachable];
_21 = (_19,);
_22 = <impl Fn(&T) as Fn<(&T,)>>::call(move _20, move _21) -> [return: bb9, unwind unreachable];
}
bb9: {
StorageDead(_22);
StorageDead(_21);
StorageDead(_18);
StorageDead(_20);
StorageDead(_17);
goto -> bb4;
}

View File

@ -7,21 +7,20 @@ fn reverse_loop(_1: &[T], _2: impl Fn(&T)) -> () {
let mut _13: std::slice::Iter<'_, T>;
let mut _14: std::iter::Rev<std::slice::Iter<'_, T>>;
let mut _15: std::iter::Rev<std::slice::Iter<'_, T>>;
let mut _16: &mut std::iter::Rev<std::slice::Iter<'_, T>>;
let mut _18: std::option::Option<&T>;
let mut _19: isize;
let mut _21: &impl Fn(&T);
let mut _22: (&T,);
let _23: ();
let mut _17: std::option::Option<&T>;
let mut _18: isize;
let mut _20: &impl Fn(&T);
let mut _21: (&T,);
let _22: ();
scope 1 {
debug iter => _15;
let _20: &T;
let _19: &T;
scope 2 {
debug x => _20;
debug x => _19;
}
scope 25 (inlined <Rev<std::slice::Iter<'_, T>> as Iterator>::next) {
debug self => _16;
let mut _17: &mut std::slice::Iter<'_, T>;
debug self => &_15;
let mut _16: &mut std::slice::Iter<'_, T>;
}
}
scope 3 (inlined core::slice::<impl [T]>::iter) {
@ -49,15 +48,15 @@ fn reverse_loop(_1: &[T], _2: impl Fn(&T)) -> () {
debug ptr => _9;
scope 16 (inlined ptr::mut_ptr::<impl *mut T>::is_null) {
debug self => _9;
let mut _24: *mut u8;
let mut _23: *mut u8;
scope 17 {
scope 18 (inlined ptr::mut_ptr::<impl *mut T>::is_null::runtime_impl) {
debug ptr => _24;
debug ptr => _23;
scope 19 (inlined ptr::mut_ptr::<impl *mut u8>::addr) {
debug self => _24;
debug self => _23;
scope 20 {
scope 21 (inlined ptr::mut_ptr::<impl *mut u8>::cast::<()>) {
debug self => _24;
debug self => _23;
}
}
}
@ -132,10 +131,10 @@ fn reverse_loop(_1: &[T], _2: impl Fn(&T)) -> () {
StorageLive(_9);
_9 = _4 as *mut T (PtrToPtr);
StorageLive(_10);
StorageLive(_24);
StorageLive(_23);
_10 = _9 as *const T (PointerCoercion(MutToConstPointer));
_11 = NonNull::<T> { pointer: _10 };
StorageDead(_24);
StorageDead(_23);
StorageDead(_10);
StorageDead(_9);
StorageLive(_12);
@ -153,21 +152,20 @@ fn reverse_loop(_1: &[T], _2: impl Fn(&T)) -> () {
}
bb4: {
StorageLive(_18);
_16 = &mut _15;
StorageLive(_17);
_17 = &mut ((*_16).0: std::slice::Iter<'_, T>);
_18 = <std::slice::Iter<'_, T> as DoubleEndedIterator>::next_back(move _17) -> [return: bb5, unwind: bb11];
StorageLive(_16);
_16 = &mut (_15.0: std::slice::Iter<'_, T>);
_17 = <std::slice::Iter<'_, T> as DoubleEndedIterator>::next_back(move _16) -> [return: bb5, unwind: bb11];
}
bb5: {
StorageDead(_17);
_19 = discriminant(_18);
switchInt(move _19) -> [0: bb6, 1: bb8, otherwise: bb10];
StorageDead(_16);
_18 = discriminant(_17);
switchInt(move _18) -> [0: bb6, 1: bb8, otherwise: bb10];
}
bb6: {
StorageDead(_18);
StorageDead(_17);
StorageDead(_15);
drop(_2) -> [return: bb7, unwind continue];
}
@ -177,18 +175,18 @@ fn reverse_loop(_1: &[T], _2: impl Fn(&T)) -> () {
}
bb8: {
_20 = ((_18 as Some).0: &T);
_19 = ((_17 as Some).0: &T);
StorageLive(_20);
_20 = &_2;
StorageLive(_21);
_21 = &_2;
StorageLive(_22);
_22 = (_20,);
_23 = <impl Fn(&T) as Fn<(&T,)>>::call(move _21, move _22) -> [return: bb9, unwind: bb11];
_21 = (_19,);
_22 = <impl Fn(&T) as Fn<(&T,)>>::call(move _20, move _21) -> [return: bb9, unwind: bb11];
}
bb9: {
StorageDead(_22);
StorageDead(_21);
StorageDead(_18);
StorageDead(_20);
StorageDead(_17);
goto -> bb4;
}