Always propagate into operands.

This commit is contained in:
Camille GILLOT 2023-02-07 19:24:21 +00:00
parent 1554942cdc
commit 12a2edd149
50 changed files with 114 additions and 140 deletions

View file

@ -810,12 +810,7 @@ impl<'tcx> MutVisitor<'tcx> for ConstPropagator<'_, 'tcx> {
fn visit_operand(&mut self, operand: &mut Operand<'tcx>, location: Location) { fn visit_operand(&mut self, operand: &mut Operand<'tcx>, location: Location) {
self.super_operand(operand, location); self.super_operand(operand, location);
self.propagate_operand(operand)
// Only const prop copies and moves on `mir_opt_level=3` as doing so
// currently slightly increases compile time in some cases.
if self.tcx.sess.mir_opt_level() >= 3 {
self.propagate_operand(operand)
}
} }
fn process_projection_elem( fn process_projection_elem(

View file

@ -26,8 +26,9 @@
StorageLive(_4); StorageLive(_4);
StorageLive(_5); StorageLive(_5);
- _5 = _1; - _5 = _1;
- _4 = foo(move _5) -> [return: bb1, unwind unreachable];
+ _5 = const 1_u8; + _5 = const 1_u8;
_4 = foo(move _5) -> [return: bb1, unwind unreachable]; + _4 = foo(const 1_u8) -> [return: bb1, unwind unreachable];
} }
bb1: { bb1: {

View file

@ -26,8 +26,9 @@
StorageLive(_4); StorageLive(_4);
StorageLive(_5); StorageLive(_5);
- _5 = _1; - _5 = _1;
- _4 = foo(move _5) -> [return: bb1, unwind continue];
+ _5 = const 1_u8; + _5 = const 1_u8;
_4 = foo(move _5) -> [return: bb1, unwind continue]; + _4 = foo(const 1_u8) -> [return: bb1, unwind continue];
} }
bb1: { bb1: {

View file

@ -23,7 +23,7 @@ fn main() -> () {
StorageLive(_4); StorageLive(_4);
StorageLive(_5); StorageLive(_5);
_5 = const 1_u8; _5 = const 1_u8;
_4 = foo(move _5) -> [return: bb1, unwind unreachable]; _4 = foo(const 1_u8) -> [return: bb1, unwind unreachable];
} }
bb1: { bb1: {

View file

@ -23,7 +23,7 @@ fn main() -> () {
StorageLive(_4); StorageLive(_4);
StorageLive(_5); StorageLive(_5);
_5 = const 1_u8; _5 = const 1_u8;
_4 = foo(move _5) -> [return: bb1, unwind continue]; _4 = foo(const 1_u8) -> [return: bb1, unwind continue];
} }
bb1: { bb1: {

View file

@ -23,7 +23,7 @@
- assert(move _5, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> [success: bb1, unwind unreachable]; - assert(move _5, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> [success: bb1, unwind unreachable];
+ _4 = const 4_usize; + _4 = const 4_usize;
+ _5 = const true; + _5 = const true;
+ assert(const true, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> [success: bb1, unwind unreachable]; + assert(const true, "index out of bounds: the length is {} but the index is {}", const 4_usize, const 2_usize) -> [success: bb1, unwind unreachable];
} }
bb1: { bb1: {

View file

@ -23,7 +23,7 @@
- assert(move _5, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> [success: bb1, unwind continue]; - assert(move _5, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> [success: bb1, unwind continue];
+ _4 = const 4_usize; + _4 = const 4_usize;
+ _5 = const true; + _5 = const true;
+ assert(const true, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> [success: bb1, unwind continue]; + assert(const true, "index out of bounds: the length is {} but the index is {}", const 4_usize, const 2_usize) -> [success: bb1, unwind continue];
} }
bb1: { bb1: {

View file

@ -23,7 +23,7 @@
- assert(move _5, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> [success: bb1, unwind unreachable]; - assert(move _5, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> [success: bb1, unwind unreachable];
+ _4 = const 4_usize; + _4 = const 4_usize;
+ _5 = const true; + _5 = const true;
+ assert(const true, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> [success: bb1, unwind unreachable]; + assert(const true, "index out of bounds: the length is {} but the index is {}", const 4_usize, const 2_usize) -> [success: bb1, unwind unreachable];
} }
bb1: { bb1: {

View file

@ -23,7 +23,7 @@
- assert(move _5, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> [success: bb1, unwind continue]; - assert(move _5, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> [success: bb1, unwind continue];
+ _4 = const 4_usize; + _4 = const 4_usize;
+ _5 = const true; + _5 = const true;
+ assert(const true, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> [success: bb1, unwind continue]; + assert(const true, "index out of bounds: the length is {} but the index is {}", const 4_usize, const 2_usize) -> [success: bb1, unwind continue];
} }
bb1: { bb1: {

View file

@ -38,11 +38,12 @@
+ _5 = const false; + _5 = const false;
+ _6 = const false; + _6 = const false;
+ _7 = const false; + _7 = const false;
+ assert(!const false, "attempt to compute `{} / {}`, which would overflow", const 1_i32, _3) -> [success: bb2, unwind unreachable]; + assert(!const false, "attempt to compute `{} / {}`, which would overflow", const 1_i32, const 0_i32) -> [success: bb2, unwind unreachable];
} }
bb2: { bb2: {
_2 = Div(const 1_i32, move _3); - _2 = Div(const 1_i32, move _3);
+ _2 = Div(const 1_i32, const 0_i32);
StorageDead(_3); StorageDead(_3);
_0 = const (); _0 = const ();
StorageDead(_2); StorageDead(_2);

View file

@ -38,11 +38,12 @@
+ _5 = const false; + _5 = const false;
+ _6 = const false; + _6 = const false;
+ _7 = const false; + _7 = const false;
+ assert(!const false, "attempt to compute `{} / {}`, which would overflow", const 1_i32, _3) -> [success: bb2, unwind continue]; + assert(!const false, "attempt to compute `{} / {}`, which would overflow", const 1_i32, const 0_i32) -> [success: bb2, unwind continue];
} }
bb2: { bb2: {
_2 = Div(const 1_i32, move _3); - _2 = Div(const 1_i32, move _3);
+ _2 = Div(const 1_i32, const 0_i32);
StorageDead(_3); StorageDead(_3);
_0 = const (); _0 = const ();
StorageDead(_2); StorageDead(_2);

View file

@ -38,11 +38,12 @@
+ _5 = const false; + _5 = const false;
+ _6 = const false; + _6 = const false;
+ _7 = const false; + _7 = const false;
+ assert(!const false, "attempt to compute the remainder of `{} % {}`, which would overflow", const 1_i32, _3) -> [success: bb2, unwind unreachable]; + assert(!const false, "attempt to compute the remainder of `{} % {}`, which would overflow", const 1_i32, const 0_i32) -> [success: bb2, unwind unreachable];
} }
bb2: { bb2: {
_2 = Rem(const 1_i32, move _3); - _2 = Rem(const 1_i32, move _3);
+ _2 = Rem(const 1_i32, const 0_i32);
StorageDead(_3); StorageDead(_3);
_0 = const (); _0 = const ();
StorageDead(_2); StorageDead(_2);

View file

@ -38,11 +38,12 @@
+ _5 = const false; + _5 = const false;
+ _6 = const false; + _6 = const false;
+ _7 = const false; + _7 = const false;
+ assert(!const false, "attempt to compute the remainder of `{} % {}`, which would overflow", const 1_i32, _3) -> [success: bb2, unwind continue]; + assert(!const false, "attempt to compute the remainder of `{} % {}`, which would overflow", const 1_i32, const 0_i32) -> [success: bb2, unwind continue];
} }
bb2: { bb2: {
_2 = Rem(const 1_i32, move _3); - _2 = Rem(const 1_i32, move _3);
+ _2 = Rem(const 1_i32, const 0_i32);
StorageDead(_3); StorageDead(_3);
_0 = const (); _0 = const ();
StorageDead(_2); StorageDead(_2);

View file

@ -38,7 +38,7 @@
- _8 = Lt(_6, _7); - _8 = Lt(_6, _7);
- assert(move _8, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> [success: bb1, unwind unreachable]; - assert(move _8, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> [success: bb1, unwind unreachable];
+ _8 = const false; + _8 = const false;
+ assert(const false, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> [success: bb1, unwind unreachable]; + assert(const false, "index out of bounds: the length is {} but the index is {}", const 3_usize, const 3_usize) -> [success: bb1, unwind unreachable];
} }
bb1: { bb1: {

View file

@ -38,7 +38,7 @@
- _8 = Lt(_6, _7); - _8 = Lt(_6, _7);
- assert(move _8, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> [success: bb1, unwind continue]; - assert(move _8, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> [success: bb1, unwind continue];
+ _8 = const false; + _8 = const false;
+ assert(const false, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> [success: bb1, unwind continue]; + assert(const false, "index out of bounds: the length is {} but the index is {}", const 3_usize, const 3_usize) -> [success: bb1, unwind continue];
} }
bb1: { bb1: {

View file

@ -38,7 +38,7 @@
- _8 = Lt(_6, _7); - _8 = Lt(_6, _7);
- assert(move _8, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> [success: bb1, unwind unreachable]; - assert(move _8, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> [success: bb1, unwind unreachable];
+ _8 = const false; + _8 = const false;
+ assert(const false, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> [success: bb1, unwind unreachable]; + assert(const false, "index out of bounds: the length is {} but the index is {}", const 3_usize, const 3_usize) -> [success: bb1, unwind unreachable];
} }
bb1: { bb1: {

View file

@ -38,7 +38,7 @@
- _8 = Lt(_6, _7); - _8 = Lt(_6, _7);
- assert(move _8, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> [success: bb1, unwind continue]; - assert(move _8, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> [success: bb1, unwind continue];
+ _8 = const false; + _8 = const false;
+ assert(const false, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> [success: bb1, unwind continue]; + assert(const false, "index out of bounds: the length is {} but the index is {}", const 3_usize, const 3_usize) -> [success: bb1, unwind continue];
} }
bb1: { bb1: {

View file

@ -24,9 +24,10 @@
StorageLive(_3); StorageLive(_3);
- _4 = SizeOf(i32); - _4 = SizeOf(i32);
- _5 = AlignOf(i32); - _5 = AlignOf(i32);
- _6 = alloc::alloc::exchange_malloc(move _4, move _5) -> [return: bb1, unwind unreachable];
+ _4 = const 4_usize; + _4 = const 4_usize;
+ _5 = const 4_usize; + _5 = const 4_usize;
_6 = alloc::alloc::exchange_malloc(move _4, move _5) -> [return: bb1, unwind unreachable]; + _6 = alloc::alloc::exchange_malloc(const 4_usize, const 4_usize) -> [return: bb1, unwind unreachable];
} }
bb1: { bb1: {

View file

@ -24,9 +24,10 @@
StorageLive(_3); StorageLive(_3);
- _4 = SizeOf(i32); - _4 = SizeOf(i32);
- _5 = AlignOf(i32); - _5 = AlignOf(i32);
- _6 = alloc::alloc::exchange_malloc(move _4, move _5) -> [return: bb1, unwind continue];
+ _4 = const 4_usize; + _4 = const 4_usize;
+ _5 = const 4_usize; + _5 = const 4_usize;
_6 = alloc::alloc::exchange_malloc(move _4, move _5) -> [return: bb1, unwind continue]; + _6 = alloc::alloc::exchange_malloc(const 4_usize, const 4_usize) -> [return: bb1, unwind continue];
} }
bb1: { bb1: {

View file

@ -18,7 +18,7 @@
- assert(!move (_3.1: bool), "attempt to compute `{} + {}`, which would overflow", move _2, const 1_u8) -> [success: bb1, unwind unreachable]; - assert(!move (_3.1: bool), "attempt to compute `{} + {}`, which would overflow", move _2, const 1_u8) -> [success: bb1, unwind unreachable];
+ _2 = const 2_u8; + _2 = const 2_u8;
+ _3 = const (3_u8, false); + _3 = const (3_u8, false);
+ assert(!const false, "attempt to compute `{} + {}`, which would overflow", move _2, const 1_u8) -> [success: bb1, unwind unreachable]; + assert(!const false, "attempt to compute `{} + {}`, which would overflow", const 2_u8, const 1_u8) -> [success: bb1, unwind unreachable];
} }
bb1: { bb1: {

View file

@ -18,7 +18,7 @@
- assert(!move (_3.1: bool), "attempt to compute `{} + {}`, which would overflow", move _2, const 1_u8) -> [success: bb1, unwind continue]; - assert(!move (_3.1: bool), "attempt to compute `{} + {}`, which would overflow", move _2, const 1_u8) -> [success: bb1, unwind continue];
+ _2 = const 2_u8; + _2 = const 2_u8;
+ _3 = const (3_u8, false); + _3 = const (3_u8, false);
+ assert(!const false, "attempt to compute `{} + {}`, which would overflow", move _2, const 1_u8) -> [success: bb1, unwind continue]; + assert(!const false, "attempt to compute `{} + {}`, which would overflow", const 2_u8, const 1_u8) -> [success: bb1, unwind continue];
} }
bb1: { bb1: {

View file

@ -23,7 +23,7 @@
- _4 = CheckedAdd(_2, _3); - _4 = CheckedAdd(_2, _3);
- assert(!move (_4.1: bool), "attempt to compute `{} + {}`, which would overflow", _2, _3) -> [success: bb1, unwind unreachable]; - assert(!move (_4.1: bool), "attempt to compute `{} + {}`, which would overflow", _2, _3) -> [success: bb1, unwind unreachable];
+ _4 = const (0_u8, true); + _4 = const (0_u8, true);
+ assert(!const true, "attempt to compute `{} + {}`, which would overflow", _2, _3) -> [success: bb1, unwind unreachable]; + assert(!const true, "attempt to compute `{} + {}`, which would overflow", const u8::MAX, const 1_u8) -> [success: bb1, unwind unreachable];
} }
bb1: { bb1: {

View file

@ -23,7 +23,7 @@
- _4 = CheckedAdd(_2, _3); - _4 = CheckedAdd(_2, _3);
- assert(!move (_4.1: bool), "attempt to compute `{} + {}`, which would overflow", _2, _3) -> [success: bb1, unwind continue]; - assert(!move (_4.1: bool), "attempt to compute `{} + {}`, which would overflow", _2, _3) -> [success: bb1, unwind continue];
+ _4 = const (0_u8, true); + _4 = const (0_u8, true);
+ assert(!const true, "attempt to compute `{} + {}`, which would overflow", _2, _3) -> [success: bb1, unwind continue]; + assert(!const true, "attempt to compute `{} + {}`, which would overflow", const u8::MAX, const 1_u8) -> [success: bb1, unwind continue];
} }
bb1: { bb1: {

View file

@ -43,8 +43,9 @@
StorageLive(_5); StorageLive(_5);
_5 = InvalidTag { int: const 4_u32 }; _5 = InvalidTag { int: const 4_u32 };
- _4 = (_5.1: E); - _4 = (_5.1: E);
- _3 = [move _4];
+ _4 = const Scalar(0x00000004): E; + _4 = const Scalar(0x00000004): E;
_3 = [move _4]; + _3 = [const Scalar(0x00000004): E];
StorageDead(_4); StorageDead(_4);
StorageDead(_5); StorageDead(_5);
nop; nop;

View file

@ -23,7 +23,7 @@
- assert(move _5, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> [success: bb1, unwind unreachable]; - assert(move _5, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> [success: bb1, unwind unreachable];
+ _4 = const 5000_usize; + _4 = const 5000_usize;
+ _5 = const true; + _5 = const true;
+ assert(const true, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> [success: bb1, unwind unreachable]; + assert(const true, "index out of bounds: the length is {} but the index is {}", const 5000_usize, const 2_usize) -> [success: bb1, unwind unreachable];
} }
bb1: { bb1: {

View file

@ -23,7 +23,7 @@
- assert(move _5, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> [success: bb1, unwind continue]; - assert(move _5, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> [success: bb1, unwind continue];
+ _4 = const 5000_usize; + _4 = const 5000_usize;
+ _5 = const true; + _5 = const true;
+ assert(const true, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> [success: bb1, unwind continue]; + assert(const true, "index out of bounds: the length is {} but the index is {}", const 5000_usize, const 2_usize) -> [success: bb1, unwind continue];
} }
bb1: { bb1: {

View file

@ -23,7 +23,7 @@
- assert(move _5, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> [success: bb1, unwind unreachable]; - assert(move _5, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> [success: bb1, unwind unreachable];
+ _4 = const 5000_usize; + _4 = const 5000_usize;
+ _5 = const true; + _5 = const true;
+ assert(const true, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> [success: bb1, unwind unreachable]; + assert(const true, "index out of bounds: the length is {} but the index is {}", const 5000_usize, const 2_usize) -> [success: bb1, unwind unreachable];
} }
bb1: { bb1: {

View file

@ -23,7 +23,7 @@
- assert(move _5, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> [success: bb1, unwind continue]; - assert(move _5, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> [success: bb1, unwind continue];
+ _4 = const 5000_usize; + _4 = const 5000_usize;
+ _5 = const true; + _5 = const true;
+ assert(const true, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> [success: bb1, unwind continue]; + assert(const true, "index out of bounds: the length is {} but the index is {}", const 5000_usize, const 2_usize) -> [success: bb1, unwind continue];
} }
bb1: { bb1: {

View file

@ -28,8 +28,9 @@
StorageLive(_1); StorageLive(_1);
StorageLive(_2); StorageLive(_2);
- _2 = OffsetOf(Alpha, [0]); - _2 = OffsetOf(Alpha, [0]);
- _1 = must_use::<usize>(move _2) -> [return: bb1, unwind unreachable];
+ _2 = const 4_usize; + _2 = const 4_usize;
_1 = must_use::<usize>(move _2) -> [return: bb1, unwind unreachable]; + _1 = must_use::<usize>(const 4_usize) -> [return: bb1, unwind unreachable];
} }
bb1: { bb1: {
@ -37,8 +38,9 @@
StorageLive(_3); StorageLive(_3);
StorageLive(_4); StorageLive(_4);
- _4 = OffsetOf(Alpha, [1]); - _4 = OffsetOf(Alpha, [1]);
- _3 = must_use::<usize>(move _4) -> [return: bb2, unwind unreachable];
+ _4 = const 0_usize; + _4 = const 0_usize;
_3 = must_use::<usize>(move _4) -> [return: bb2, unwind unreachable]; + _3 = must_use::<usize>(const 0_usize) -> [return: bb2, unwind unreachable];
} }
bb2: { bb2: {
@ -46,8 +48,9 @@
StorageLive(_5); StorageLive(_5);
StorageLive(_6); StorageLive(_6);
- _6 = OffsetOf(Alpha, [2, 0]); - _6 = OffsetOf(Alpha, [2, 0]);
- _5 = must_use::<usize>(move _6) -> [return: bb3, unwind unreachable];
+ _6 = const 2_usize; + _6 = const 2_usize;
_5 = must_use::<usize>(move _6) -> [return: bb3, unwind unreachable]; + _5 = must_use::<usize>(const 2_usize) -> [return: bb3, unwind unreachable];
} }
bb3: { bb3: {
@ -55,8 +58,9 @@
StorageLive(_7); StorageLive(_7);
StorageLive(_8); StorageLive(_8);
- _8 = OffsetOf(Alpha, [2, 1]); - _8 = OffsetOf(Alpha, [2, 1]);
- _7 = must_use::<usize>(move _8) -> [return: bb4, unwind unreachable];
+ _8 = const 3_usize; + _8 = const 3_usize;
_7 = must_use::<usize>(move _8) -> [return: bb4, unwind unreachable]; + _7 = must_use::<usize>(const 3_usize) -> [return: bb4, unwind unreachable];
} }
bb4: { bb4: {

View file

@ -28,8 +28,9 @@
StorageLive(_1); StorageLive(_1);
StorageLive(_2); StorageLive(_2);
- _2 = OffsetOf(Alpha, [0]); - _2 = OffsetOf(Alpha, [0]);
- _1 = must_use::<usize>(move _2) -> [return: bb1, unwind continue];
+ _2 = const 4_usize; + _2 = const 4_usize;
_1 = must_use::<usize>(move _2) -> [return: bb1, unwind continue]; + _1 = must_use::<usize>(const 4_usize) -> [return: bb1, unwind continue];
} }
bb1: { bb1: {
@ -37,8 +38,9 @@
StorageLive(_3); StorageLive(_3);
StorageLive(_4); StorageLive(_4);
- _4 = OffsetOf(Alpha, [1]); - _4 = OffsetOf(Alpha, [1]);
- _3 = must_use::<usize>(move _4) -> [return: bb2, unwind continue];
+ _4 = const 0_usize; + _4 = const 0_usize;
_3 = must_use::<usize>(move _4) -> [return: bb2, unwind continue]; + _3 = must_use::<usize>(const 0_usize) -> [return: bb2, unwind continue];
} }
bb2: { bb2: {
@ -46,8 +48,9 @@
StorageLive(_5); StorageLive(_5);
StorageLive(_6); StorageLive(_6);
- _6 = OffsetOf(Alpha, [2, 0]); - _6 = OffsetOf(Alpha, [2, 0]);
- _5 = must_use::<usize>(move _6) -> [return: bb3, unwind continue];
+ _6 = const 2_usize; + _6 = const 2_usize;
_5 = must_use::<usize>(move _6) -> [return: bb3, unwind continue]; + _5 = must_use::<usize>(const 2_usize) -> [return: bb3, unwind continue];
} }
bb3: { bb3: {
@ -55,8 +58,9 @@
StorageLive(_7); StorageLive(_7);
StorageLive(_8); StorageLive(_8);
- _8 = OffsetOf(Alpha, [2, 1]); - _8 = OffsetOf(Alpha, [2, 1]);
- _7 = must_use::<usize>(move _8) -> [return: bb4, unwind continue];
+ _8 = const 3_usize; + _8 = const 3_usize;
_7 = must_use::<usize>(move _8) -> [return: bb4, unwind continue]; + _7 = must_use::<usize>(const 3_usize) -> [return: bb4, unwind continue];
} }
bb4: { bb4: {

View file

@ -25,7 +25,7 @@
- assert(move _6, "index out of bounds: the length is {} but the index is {}", move _5, _4) -> [success: bb1, unwind unreachable]; - assert(move _6, "index out of bounds: the length is {} but the index is {}", move _5, _4) -> [success: bb1, unwind unreachable];
+ _5 = const 8_usize; + _5 = const 8_usize;
+ _6 = const true; + _6 = const true;
+ assert(const true, "index out of bounds: the length is {} but the index is {}", move _5, _4) -> [success: bb1, unwind unreachable]; + assert(const true, "index out of bounds: the length is {} but the index is {}", const 8_usize, const 2_usize) -> [success: bb1, unwind unreachable];
} }
bb1: { bb1: {

View file

@ -25,7 +25,7 @@
- assert(move _6, "index out of bounds: the length is {} but the index is {}", move _5, _4) -> [success: bb1, unwind continue]; - assert(move _6, "index out of bounds: the length is {} but the index is {}", move _5, _4) -> [success: bb1, unwind continue];
+ _5 = const 8_usize; + _5 = const 8_usize;
+ _6 = const true; + _6 = const true;
+ assert(const true, "index out of bounds: the length is {} but the index is {}", move _5, _4) -> [success: bb1, unwind continue]; + assert(const true, "index out of bounds: the length is {} but the index is {}", const 8_usize, const 2_usize) -> [success: bb1, unwind continue];
} }
bb1: { bb1: {

View file

@ -25,7 +25,7 @@
- assert(move _6, "index out of bounds: the length is {} but the index is {}", move _5, _4) -> [success: bb1, unwind unreachable]; - assert(move _6, "index out of bounds: the length is {} but the index is {}", move _5, _4) -> [success: bb1, unwind unreachable];
+ _5 = const 8_usize; + _5 = const 8_usize;
+ _6 = const true; + _6 = const true;
+ assert(const true, "index out of bounds: the length is {} but the index is {}", move _5, _4) -> [success: bb1, unwind unreachable]; + assert(const true, "index out of bounds: the length is {} but the index is {}", const 8_usize, const 2_usize) -> [success: bb1, unwind unreachable];
} }
bb1: { bb1: {

View file

@ -25,7 +25,7 @@
- assert(move _6, "index out of bounds: the length is {} but the index is {}", move _5, _4) -> [success: bb1, unwind continue]; - assert(move _6, "index out of bounds: the length is {} but the index is {}", move _5, _4) -> [success: bb1, unwind continue];
+ _5 = const 8_usize; + _5 = const 8_usize;
+ _6 = const true; + _6 = const true;
+ assert(const true, "index out of bounds: the length is {} but the index is {}", move _5, _4) -> [success: bb1, unwind continue]; + assert(const true, "index out of bounds: the length is {} but the index is {}", const 8_usize, const 2_usize) -> [success: bb1, unwind continue];
} }
bb1: { bb1: {

View file

@ -16,8 +16,9 @@
StorageLive(_2); StorageLive(_2);
StorageLive(_3); StorageLive(_3);
- _3 = _1; - _3 = _1;
- _2 = consume(move _3) -> [return: bb1, unwind unreachable];
+ _3 = const 1_u32; + _3 = const 1_u32;
_2 = consume(move _3) -> [return: bb1, unwind unreachable]; + _2 = consume(const 1_u32) -> [return: bb1, unwind unreachable];
} }
bb1: { bb1: {

View file

@ -16,8 +16,9 @@
StorageLive(_2); StorageLive(_2);
StorageLive(_3); StorageLive(_3);
- _3 = _1; - _3 = _1;
- _2 = consume(move _3) -> [return: bb1, unwind continue];
+ _3 = const 1_u32; + _3 = const 1_u32;
_2 = consume(move _3) -> [return: bb1, unwind continue]; + _2 = consume(const 1_u32) -> [return: bb1, unwind continue];
} }
bb1: { bb1: {

View file

@ -30,7 +30,7 @@
- assert(move _8, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> [success: bb1, unwind unreachable]; - assert(move _8, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> [success: bb1, unwind unreachable];
+ _7 = const 3_usize; + _7 = const 3_usize;
+ _8 = const true; + _8 = const true;
+ assert(const true, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> [success: bb1, unwind unreachable]; + assert(const true, "index out of bounds: the length is {} but the index is {}", const 3_usize, const 1_usize) -> [success: bb1, unwind unreachable];
} }
bb1: { bb1: {

View file

@ -30,7 +30,7 @@
- assert(move _8, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> [success: bb1, unwind continue]; - assert(move _8, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> [success: bb1, unwind continue];
+ _7 = const 3_usize; + _7 = const 3_usize;
+ _8 = const true; + _8 = const true;
+ assert(const true, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> [success: bb1, unwind continue]; + assert(const true, "index out of bounds: the length is {} but the index is {}", const 3_usize, const 1_usize) -> [success: bb1, unwind continue];
} }
bb1: { bb1: {

View file

@ -30,7 +30,7 @@
- assert(move _8, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> [success: bb1, unwind unreachable]; - assert(move _8, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> [success: bb1, unwind unreachable];
+ _7 = const 3_usize; + _7 = const 3_usize;
+ _8 = const true; + _8 = const true;
+ assert(const true, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> [success: bb1, unwind unreachable]; + assert(const true, "index out of bounds: the length is {} but the index is {}", const 3_usize, const 1_usize) -> [success: bb1, unwind unreachable];
} }
bb1: { bb1: {

View file

@ -30,7 +30,7 @@
- assert(move _8, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> [success: bb1, unwind continue]; - assert(move _8, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> [success: bb1, unwind continue];
+ _7 = const 3_usize; + _7 = const 3_usize;
+ _8 = const true; + _8 = const true;
+ assert(const true, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> [success: bb1, unwind continue]; + assert(const true, "index out of bounds: the length is {} but the index is {}", const 3_usize, const 1_usize) -> [success: bb1, unwind continue];
} }
bb1: { bb1: {

View file

@ -12,7 +12,6 @@
+ debug rhs => _4; + debug rhs => _4;
+ let mut _5: u16; + let mut _5: u16;
+ let mut _6: bool; + let mut _6: bool;
+ let mut _7: u32;
+ scope 2 { + scope 2 {
+ } + }
+ } + }
@ -28,10 +27,7 @@
- bb1: { - bb1: {
+ StorageLive(_5); + StorageLive(_5);
+ StorageLive(_6); + StorageLive(_6);
+ StorageLive(_7); + _6 = Le(_4, const 65535_u32);
+ _7 = const 65535_u32;
+ _6 = Le(_4, move _7);
+ StorageDead(_7);
+ assume(move _6); + assume(move _6);
+ StorageDead(_6); + StorageDead(_6);
+ _5 = _4 as u16 (IntToInt); + _5 = _4 as u16 (IntToInt);

View file

@ -12,7 +12,6 @@
+ debug rhs => _4; + debug rhs => _4;
+ let mut _5: u16; + let mut _5: u16;
+ let mut _6: bool; + let mut _6: bool;
+ let mut _7: u32;
+ scope 2 { + scope 2 {
+ } + }
+ } + }
@ -28,10 +27,7 @@
- bb1: { - bb1: {
+ StorageLive(_5); + StorageLive(_5);
+ StorageLive(_6); + StorageLive(_6);
+ StorageLive(_7); + _6 = Le(_4, const 65535_u32);
+ _7 = const 65535_u32;
+ _6 = Le(_4, move _7);
+ StorageDead(_7);
+ assume(move _6); + assume(move _6);
+ StorageDead(_6); + StorageDead(_6);
+ _5 = _4 as u16 (IntToInt); + _5 = _4 as u16 (IntToInt);

View file

@ -7,25 +7,21 @@ fn unchecked_shl_unsigned_smaller(_1: u16, _2: u32) -> u16 {
scope 1 (inlined core::num::<impl u16>::unchecked_shl) { scope 1 (inlined core::num::<impl u16>::unchecked_shl) {
debug self => _1; debug self => _1;
debug rhs => _2; debug rhs => _2;
let mut _3: u32; let mut _3: bool;
let mut _4: bool; let mut _4: u16;
let mut _5: u16;
scope 2 { scope 2 {
} }
} }
bb0: { bb0: {
StorageLive(_5);
StorageLive(_4); StorageLive(_4);
StorageLive(_3); StorageLive(_3);
_3 = const 65535_u32; _3 = Le(_2, const 65535_u32);
_4 = Le(_2, move _3); assume(move _3);
StorageDead(_3); StorageDead(_3);
assume(move _4); _4 = _2 as u16 (IntToInt);
_0 = ShlUnchecked(_1, move _4);
StorageDead(_4); StorageDead(_4);
_5 = _2 as u16 (IntToInt);
_0 = ShlUnchecked(_1, move _5);
StorageDead(_5);
return; return;
} }
} }

View file

@ -7,25 +7,21 @@ fn unchecked_shl_unsigned_smaller(_1: u16, _2: u32) -> u16 {
scope 1 (inlined core::num::<impl u16>::unchecked_shl) { scope 1 (inlined core::num::<impl u16>::unchecked_shl) {
debug self => _1; debug self => _1;
debug rhs => _2; debug rhs => _2;
let mut _3: u32; let mut _3: bool;
let mut _4: bool; let mut _4: u16;
let mut _5: u16;
scope 2 { scope 2 {
} }
} }
bb0: { bb0: {
StorageLive(_5);
StorageLive(_4); StorageLive(_4);
StorageLive(_3); StorageLive(_3);
_3 = const 65535_u32; _3 = Le(_2, const 65535_u32);
_4 = Le(_2, move _3); assume(move _3);
StorageDead(_3); StorageDead(_3);
assume(move _4); _4 = _2 as u16 (IntToInt);
_0 = ShlUnchecked(_1, move _4);
StorageDead(_4); StorageDead(_4);
_5 = _2 as u16 (IntToInt);
_0 = ShlUnchecked(_1, move _5);
StorageDead(_5);
return; return;
} }
} }

View file

@ -12,7 +12,6 @@
+ debug rhs => _4; + debug rhs => _4;
+ let mut _5: i16; + let mut _5: i16;
+ let mut _6: bool; + let mut _6: bool;
+ let mut _7: u32;
+ scope 2 { + scope 2 {
+ } + }
+ } + }
@ -28,10 +27,7 @@
- bb1: { - bb1: {
+ StorageLive(_5); + StorageLive(_5);
+ StorageLive(_6); + StorageLive(_6);
+ StorageLive(_7); + _6 = Le(_4, const 32767_u32);
+ _7 = const 32767_u32;
+ _6 = Le(_4, move _7);
+ StorageDead(_7);
+ assume(move _6); + assume(move _6);
+ StorageDead(_6); + StorageDead(_6);
+ _5 = _4 as i16 (IntToInt); + _5 = _4 as i16 (IntToInt);

View file

@ -12,7 +12,6 @@
+ debug rhs => _4; + debug rhs => _4;
+ let mut _5: i16; + let mut _5: i16;
+ let mut _6: bool; + let mut _6: bool;
+ let mut _7: u32;
+ scope 2 { + scope 2 {
+ } + }
+ } + }
@ -28,10 +27,7 @@
- bb1: { - bb1: {
+ StorageLive(_5); + StorageLive(_5);
+ StorageLive(_6); + StorageLive(_6);
+ StorageLive(_7); + _6 = Le(_4, const 32767_u32);
+ _7 = const 32767_u32;
+ _6 = Le(_4, move _7);
+ StorageDead(_7);
+ assume(move _6); + assume(move _6);
+ StorageDead(_6); + StorageDead(_6);
+ _5 = _4 as i16 (IntToInt); + _5 = _4 as i16 (IntToInt);

View file

@ -7,25 +7,21 @@ fn unchecked_shr_signed_smaller(_1: i16, _2: u32) -> i16 {
scope 1 (inlined core::num::<impl i16>::unchecked_shr) { scope 1 (inlined core::num::<impl i16>::unchecked_shr) {
debug self => _1; debug self => _1;
debug rhs => _2; debug rhs => _2;
let mut _3: u32; let mut _3: bool;
let mut _4: bool; let mut _4: i16;
let mut _5: i16;
scope 2 { scope 2 {
} }
} }
bb0: { bb0: {
StorageLive(_5);
StorageLive(_4); StorageLive(_4);
StorageLive(_3); StorageLive(_3);
_3 = const 32767_u32; _3 = Le(_2, const 32767_u32);
_4 = Le(_2, move _3); assume(move _3);
StorageDead(_3); StorageDead(_3);
assume(move _4); _4 = _2 as i16 (IntToInt);
_0 = ShrUnchecked(_1, move _4);
StorageDead(_4); StorageDead(_4);
_5 = _2 as i16 (IntToInt);
_0 = ShrUnchecked(_1, move _5);
StorageDead(_5);
return; return;
} }
} }

View file

@ -7,25 +7,21 @@ fn unchecked_shr_signed_smaller(_1: i16, _2: u32) -> i16 {
scope 1 (inlined core::num::<impl i16>::unchecked_shr) { scope 1 (inlined core::num::<impl i16>::unchecked_shr) {
debug self => _1; debug self => _1;
debug rhs => _2; debug rhs => _2;
let mut _3: u32; let mut _3: bool;
let mut _4: bool; let mut _4: i16;
let mut _5: i16;
scope 2 { scope 2 {
} }
} }
bb0: { bb0: {
StorageLive(_5);
StorageLive(_4); StorageLive(_4);
StorageLive(_3); StorageLive(_3);
_3 = const 32767_u32; _3 = Le(_2, const 32767_u32);
_4 = Le(_2, move _3); assume(move _3);
StorageDead(_3); StorageDead(_3);
assume(move _4); _4 = _2 as i16 (IntToInt);
_0 = ShrUnchecked(_1, move _4);
StorageDead(_4); StorageDead(_4);
_5 = _2 as i16 (IntToInt);
_0 = ShrUnchecked(_1, move _5);
StorageDead(_5);
return; return;
} }
} }

View file

@ -7,25 +7,24 @@ fn checked_shl(_1: u32, _2: u32) -> Option<u32> {
scope 1 (inlined core::num::<impl u32>::checked_shl) { scope 1 (inlined core::num::<impl u32>::checked_shl) {
debug self => _1; debug self => _1;
debug rhs => _2; debug rhs => _2;
let mut _7: bool; let mut _6: bool;
scope 2 { scope 2 {
debug a => _5; debug a => _4;
debug b => _6; debug b => _5;
} }
scope 3 (inlined core::num::<impl u32>::overflowing_shl) { scope 3 (inlined core::num::<impl u32>::overflowing_shl) {
debug self => _1; debug self => _1;
debug rhs => _2; debug rhs => _2;
let mut _5: u32; let mut _4: u32;
let mut _6: bool; let mut _5: bool;
scope 4 (inlined core::num::<impl u32>::wrapping_shl) { scope 4 (inlined core::num::<impl u32>::wrapping_shl) {
debug self => _1; debug self => _1;
debug rhs => _2; debug rhs => _2;
let mut _3: u32; let mut _3: u32;
let mut _4: u32;
scope 5 { scope 5 {
scope 6 (inlined core::num::<impl u32>::unchecked_shl) { scope 6 (inlined core::num::<impl u32>::unchecked_shl) {
debug self => _1; debug self => _1;
debug rhs => _4; debug rhs => _3;
scope 7 { scope 7 {
} }
} }
@ -35,26 +34,23 @@ fn checked_shl(_1: u32, _2: u32) -> Option<u32> {
} }
bb0: { bb0: {
StorageLive(_5);
StorageLive(_6);
StorageLive(_4); StorageLive(_4);
StorageLive(_5);
StorageLive(_3); StorageLive(_3);
_3 = const 31_u32; _3 = BitAnd(_2, const 31_u32);
_4 = BitAnd(_2, move _3); _4 = ShlUnchecked(_1, _3);
StorageDead(_3); StorageDead(_3);
_5 = ShlUnchecked(_1, _4); _5 = Ge(_2, const _);
StorageDead(_4); StorageLive(_6);
_6 = Ge(_2, const _); _6 = unlikely(move _5) -> [return: bb1, unwind unreachable];
StorageLive(_7);
_7 = unlikely(move _6) -> [return: bb1, unwind unreachable];
} }
bb1: { bb1: {
switchInt(move _7) -> [0: bb2, otherwise: bb3]; switchInt(move _6) -> [0: bb2, otherwise: bb3];
} }
bb2: { bb2: {
_0 = Option::<u32>::Some(_5); _0 = Option::<u32>::Some(_4);
goto -> bb4; goto -> bb4;
} }
@ -64,9 +60,9 @@ fn checked_shl(_1: u32, _2: u32) -> Option<u32> {
} }
bb4: { bb4: {
StorageDead(_7);
StorageDead(_6); StorageDead(_6);
StorageDead(_5); StorageDead(_5);
StorageDead(_4);
return; return;
} }
} }

View file

@ -2,22 +2,18 @@
fn f_u64() -> () { fn f_u64() -> () {
let mut _0: (); let mut _0: ();
let mut _1: u64;
scope 1 (inlined f_dispatch::<u64>) { scope 1 (inlined f_dispatch::<u64>) {
debug t => const 0_u64; debug t => const 0_u64;
let _2: (); let _1: ();
scope 2 (inlined std::mem::size_of::<u64>) { scope 2 (inlined std::mem::size_of::<u64>) {
} }
} }
bb0: { bb0: {
StorageLive(_1); _1 = f_non_zst::<u64>(const 0_u64) -> [return: bb1, unwind unreachable];
_1 = const 0_u64;
_2 = f_non_zst::<u64>(move _1) -> [return: bb1, unwind unreachable];
} }
bb1: { bb1: {
StorageDead(_1);
return; return;
} }
} }