rust-mir-optimization-explo.../cheval.mir.unopt

277 lines
20 KiB
Plaintext

// WARNING: This output format is intended for human consumers only
// and is subject to change without notice. Knock yourself out.
fn main() -> () {
let mut _0: (); // return place in scope 0 at cheval.rs:1:16: 1:16
let _1: (); // in scope 0 at /rustc/6284998a2677d7e3e8420db783f3aa4fd80d7423/library/std/src/macros.rs:135:23: 137:6
let _2: (); // in scope 0 at /rustc/6284998a2677d7e3e8420db783f3aa4fd80d7423/library/std/src/macros.rs:136:9: 136:62
let mut _3: std::fmt::Arguments<'_>; // in scope 0 at /rustc/6284998a2677d7e3e8420db783f3aa4fd80d7423/library/std/src/macros.rs:136:28: 136:61
let mut _4: &[&str]; // in scope 0 at cheval.rs:2:14: 2:18
let mut _5: &[&str; 2]; // in scope 0 at cheval.rs:2:14: 2:18
let _6: &[&str; 2]; // in scope 0 at cheval.rs:2:14: 2:18
let _7: [&str; 2]; // in scope 0 at cheval.rs:2:14: 2:18
let mut _8: &[std::fmt::ArgumentV1<'_>]; // in scope 0 at /rustc/6284998a2677d7e3e8420db783f3aa4fd80d7423/library/std/src/macros.rs:136:28: 136:61
let mut _9: &[std::fmt::ArgumentV1<'_>; 1]; // in scope 0 at /rustc/6284998a2677d7e3e8420db783f3aa4fd80d7423/library/std/src/macros.rs:136:28: 136:61
let _10: &[std::fmt::ArgumentV1<'_>; 1]; // in scope 0 at /rustc/6284998a2677d7e3e8420db783f3aa4fd80d7423/library/std/src/macros.rs:136:28: 136:61
let _11: [std::fmt::ArgumentV1<'_>; 1]; // in scope 0 at /rustc/6284998a2677d7e3e8420db783f3aa4fd80d7423/library/std/src/macros.rs:136:28: 136:61
let mut _12: std::fmt::ArgumentV1<'_>; // in scope 0 at cheval.rs:2:20: 2:31
let mut _13: &i64; // in scope 0 at cheval.rs:2:20: 2:31
let _14: &i64; // in scope 0 at cheval.rs:2:20: 2:31
let _15: i64; // in scope 0 at cheval.rs:2:20: 2:31
let mut _16: &[&str; 2]; // in scope 0 at cheval.rs:2:14: 2:18
bb0: {
StorageLive(_1); // scope 0 at /rustc/6284998a2677d7e3e8420db783f3aa4fd80d7423/library/std/src/macros.rs:135:23: 137:6
StorageLive(_2); // scope 0 at /rustc/6284998a2677d7e3e8420db783f3aa4fd80d7423/library/std/src/macros.rs:136:9: 136:62
StorageLive(_3); // scope 0 at /rustc/6284998a2677d7e3e8420db783f3aa4fd80d7423/library/std/src/macros.rs:136:28: 136:61
StorageLive(_4); // scope 0 at cheval.rs:2:14: 2:18
StorageLive(_5); // scope 0 at cheval.rs:2:14: 2:18
StorageLive(_6); // scope 0 at cheval.rs:2:14: 2:18
_16 = const _; // scope 0 at cheval.rs:2:14: 2:18
// mir::Constant
// + span: cheval.rs:2:14: 2:18
// + literal: Const { ty: &[&str; 2], val: Unevaluated(main, [], Some(promoted[0])) }
_6 = &(*_16); // scope 0 at cheval.rs:2:14: 2:18
_5 = &(*_6); // scope 0 at cheval.rs:2:14: 2:18
_4 = move _5 as &[&str] (Pointer(Unsize)); // scope 0 at cheval.rs:2:14: 2:18
StorageDead(_5); // scope 0 at cheval.rs:2:17: 2:18
StorageLive(_8); // scope 0 at /rustc/6284998a2677d7e3e8420db783f3aa4fd80d7423/library/std/src/macros.rs:136:28: 136:61
StorageLive(_9); // scope 0 at /rustc/6284998a2677d7e3e8420db783f3aa4fd80d7423/library/std/src/macros.rs:136:28: 136:61
StorageLive(_10); // scope 0 at /rustc/6284998a2677d7e3e8420db783f3aa4fd80d7423/library/std/src/macros.rs:136:28: 136:61
StorageLive(_11); // scope 0 at /rustc/6284998a2677d7e3e8420db783f3aa4fd80d7423/library/std/src/macros.rs:136:28: 136:61
StorageLive(_12); // scope 0 at cheval.rs:2:20: 2:31
StorageLive(_13); // scope 0 at cheval.rs:2:20: 2:31
StorageLive(_14); // scope 0 at cheval.rs:2:20: 2:31
StorageLive(_15); // scope 0 at cheval.rs:2:20: 2:31
_15 = main_test() -> bb1; // scope 0 at cheval.rs:2:20: 2:31
// mir::Constant
// + span: cheval.rs:2:20: 2:29
// + literal: Const { ty: fn() -> i64 {main_test}, val: Value(<ZST>) }
}
bb1: {
_14 = &_15; // scope 0 at cheval.rs:2:20: 2:31
_13 = &(*_14); // scope 0 at cheval.rs:2:20: 2:31
_12 = ArgumentV1::<'_>::new_display::<i64>(move _13) -> bb2; // scope 0 at cheval.rs:2:20: 2:31
// mir::Constant
// + span: cheval.rs:2:20: 2:31
// + user_ty: UserType(1)
// + literal: Const { ty: for<'b> fn(&'b i64) -> ArgumentV1<'b> {ArgumentV1::<'_>::new_display::<i64>}, val: Value(<ZST>) }
}
bb2: {
StorageDead(_13); // scope 0 at cheval.rs:2:30: 2:31
_11 = [move _12]; // scope 0 at /rustc/6284998a2677d7e3e8420db783f3aa4fd80d7423/library/std/src/macros.rs:136:28: 136:61
StorageDead(_12); // scope 0 at /rustc/6284998a2677d7e3e8420db783f3aa4fd80d7423/library/std/src/macros.rs:136:60: 136:61
_10 = &_11; // scope 0 at /rustc/6284998a2677d7e3e8420db783f3aa4fd80d7423/library/std/src/macros.rs:136:28: 136:61
_9 = &(*_10); // scope 0 at /rustc/6284998a2677d7e3e8420db783f3aa4fd80d7423/library/std/src/macros.rs:136:28: 136:61
_8 = move _9 as &[std::fmt::ArgumentV1<'_>] (Pointer(Unsize)); // scope 0 at /rustc/6284998a2677d7e3e8420db783f3aa4fd80d7423/library/std/src/macros.rs:136:28: 136:61
StorageDead(_9); // scope 0 at /rustc/6284998a2677d7e3e8420db783f3aa4fd80d7423/library/std/src/macros.rs:136:60: 136:61
_3 = Arguments::<'_>::new_v1(move _4, move _8) -> bb3; // scope 0 at /rustc/6284998a2677d7e3e8420db783f3aa4fd80d7423/library/std/src/macros.rs:136:28: 136:61
// mir::Constant
// + span: /rustc/6284998a2677d7e3e8420db783f3aa4fd80d7423/library/std/src/macros.rs:136:28: 136:61
// + user_ty: UserType(0)
// + literal: Const { ty: fn(&[&'static str], &[ArgumentV1<'_>]) -> Arguments<'_> {Arguments::<'_>::new_v1}, val: Value(<ZST>) }
}
bb3: {
StorageDead(_8); // scope 0 at /rustc/6284998a2677d7e3e8420db783f3aa4fd80d7423/library/std/src/macros.rs:136:60: 136:61
StorageDead(_4); // scope 0 at /rustc/6284998a2677d7e3e8420db783f3aa4fd80d7423/library/std/src/macros.rs:136:60: 136:61
_2 = _print(move _3) -> bb4; // scope 0 at /rustc/6284998a2677d7e3e8420db783f3aa4fd80d7423/library/std/src/macros.rs:136:9: 136:62
// mir::Constant
// + span: /rustc/6284998a2677d7e3e8420db783f3aa4fd80d7423/library/std/src/macros.rs:136:9: 136:27
// + literal: Const { ty: for<'a> fn(Arguments<'a>) {_print}, val: Value(<ZST>) }
}
bb4: {
StorageDead(_3); // scope 0 at /rustc/6284998a2677d7e3e8420db783f3aa4fd80d7423/library/std/src/macros.rs:136:61: 136:62
StorageDead(_15); // scope 0 at /rustc/6284998a2677d7e3e8420db783f3aa4fd80d7423/library/std/src/macros.rs:136:62: 136:63
StorageDead(_14); // scope 0 at /rustc/6284998a2677d7e3e8420db783f3aa4fd80d7423/library/std/src/macros.rs:136:62: 136:63
StorageDead(_11); // scope 0 at /rustc/6284998a2677d7e3e8420db783f3aa4fd80d7423/library/std/src/macros.rs:136:62: 136:63
StorageDead(_10); // scope 0 at /rustc/6284998a2677d7e3e8420db783f3aa4fd80d7423/library/std/src/macros.rs:136:62: 136:63
StorageDead(_6); // scope 0 at /rustc/6284998a2677d7e3e8420db783f3aa4fd80d7423/library/std/src/macros.rs:136:62: 136:63
StorageDead(_2); // scope 0 at /rustc/6284998a2677d7e3e8420db783f3aa4fd80d7423/library/std/src/macros.rs:136:62: 136:63
_1 = const (); // scope 0 at /rustc/6284998a2677d7e3e8420db783f3aa4fd80d7423/library/std/src/macros.rs:135:23: 137:6
StorageDead(_1); // scope 0 at /rustc/6284998a2677d7e3e8420db783f3aa4fd80d7423/library/std/src/macros.rs:137:5: 137:6
_0 = const (); // scope 0 at cheval.rs:1:16: 3:2
return; // scope 0 at cheval.rs:3:2: 3:2
}
}
promoted[0] in main: &[&str; 2] = {
let mut _0: &[&str; 2]; // return place in scope 0 at cheval.rs:2:14: 2:18
let mut _1: [&str; 2]; // in scope 0 at cheval.rs:2:14: 2:18
bb0: {
_1 = [const "", const "\n"]; // scope 0 at cheval.rs:2:14: 2:18
// mir::Constant
// + span: cheval.rs:2:14: 2:18
// + literal: Const { ty: &str, val: Value(Slice(..)) }
// mir::Constant
// + span: cheval.rs:2:14: 2:18
// + literal: Const { ty: &str, val: Value(Slice(..)) }
_0 = &_1; // scope 0 at cheval.rs:2:14: 2:18
return; // scope 0 at cheval.rs:2:14: 2:18
}
}
fn main_test() -> i64 {
let mut _0: i64; // return place in scope 0 at cheval.rs:6:19: 6:22
let mut _1: [i64; 2]; // in scope 0 at cheval.rs:7:9: 7:16
let _2: (); // in scope 0 at cheval.rs:8:5: 8:24
let mut _3: &mut [i64]; // in scope 0 at cheval.rs:8:15: 8:23
let mut _4: &mut [i64; 2]; // in scope 0 at cheval.rs:8:15: 8:23
let mut _5: &mut [i64; 2]; // in scope 0 at cheval.rs:8:15: 8:23
let _6: usize; // in scope 0 at cheval.rs:9:9: 9:10
let mut _7: usize; // in scope 0 at cheval.rs:9:5: 9:11
let mut _8: bool; // in scope 0 at cheval.rs:9:5: 9:11
scope 1 {
debug arr => _1; // in scope 1 at cheval.rs:7:9: 7:16
}
bb0: {
StorageLive(_1); // scope 0 at cheval.rs:7:9: 7:16
_1 = [const 1_i64, const 2_i64]; // scope 0 at cheval.rs:7:19: 7:26
StorageLive(_2); // scope 1 at cheval.rs:8:5: 8:24
StorageLive(_3); // scope 1 at cheval.rs:8:15: 8:23
StorageLive(_4); // scope 1 at cheval.rs:8:15: 8:23
StorageLive(_5); // scope 1 at cheval.rs:8:15: 8:23
_5 = &mut _1; // scope 1 at cheval.rs:8:15: 8:23
_4 = &mut (*_5); // scope 1 at cheval.rs:8:15: 8:23
_3 = move _4 as &mut [i64] (Pointer(Unsize)); // scope 1 at cheval.rs:8:15: 8:23
StorageDead(_4); // scope 1 at cheval.rs:8:22: 8:23
_2 = fuse_test(move _3) -> bb1; // scope 1 at cheval.rs:8:5: 8:24
// mir::Constant
// + span: cheval.rs:8:5: 8:14
// + literal: Const { ty: for<'a> fn(&'a mut [i64]) {fuse_test}, val: Value(<ZST>) }
}
bb1: {
StorageDead(_3); // scope 1 at cheval.rs:8:23: 8:24
StorageDead(_5); // scope 1 at cheval.rs:8:24: 8:25
StorageDead(_2); // scope 1 at cheval.rs:8:24: 8:25
StorageLive(_6); // scope 1 at cheval.rs:9:9: 9:10
_6 = const 0_usize; // scope 1 at cheval.rs:9:9: 9:10
_7 = Len(_1); // scope 1 at cheval.rs:9:5: 9:11
_8 = Lt(_6, _7); // scope 1 at cheval.rs:9:5: 9:11
assert(move _8, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> bb2; // scope 1 at cheval.rs:9:5: 9:11
}
bb2: {
_0 = _1[_6]; // scope 1 at cheval.rs:9:5: 9:11
StorageDead(_1); // scope 0 at cheval.rs:10:1: 10:2
StorageDead(_6); // scope 0 at cheval.rs:10:1: 10:2
return; // scope 0 at cheval.rs:10:2: 10:2
}
}
fn fuse_test(_1: &mut [i64]) -> () {
debug arr => _1; // in scope 0 at cheval.rs:12:14: 12:17
let mut _0: (); // return place in scope 0 at cheval.rs:12:31: 12:31
let _2: usize; // in scope 0 at cheval.rs:13:5: 19:17
let mut _3: std::iter::Filter<std::iter::Map<std::slice::IterMut<'_, i64>, [closure@cheval.rs:14:14: 14:17]>, [closure@cheval.rs:18:17: 18:20]>; // in scope 0 at cheval.rs:13:5: 18:34
let mut _4: std::iter::Map<std::slice::IterMut<'_, i64>, [closure@cheval.rs:14:14: 14:17]>; // in scope 0 at cheval.rs:13:5: 17:11
let mut _5: std::slice::IterMut<'_, i64>; // in scope 0 at cheval.rs:13:5: 13:19
let mut _6: &mut [i64]; // in scope 0 at cheval.rs:13:5: 13:19
let mut _7: [closure@cheval.rs:14:14: 14:17]; // in scope 0 at cheval.rs:14:14: 17:10
let mut _8: [closure@cheval.rs:18:17: 18:20]; // in scope 0 at cheval.rs:18:17: 18:33
bb0: {
StorageLive(_2); // scope 0 at cheval.rs:13:5: 19:17
StorageLive(_3); // scope 0 at cheval.rs:13:5: 18:34
StorageLive(_4); // scope 0 at cheval.rs:13:5: 17:11
StorageLive(_5); // scope 0 at cheval.rs:13:5: 13:19
StorageLive(_6); // scope 0 at cheval.rs:13:5: 13:19
_6 = &mut (*_1); // scope 0 at cheval.rs:13:5: 13:19
_5 = core::slice::<impl [i64]>::iter_mut(move _6) -> bb1; // scope 0 at cheval.rs:13:5: 13:19
// mir::Constant
// + span: cheval.rs:13:9: 13:17
// + literal: Const { ty: for<'a> fn(&'a mut [i64]) -> std::slice::IterMut<'a, i64> {core::slice::<impl [i64]>::iter_mut}, val: Value(<ZST>) }
}
bb1: {
StorageDead(_6); // scope 0 at cheval.rs:13:18: 13:19
StorageLive(_7); // scope 0 at cheval.rs:14:14: 17:10
Deinit(_7); // scope 0 at cheval.rs:14:14: 17:10
_4 = <std::slice::IterMut<'_, i64> as Iterator>::map::<i64, [closure@cheval.rs:14:14: 14:17]>(move _5, move _7) -> bb2; // scope 0 at cheval.rs:13:5: 17:11
// mir::Constant
// + span: cheval.rs:14:10: 14:13
// + literal: Const { ty: fn(std::slice::IterMut<'_, i64>, [closure@cheval.rs:14:14: 14:17]) -> Map<std::slice::IterMut<'_, i64>, [closure@cheval.rs:14:14: 14:17]> {<std::slice::IterMut<'_, i64> as Iterator>::map::<i64, [closure@cheval.rs:14:14: 14:17]>}, val: Value(<ZST>) }
}
bb2: {
StorageDead(_7); // scope 0 at cheval.rs:17:10: 17:11
StorageDead(_5); // scope 0 at cheval.rs:17:10: 17:11
StorageLive(_8); // scope 0 at cheval.rs:18:17: 18:33
Deinit(_8); // scope 0 at cheval.rs:18:17: 18:33
_3 = <Map<std::slice::IterMut<'_, i64>, [closure@cheval.rs:14:14: 14:17]> as Iterator>::filter::<[closure@cheval.rs:18:17: 18:20]>(move _4, move _8) -> bb3; // scope 0 at cheval.rs:13:5: 18:34
// mir::Constant
// + span: cheval.rs:18:10: 18:16
// + literal: Const { ty: fn(Map<std::slice::IterMut<'_, i64>, [closure@cheval.rs:14:14: 14:17]>, [closure@cheval.rs:18:17: 18:20]) -> Filter<Map<std::slice::IterMut<'_, i64>, [closure@cheval.rs:14:14: 14:17]>, [closure@cheval.rs:18:17: 18:20]> {<Map<std::slice::IterMut<'_, i64>, [closure@cheval.rs:14:14: 14:17]> as Iterator>::filter::<[closure@cheval.rs:18:17: 18:20]>}, val: Value(<ZST>) }
}
bb3: {
StorageDead(_8); // scope 0 at cheval.rs:18:33: 18:34
StorageDead(_4); // scope 0 at cheval.rs:18:33: 18:34
_2 = <Filter<Map<std::slice::IterMut<'_, i64>, [closure@cheval.rs:14:14: 14:17]>, [closure@cheval.rs:18:17: 18:20]> as Iterator>::count(move _3) -> bb4; // scope 0 at cheval.rs:13:5: 19:17
// mir::Constant
// + span: cheval.rs:19:10: 19:15
// + literal: Const { ty: fn(Filter<Map<std::slice::IterMut<'_, i64>, [closure@cheval.rs:14:14: 14:17]>, [closure@cheval.rs:18:17: 18:20]>) -> usize {<Filter<Map<std::slice::IterMut<'_, i64>, [closure@cheval.rs:14:14: 14:17]>, [closure@cheval.rs:18:17: 18:20]> as Iterator>::count}, val: Value(<ZST>) }
}
bb4: {
StorageDead(_3); // scope 0 at cheval.rs:19:16: 19:17
StorageDead(_2); // scope 0 at cheval.rs:19:17: 19:18
_0 = const (); // scope 0 at cheval.rs:12:31: 20:2
return; // scope 0 at cheval.rs:20:2: 20:2
}
}
fn fuse_test::{closure#0}(_1: &mut [closure@cheval.rs:14:14: 14:17], _2: &mut i64) -> i64 {
debug e => _2; // in scope 0 at cheval.rs:14:15: 14:16
let mut _0: i64; // return place in scope 0 at cheval.rs:14:18: 14:18
let mut _3: i64; // in scope 0 at cheval.rs:15:18: 15:20
bb0: {
StorageLive(_3); // scope 0 at cheval.rs:15:18: 15:20
_3 = (*_2); // scope 0 at cheval.rs:15:18: 15:20
(*_2) = Mul(move _3, const 5_i64); // scope 0 at cheval.rs:15:13: 15:24
StorageDead(_3); // scope 0 at cheval.rs:15:23: 15:24
_0 = (*_2); // scope 0 at cheval.rs:16:13: 16:15
return; // scope 0 at cheval.rs:17:10: 17:10
}
}
fn fuse_test::{closure#1}(_1: &mut [closure@cheval.rs:18:17: 18:20], _2: &i64) -> bool {
debug e => _2; // in scope 0 at cheval.rs:18:18: 18:19
let mut _0: bool; // return place in scope 0 at cheval.rs:18:21: 18:21
let mut _3: i64; // in scope 0 at cheval.rs:18:21: 18:28
let mut _4: i64; // in scope 0 at cheval.rs:18:21: 18:23
let mut _5: bool; // in scope 0 at cheval.rs:18:21: 18:28
let mut _6: bool; // in scope 0 at cheval.rs:18:21: 18:28
let mut _7: bool; // in scope 0 at cheval.rs:18:21: 18:28
let mut _8: bool; // in scope 0 at cheval.rs:18:21: 18:28
bb0: {
StorageLive(_3); // scope 0 at cheval.rs:18:21: 18:28
StorageLive(_4); // scope 0 at cheval.rs:18:21: 18:23
_4 = (*_2); // scope 0 at cheval.rs:18:21: 18:23
_5 = Eq(const 10_i64, const 0_i64); // scope 0 at cheval.rs:18:21: 18:28
assert(!move _5, "attempt to calculate the remainder of `{}` with a divisor of zero", _4) -> bb1; // scope 0 at cheval.rs:18:21: 18:28
}
bb1: {
_6 = Eq(const 10_i64, const -1_i64); // scope 0 at cheval.rs:18:21: 18:28
_7 = Eq(_4, const i64::MIN); // scope 0 at cheval.rs:18:21: 18:28
_8 = BitAnd(move _6, move _7); // scope 0 at cheval.rs:18:21: 18:28
assert(!move _8, "attempt to compute the remainder of `{} % {}`, which would overflow", _4, const 10_i64) -> bb2; // scope 0 at cheval.rs:18:21: 18:28
}
bb2: {
_3 = Rem(move _4, const 10_i64); // scope 0 at cheval.rs:18:21: 18:28
StorageDead(_4); // scope 0 at cheval.rs:18:27: 18:28
_0 = Eq(move _3, const 0_i64); // scope 0 at cheval.rs:18:21: 18:33
StorageDead(_3); // scope 0 at cheval.rs:18:32: 18:33
return; // scope 0 at cheval.rs:18:33: 18:33
}
}