Simplify MIR opt tests
This commit removes many cases of MIR opt tests emitting `.diff`s for more than one pass. These tests cannot be `unit-test`s, and so they are easy to break, and they also provide little value due to having excessively strong opinions over *how* a piece of code should be optimized. Where reasonable, we instead add separate test files that only emit the `PreCodegen.after` MIR for code where we want to track what the result of the net result of the optimization pipeline's output is.
This commit is contained in:
parent
10706d62da
commit
e5d60af3c6
58 changed files with 742 additions and 1509 deletions
|
@ -1,4 +1,6 @@
|
||||||
// compile-flags: -Z mir-opt-level=4 -Zunsound-mir-opts
|
// unit-test: EarlyOtherwiseBranch
|
||||||
|
|
||||||
|
// FIXME: This test was broken by the derefer change.
|
||||||
|
|
||||||
// example from #68867
|
// example from #68867
|
||||||
type CSSFloat = f32;
|
type CSSFloat = f32;
|
||||||
|
@ -11,7 +13,6 @@ pub enum ViewportPercentageLength {
|
||||||
}
|
}
|
||||||
|
|
||||||
// EMIT_MIR early_otherwise_branch_68867.try_sum.EarlyOtherwiseBranch.diff
|
// EMIT_MIR early_otherwise_branch_68867.try_sum.EarlyOtherwiseBranch.diff
|
||||||
// EMIT_MIR early_otherwise_branch_68867.try_sum EarlyOtherwiseBranch.before SimplifyConstCondition-final.after
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub extern "C" fn try_sum(
|
pub extern "C" fn try_sum(
|
||||||
x: &ViewportPercentageLength,
|
x: &ViewportPercentageLength,
|
||||||
|
|
|
@ -1,322 +0,0 @@
|
||||||
- // MIR for `try_sum` before EarlyOtherwiseBranch
|
|
||||||
+ // MIR for `try_sum` after SimplifyConstCondition-final
|
|
||||||
|
|
||||||
fn try_sum(_1: &ViewportPercentageLength, _2: &ViewportPercentageLength) -> Result<ViewportPercentageLength, ()> {
|
|
||||||
debug x => _1; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+1:5: +1:6
|
|
||||||
debug other => _2; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+2:5: +2:10
|
|
||||||
let mut _0: std::result::Result<ViewportPercentageLength, ()>; // return place in scope 0 at $DIR/early_otherwise_branch_68867.rs:+3:6: +3:42
|
|
||||||
let mut _3: ViewportPercentageLength; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:8: +11:6
|
|
||||||
let mut _4: (&ViewportPercentageLength, &ViewportPercentageLength); // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
|
|
||||||
let mut _5: &ViewportPercentageLength; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:15: +5:16
|
|
||||||
let mut _6: &ViewportPercentageLength; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:18: +5:23
|
|
||||||
let mut _7: isize; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+6:21: +6:30
|
|
||||||
let mut _8: isize; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+7:21: +7:30
|
|
||||||
let mut _9: isize; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+8:23: +8:34
|
|
||||||
let mut _10: isize; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+9:23: +9:34
|
|
||||||
let mut _11: isize; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+6:11: +6:18
|
|
||||||
let _12: f32; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+6:14: +6:17
|
|
||||||
let _13: f32; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+6:24: +6:29
|
|
||||||
let mut _14: f32; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+6:38: +6:49
|
|
||||||
let mut _15: f32; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+6:38: +6:41
|
|
||||||
let mut _16: f32; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+6:44: +6:49
|
|
||||||
let _17: f32; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+7:14: +7:17
|
|
||||||
let _18: f32; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+7:24: +7:29
|
|
||||||
let mut _19: f32; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+7:38: +7:49
|
|
||||||
let mut _20: f32; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+7:38: +7:41
|
|
||||||
let mut _21: f32; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+7:44: +7:49
|
|
||||||
let _22: f32; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+8:16: +8:19
|
|
||||||
let _23: f32; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+8:28: +8:33
|
|
||||||
let mut _24: f32; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+8:44: +8:55
|
|
||||||
let mut _25: f32; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+8:44: +8:47
|
|
||||||
let mut _26: f32; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+8:50: +8:55
|
|
||||||
let _27: f32; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+9:16: +9:19
|
|
||||||
let _28: f32; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+9:28: +9:33
|
|
||||||
let mut _29: f32; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+9:44: +9:55
|
|
||||||
let mut _30: f32; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+9:44: +9:47
|
|
||||||
let mut _31: f32; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+9:50: +9:55
|
|
||||||
let mut _32: !; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+10:14: +10:28
|
|
||||||
let mut _33: (); // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+10:25: +10:27
|
|
||||||
let mut _34: &ViewportPercentageLength; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
|
|
||||||
let mut _35: &ViewportPercentageLength; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
|
|
||||||
let mut _36: &ViewportPercentageLength; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
|
|
||||||
let mut _37: &ViewportPercentageLength; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
|
|
||||||
let mut _38: &ViewportPercentageLength; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
|
|
||||||
let mut _39: &ViewportPercentageLength; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
|
|
||||||
let mut _40: &ViewportPercentageLength; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
|
|
||||||
let mut _41: &ViewportPercentageLength; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
|
|
||||||
let mut _42: &ViewportPercentageLength; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
|
|
||||||
let mut _43: &ViewportPercentageLength; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
|
|
||||||
let mut _44: &ViewportPercentageLength; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
|
|
||||||
let mut _45: &ViewportPercentageLength; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
|
|
||||||
let mut _46: &ViewportPercentageLength; // in scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
|
|
||||||
scope 1 {
|
|
||||||
- debug one => _12; // in scope 1 at $DIR/early_otherwise_branch_68867.rs:+6:14: +6:17
|
|
||||||
- debug other => _13; // in scope 1 at $DIR/early_otherwise_branch_68867.rs:+6:24: +6:29
|
|
||||||
+ debug one => _15; // in scope 1 at $DIR/early_otherwise_branch_68867.rs:+6:14: +6:17
|
|
||||||
+ debug other => _16; // in scope 1 at $DIR/early_otherwise_branch_68867.rs:+6:24: +6:29
|
|
||||||
}
|
|
||||||
scope 2 {
|
|
||||||
- debug one => _17; // in scope 2 at $DIR/early_otherwise_branch_68867.rs:+7:14: +7:17
|
|
||||||
- debug other => _18; // in scope 2 at $DIR/early_otherwise_branch_68867.rs:+7:24: +7:29
|
|
||||||
+ debug one => _20; // in scope 2 at $DIR/early_otherwise_branch_68867.rs:+7:14: +7:17
|
|
||||||
+ debug other => _21; // in scope 2 at $DIR/early_otherwise_branch_68867.rs:+7:24: +7:29
|
|
||||||
}
|
|
||||||
scope 3 {
|
|
||||||
- debug one => _22; // in scope 3 at $DIR/early_otherwise_branch_68867.rs:+8:16: +8:19
|
|
||||||
- debug other => _23; // in scope 3 at $DIR/early_otherwise_branch_68867.rs:+8:28: +8:33
|
|
||||||
+ debug one => _25; // in scope 3 at $DIR/early_otherwise_branch_68867.rs:+8:16: +8:19
|
|
||||||
+ debug other => _26; // in scope 3 at $DIR/early_otherwise_branch_68867.rs:+8:28: +8:33
|
|
||||||
}
|
|
||||||
scope 4 {
|
|
||||||
- debug one => _27; // in scope 4 at $DIR/early_otherwise_branch_68867.rs:+9:16: +9:19
|
|
||||||
- debug other => _28; // in scope 4 at $DIR/early_otherwise_branch_68867.rs:+9:28: +9:33
|
|
||||||
+ debug one => _30; // in scope 4 at $DIR/early_otherwise_branch_68867.rs:+9:16: +9:19
|
|
||||||
+ debug other => _31; // in scope 4 at $DIR/early_otherwise_branch_68867.rs:+9:28: +9:33
|
|
||||||
}
|
|
||||||
|
|
||||||
bb0: {
|
|
||||||
- StorageLive(_3); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:8: +11:6
|
|
||||||
- StorageLive(_4); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
|
|
||||||
- StorageLive(_5); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:15: +5:16
|
|
||||||
- _5 = _1; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:15: +5:16
|
|
||||||
+ nop; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:8: +11:6
|
|
||||||
+ nop; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
|
|
||||||
+ nop; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:15: +5:16
|
|
||||||
+ (_4.0: &ViewportPercentageLength) = _1; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:15: +5:16
|
|
||||||
StorageLive(_6); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:18: +5:23
|
|
||||||
_6 = _2; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:18: +5:23
|
|
||||||
Deinit(_4); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
|
|
||||||
- (_4.0: &ViewportPercentageLength) = move _5; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
|
|
||||||
+ nop; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
|
|
||||||
(_4.1: &ViewportPercentageLength) = move _6; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
|
|
||||||
StorageDead(_6); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:23: +5:24
|
|
||||||
- StorageDead(_5); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:23: +5:24
|
|
||||||
+ nop; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:23: +5:24
|
|
||||||
_34 = deref_copy (_4.0: &ViewportPercentageLength); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
|
|
||||||
_11 = discriminant((*_34)); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
|
|
||||||
switchInt(move _11) -> [0_isize: bb1, 1_isize: bb3, 2_isize: bb4, 3_isize: bb5, otherwise: bb11]; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:8: +5:24
|
|
||||||
}
|
|
||||||
|
|
||||||
bb1: {
|
|
||||||
_35 = deref_copy (_4.1: &ViewportPercentageLength); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
|
|
||||||
_7 = discriminant((*_35)); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
|
|
||||||
switchInt(move _7) -> [0_isize: bb6, otherwise: bb2]; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:8: +5:24
|
|
||||||
}
|
|
||||||
|
|
||||||
bb2: {
|
|
||||||
StorageLive(_33); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+10:25: +10:27
|
|
||||||
nop; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+10:25: +10:27
|
|
||||||
Deinit(_0); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+10:21: +10:28
|
|
||||||
nop; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+10:21: +10:28
|
|
||||||
discriminant(_0) = 1; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+10:21: +10:28
|
|
||||||
StorageDead(_33); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+10:27: +10:28
|
|
||||||
- StorageDead(_3); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+11:6: +11:7
|
|
||||||
- StorageDead(_4); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+12:1: +12:2
|
|
||||||
+ nop; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+11:6: +11:7
|
|
||||||
+ nop; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+12:1: +12:2
|
|
||||||
return; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+12:2: +12:2
|
|
||||||
}
|
|
||||||
|
|
||||||
bb3: {
|
|
||||||
_36 = deref_copy (_4.1: &ViewportPercentageLength); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
|
|
||||||
_8 = discriminant((*_36)); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
|
|
||||||
switchInt(move _8) -> [1_isize: bb7, otherwise: bb2]; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:8: +5:24
|
|
||||||
}
|
|
||||||
|
|
||||||
bb4: {
|
|
||||||
_37 = deref_copy (_4.1: &ViewportPercentageLength); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
|
|
||||||
_9 = discriminant((*_37)); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
|
|
||||||
switchInt(move _9) -> [2_isize: bb8, otherwise: bb2]; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:8: +5:24
|
|
||||||
}
|
|
||||||
|
|
||||||
bb5: {
|
|
||||||
_38 = deref_copy (_4.1: &ViewportPercentageLength); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
|
|
||||||
_10 = discriminant((*_38)); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
|
|
||||||
switchInt(move _10) -> [3_isize: bb9, otherwise: bb2]; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:8: +5:24
|
|
||||||
}
|
|
||||||
|
|
||||||
bb6: {
|
|
||||||
- StorageLive(_12); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+6:14: +6:17
|
|
||||||
+ nop; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+6:14: +6:17
|
|
||||||
_39 = deref_copy (_4.0: &ViewportPercentageLength); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+6:14: +6:17
|
|
||||||
- _12 = (((*_39) as Vw).0: f32); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+6:14: +6:17
|
|
||||||
- StorageLive(_13); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+6:24: +6:29
|
|
||||||
+ _15 = (((*_39) as Vw).0: f32); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+6:14: +6:17
|
|
||||||
+ nop; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+6:24: +6:29
|
|
||||||
_40 = deref_copy (_4.1: &ViewportPercentageLength); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+6:24: +6:29
|
|
||||||
- _13 = (((*_40) as Vw).0: f32); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+6:24: +6:29
|
|
||||||
- StorageLive(_14); // scope 1 at $DIR/early_otherwise_branch_68867.rs:+6:38: +6:49
|
|
||||||
- StorageLive(_15); // scope 1 at $DIR/early_otherwise_branch_68867.rs:+6:38: +6:41
|
|
||||||
- _15 = _12; // scope 1 at $DIR/early_otherwise_branch_68867.rs:+6:38: +6:41
|
|
||||||
- StorageLive(_16); // scope 1 at $DIR/early_otherwise_branch_68867.rs:+6:44: +6:49
|
|
||||||
- _16 = _13; // scope 1 at $DIR/early_otherwise_branch_68867.rs:+6:44: +6:49
|
|
||||||
- _14 = Add(move _15, move _16); // scope 1 at $DIR/early_otherwise_branch_68867.rs:+6:38: +6:49
|
|
||||||
- StorageDead(_16); // scope 1 at $DIR/early_otherwise_branch_68867.rs:+6:48: +6:49
|
|
||||||
- StorageDead(_15); // scope 1 at $DIR/early_otherwise_branch_68867.rs:+6:48: +6:49
|
|
||||||
- Deinit(_3); // scope 1 at $DIR/early_otherwise_branch_68867.rs:+6:35: +6:50
|
|
||||||
- ((_3 as Vw).0: f32) = move _14; // scope 1 at $DIR/early_otherwise_branch_68867.rs:+6:35: +6:50
|
|
||||||
- discriminant(_3) = 0; // scope 1 at $DIR/early_otherwise_branch_68867.rs:+6:35: +6:50
|
|
||||||
- StorageDead(_14); // scope 1 at $DIR/early_otherwise_branch_68867.rs:+6:49: +6:50
|
|
||||||
- StorageDead(_13); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+6:49: +6:50
|
|
||||||
- StorageDead(_12); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+6:49: +6:50
|
|
||||||
+ _16 = (((*_40) as Vw).0: f32); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+6:24: +6:29
|
|
||||||
+ nop; // scope 1 at $DIR/early_otherwise_branch_68867.rs:+6:38: +6:49
|
|
||||||
+ nop; // scope 1 at $DIR/early_otherwise_branch_68867.rs:+6:38: +6:41
|
|
||||||
+ nop; // scope 1 at $DIR/early_otherwise_branch_68867.rs:+6:38: +6:41
|
|
||||||
+ nop; // scope 1 at $DIR/early_otherwise_branch_68867.rs:+6:44: +6:49
|
|
||||||
+ nop; // scope 1 at $DIR/early_otherwise_branch_68867.rs:+6:44: +6:49
|
|
||||||
+ ((((_0 as Ok).0: ViewportPercentageLength) as Vw).0: f32) = Add(move _15, move _16); // scope 1 at $DIR/early_otherwise_branch_68867.rs:+6:38: +6:49
|
|
||||||
+ nop; // scope 1 at $DIR/early_otherwise_branch_68867.rs:+6:48: +6:49
|
|
||||||
+ nop; // scope 1 at $DIR/early_otherwise_branch_68867.rs:+6:48: +6:49
|
|
||||||
+ Deinit(((_0 as Ok).0: ViewportPercentageLength)); // scope 1 at $DIR/early_otherwise_branch_68867.rs:+6:35: +6:50
|
|
||||||
+ nop; // scope 1 at $DIR/early_otherwise_branch_68867.rs:+6:35: +6:50
|
|
||||||
+ discriminant(((_0 as Ok).0: ViewportPercentageLength)) = 0; // scope 1 at $DIR/early_otherwise_branch_68867.rs:+6:35: +6:50
|
|
||||||
+ nop; // scope 1 at $DIR/early_otherwise_branch_68867.rs:+6:49: +6:50
|
|
||||||
+ nop; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+6:49: +6:50
|
|
||||||
+ nop; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+6:49: +6:50
|
|
||||||
goto -> bb10; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+6:49: +6:50
|
|
||||||
}
|
|
||||||
|
|
||||||
bb7: {
|
|
||||||
- StorageLive(_17); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+7:14: +7:17
|
|
||||||
+ nop; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+7:14: +7:17
|
|
||||||
_41 = deref_copy (_4.0: &ViewportPercentageLength); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+7:14: +7:17
|
|
||||||
- _17 = (((*_41) as Vh).0: f32); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+7:14: +7:17
|
|
||||||
- StorageLive(_18); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+7:24: +7:29
|
|
||||||
+ _20 = (((*_41) as Vh).0: f32); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+7:14: +7:17
|
|
||||||
+ nop; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+7:24: +7:29
|
|
||||||
_42 = deref_copy (_4.1: &ViewportPercentageLength); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+7:24: +7:29
|
|
||||||
- _18 = (((*_42) as Vh).0: f32); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+7:24: +7:29
|
|
||||||
- StorageLive(_19); // scope 2 at $DIR/early_otherwise_branch_68867.rs:+7:38: +7:49
|
|
||||||
- StorageLive(_20); // scope 2 at $DIR/early_otherwise_branch_68867.rs:+7:38: +7:41
|
|
||||||
- _20 = _17; // scope 2 at $DIR/early_otherwise_branch_68867.rs:+7:38: +7:41
|
|
||||||
- StorageLive(_21); // scope 2 at $DIR/early_otherwise_branch_68867.rs:+7:44: +7:49
|
|
||||||
- _21 = _18; // scope 2 at $DIR/early_otherwise_branch_68867.rs:+7:44: +7:49
|
|
||||||
- _19 = Add(move _20, move _21); // scope 2 at $DIR/early_otherwise_branch_68867.rs:+7:38: +7:49
|
|
||||||
- StorageDead(_21); // scope 2 at $DIR/early_otherwise_branch_68867.rs:+7:48: +7:49
|
|
||||||
- StorageDead(_20); // scope 2 at $DIR/early_otherwise_branch_68867.rs:+7:48: +7:49
|
|
||||||
- Deinit(_3); // scope 2 at $DIR/early_otherwise_branch_68867.rs:+7:35: +7:50
|
|
||||||
- ((_3 as Vh).0: f32) = move _19; // scope 2 at $DIR/early_otherwise_branch_68867.rs:+7:35: +7:50
|
|
||||||
- discriminant(_3) = 1; // scope 2 at $DIR/early_otherwise_branch_68867.rs:+7:35: +7:50
|
|
||||||
- StorageDead(_19); // scope 2 at $DIR/early_otherwise_branch_68867.rs:+7:49: +7:50
|
|
||||||
- StorageDead(_18); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+7:49: +7:50
|
|
||||||
- StorageDead(_17); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+7:49: +7:50
|
|
||||||
+ _21 = (((*_42) as Vh).0: f32); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+7:24: +7:29
|
|
||||||
+ nop; // scope 2 at $DIR/early_otherwise_branch_68867.rs:+7:38: +7:49
|
|
||||||
+ nop; // scope 2 at $DIR/early_otherwise_branch_68867.rs:+7:38: +7:41
|
|
||||||
+ nop; // scope 2 at $DIR/early_otherwise_branch_68867.rs:+7:38: +7:41
|
|
||||||
+ nop; // scope 2 at $DIR/early_otherwise_branch_68867.rs:+7:44: +7:49
|
|
||||||
+ nop; // scope 2 at $DIR/early_otherwise_branch_68867.rs:+7:44: +7:49
|
|
||||||
+ ((((_0 as Ok).0: ViewportPercentageLength) as Vh).0: f32) = Add(move _20, move _21); // scope 2 at $DIR/early_otherwise_branch_68867.rs:+7:38: +7:49
|
|
||||||
+ nop; // scope 2 at $DIR/early_otherwise_branch_68867.rs:+7:48: +7:49
|
|
||||||
+ nop; // scope 2 at $DIR/early_otherwise_branch_68867.rs:+7:48: +7:49
|
|
||||||
+ Deinit(((_0 as Ok).0: ViewportPercentageLength)); // scope 2 at $DIR/early_otherwise_branch_68867.rs:+7:35: +7:50
|
|
||||||
+ nop; // scope 2 at $DIR/early_otherwise_branch_68867.rs:+7:35: +7:50
|
|
||||||
+ discriminant(((_0 as Ok).0: ViewportPercentageLength)) = 1; // scope 2 at $DIR/early_otherwise_branch_68867.rs:+7:35: +7:50
|
|
||||||
+ nop; // scope 2 at $DIR/early_otherwise_branch_68867.rs:+7:49: +7:50
|
|
||||||
+ nop; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+7:49: +7:50
|
|
||||||
+ nop; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+7:49: +7:50
|
|
||||||
goto -> bb10; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+7:49: +7:50
|
|
||||||
}
|
|
||||||
|
|
||||||
bb8: {
|
|
||||||
- StorageLive(_22); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+8:16: +8:19
|
|
||||||
+ nop; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+8:16: +8:19
|
|
||||||
_43 = deref_copy (_4.0: &ViewportPercentageLength); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+8:16: +8:19
|
|
||||||
- _22 = (((*_43) as Vmin).0: f32); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+8:16: +8:19
|
|
||||||
- StorageLive(_23); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+8:28: +8:33
|
|
||||||
+ _25 = (((*_43) as Vmin).0: f32); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+8:16: +8:19
|
|
||||||
+ nop; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+8:28: +8:33
|
|
||||||
_44 = deref_copy (_4.1: &ViewportPercentageLength); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+8:28: +8:33
|
|
||||||
- _23 = (((*_44) as Vmin).0: f32); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+8:28: +8:33
|
|
||||||
- StorageLive(_24); // scope 3 at $DIR/early_otherwise_branch_68867.rs:+8:44: +8:55
|
|
||||||
- StorageLive(_25); // scope 3 at $DIR/early_otherwise_branch_68867.rs:+8:44: +8:47
|
|
||||||
- _25 = _22; // scope 3 at $DIR/early_otherwise_branch_68867.rs:+8:44: +8:47
|
|
||||||
- StorageLive(_26); // scope 3 at $DIR/early_otherwise_branch_68867.rs:+8:50: +8:55
|
|
||||||
- _26 = _23; // scope 3 at $DIR/early_otherwise_branch_68867.rs:+8:50: +8:55
|
|
||||||
- _24 = Add(move _25, move _26); // scope 3 at $DIR/early_otherwise_branch_68867.rs:+8:44: +8:55
|
|
||||||
- StorageDead(_26); // scope 3 at $DIR/early_otherwise_branch_68867.rs:+8:54: +8:55
|
|
||||||
- StorageDead(_25); // scope 3 at $DIR/early_otherwise_branch_68867.rs:+8:54: +8:55
|
|
||||||
- Deinit(_3); // scope 3 at $DIR/early_otherwise_branch_68867.rs:+8:39: +8:56
|
|
||||||
- ((_3 as Vmin).0: f32) = move _24; // scope 3 at $DIR/early_otherwise_branch_68867.rs:+8:39: +8:56
|
|
||||||
- discriminant(_3) = 2; // scope 3 at $DIR/early_otherwise_branch_68867.rs:+8:39: +8:56
|
|
||||||
- StorageDead(_24); // scope 3 at $DIR/early_otherwise_branch_68867.rs:+8:55: +8:56
|
|
||||||
- StorageDead(_23); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+8:55: +8:56
|
|
||||||
- StorageDead(_22); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+8:55: +8:56
|
|
||||||
+ _26 = (((*_44) as Vmin).0: f32); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+8:28: +8:33
|
|
||||||
+ nop; // scope 3 at $DIR/early_otherwise_branch_68867.rs:+8:44: +8:55
|
|
||||||
+ nop; // scope 3 at $DIR/early_otherwise_branch_68867.rs:+8:44: +8:47
|
|
||||||
+ nop; // scope 3 at $DIR/early_otherwise_branch_68867.rs:+8:44: +8:47
|
|
||||||
+ nop; // scope 3 at $DIR/early_otherwise_branch_68867.rs:+8:50: +8:55
|
|
||||||
+ nop; // scope 3 at $DIR/early_otherwise_branch_68867.rs:+8:50: +8:55
|
|
||||||
+ ((((_0 as Ok).0: ViewportPercentageLength) as Vmin).0: f32) = Add(move _25, move _26); // scope 3 at $DIR/early_otherwise_branch_68867.rs:+8:44: +8:55
|
|
||||||
+ nop; // scope 3 at $DIR/early_otherwise_branch_68867.rs:+8:54: +8:55
|
|
||||||
+ nop; // scope 3 at $DIR/early_otherwise_branch_68867.rs:+8:54: +8:55
|
|
||||||
+ Deinit(((_0 as Ok).0: ViewportPercentageLength)); // scope 3 at $DIR/early_otherwise_branch_68867.rs:+8:39: +8:56
|
|
||||||
+ nop; // scope 3 at $DIR/early_otherwise_branch_68867.rs:+8:39: +8:56
|
|
||||||
+ discriminant(((_0 as Ok).0: ViewportPercentageLength)) = 2; // scope 3 at $DIR/early_otherwise_branch_68867.rs:+8:39: +8:56
|
|
||||||
+ nop; // scope 3 at $DIR/early_otherwise_branch_68867.rs:+8:55: +8:56
|
|
||||||
+ nop; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+8:55: +8:56
|
|
||||||
+ nop; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+8:55: +8:56
|
|
||||||
goto -> bb10; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+8:55: +8:56
|
|
||||||
}
|
|
||||||
|
|
||||||
bb9: {
|
|
||||||
- StorageLive(_27); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+9:16: +9:19
|
|
||||||
+ nop; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+9:16: +9:19
|
|
||||||
_45 = deref_copy (_4.0: &ViewportPercentageLength); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+9:16: +9:19
|
|
||||||
- _27 = (((*_45) as Vmax).0: f32); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+9:16: +9:19
|
|
||||||
- StorageLive(_28); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+9:28: +9:33
|
|
||||||
+ _30 = (((*_45) as Vmax).0: f32); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+9:16: +9:19
|
|
||||||
+ nop; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+9:28: +9:33
|
|
||||||
_46 = deref_copy (_4.1: &ViewportPercentageLength); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+9:28: +9:33
|
|
||||||
- _28 = (((*_46) as Vmax).0: f32); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+9:28: +9:33
|
|
||||||
- StorageLive(_29); // scope 4 at $DIR/early_otherwise_branch_68867.rs:+9:44: +9:55
|
|
||||||
- StorageLive(_30); // scope 4 at $DIR/early_otherwise_branch_68867.rs:+9:44: +9:47
|
|
||||||
- _30 = _27; // scope 4 at $DIR/early_otherwise_branch_68867.rs:+9:44: +9:47
|
|
||||||
- StorageLive(_31); // scope 4 at $DIR/early_otherwise_branch_68867.rs:+9:50: +9:55
|
|
||||||
- _31 = _28; // scope 4 at $DIR/early_otherwise_branch_68867.rs:+9:50: +9:55
|
|
||||||
- _29 = Add(move _30, move _31); // scope 4 at $DIR/early_otherwise_branch_68867.rs:+9:44: +9:55
|
|
||||||
- StorageDead(_31); // scope 4 at $DIR/early_otherwise_branch_68867.rs:+9:54: +9:55
|
|
||||||
- StorageDead(_30); // scope 4 at $DIR/early_otherwise_branch_68867.rs:+9:54: +9:55
|
|
||||||
- Deinit(_3); // scope 4 at $DIR/early_otherwise_branch_68867.rs:+9:39: +9:56
|
|
||||||
- ((_3 as Vmax).0: f32) = move _29; // scope 4 at $DIR/early_otherwise_branch_68867.rs:+9:39: +9:56
|
|
||||||
- discriminant(_3) = 3; // scope 4 at $DIR/early_otherwise_branch_68867.rs:+9:39: +9:56
|
|
||||||
- StorageDead(_29); // scope 4 at $DIR/early_otherwise_branch_68867.rs:+9:55: +9:56
|
|
||||||
- StorageDead(_28); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+9:55: +9:56
|
|
||||||
- StorageDead(_27); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+9:55: +9:56
|
|
||||||
+ _31 = (((*_46) as Vmax).0: f32); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+9:28: +9:33
|
|
||||||
+ nop; // scope 4 at $DIR/early_otherwise_branch_68867.rs:+9:44: +9:55
|
|
||||||
+ nop; // scope 4 at $DIR/early_otherwise_branch_68867.rs:+9:44: +9:47
|
|
||||||
+ nop; // scope 4 at $DIR/early_otherwise_branch_68867.rs:+9:44: +9:47
|
|
||||||
+ nop; // scope 4 at $DIR/early_otherwise_branch_68867.rs:+9:50: +9:55
|
|
||||||
+ nop; // scope 4 at $DIR/early_otherwise_branch_68867.rs:+9:50: +9:55
|
|
||||||
+ ((((_0 as Ok).0: ViewportPercentageLength) as Vmax).0: f32) = Add(move _30, move _31); // scope 4 at $DIR/early_otherwise_branch_68867.rs:+9:44: +9:55
|
|
||||||
+ nop; // scope 4 at $DIR/early_otherwise_branch_68867.rs:+9:54: +9:55
|
|
||||||
+ nop; // scope 4 at $DIR/early_otherwise_branch_68867.rs:+9:54: +9:55
|
|
||||||
+ Deinit(((_0 as Ok).0: ViewportPercentageLength)); // scope 4 at $DIR/early_otherwise_branch_68867.rs:+9:39: +9:56
|
|
||||||
+ nop; // scope 4 at $DIR/early_otherwise_branch_68867.rs:+9:39: +9:56
|
|
||||||
+ discriminant(((_0 as Ok).0: ViewportPercentageLength)) = 3; // scope 4 at $DIR/early_otherwise_branch_68867.rs:+9:39: +9:56
|
|
||||||
+ nop; // scope 4 at $DIR/early_otherwise_branch_68867.rs:+9:55: +9:56
|
|
||||||
+ nop; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+9:55: +9:56
|
|
||||||
+ nop; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+9:55: +9:56
|
|
||||||
goto -> bb10; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+9:55: +9:56
|
|
||||||
}
|
|
||||||
|
|
||||||
bb10: {
|
|
||||||
Deinit(_0); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:5: +11:7
|
|
||||||
- ((_0 as Ok).0: ViewportPercentageLength) = move _3; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:5: +11:7
|
|
||||||
+ nop; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:5: +11:7
|
|
||||||
discriminant(_0) = 0; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:5: +11:7
|
|
||||||
- StorageDead(_3); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+11:6: +11:7
|
|
||||||
- StorageDead(_4); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+12:1: +12:2
|
|
||||||
+ nop; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+11:6: +11:7
|
|
||||||
+ nop; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+12:1: +12:2
|
|
||||||
return; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+12:2: +12:2
|
|
||||||
}
|
|
||||||
|
|
||||||
bb11: {
|
|
||||||
unreachable; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+12:2: +12:2
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -80,7 +80,7 @@
|
||||||
StorageDead(_5); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:23: +5:24
|
StorageDead(_5); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:23: +5:24
|
||||||
_34 = deref_copy (_4.0: &ViewportPercentageLength); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
|
_34 = deref_copy (_4.0: &ViewportPercentageLength); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
|
||||||
_11 = discriminant((*_34)); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
|
_11 = discriminant((*_34)); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:14: +5:24
|
||||||
switchInt(move _11) -> [0_isize: bb1, 1_isize: bb3, 2_isize: bb4, 3_isize: bb5, otherwise: bb11]; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:8: +5:24
|
switchInt(move _11) -> [0_isize: bb1, 1_isize: bb3, 2_isize: bb4, 3_isize: bb5, otherwise: bb2]; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:8: +5:24
|
||||||
}
|
}
|
||||||
|
|
||||||
bb1: {
|
bb1: {
|
||||||
|
@ -91,14 +91,14 @@
|
||||||
|
|
||||||
bb2: {
|
bb2: {
|
||||||
StorageLive(_33); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+10:25: +10:27
|
StorageLive(_33); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+10:25: +10:27
|
||||||
nop; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+10:25: +10:27
|
Deinit(_33); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+10:25: +10:27
|
||||||
Deinit(_0); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+10:21: +10:28
|
Deinit(_0); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+10:21: +10:28
|
||||||
nop; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+10:21: +10:28
|
((_0 as Err).0: ()) = move _33; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+10:21: +10:28
|
||||||
discriminant(_0) = 1; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+10:21: +10:28
|
discriminant(_0) = 1; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+10:21: +10:28
|
||||||
StorageDead(_33); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+10:27: +10:28
|
StorageDead(_33); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+10:27: +10:28
|
||||||
StorageDead(_3); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+11:6: +11:7
|
StorageDead(_3); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+11:6: +11:7
|
||||||
StorageDead(_4); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+12:1: +12:2
|
StorageDead(_4); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+12:1: +12:2
|
||||||
return; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+12:2: +12:2
|
goto -> bb11; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+12:2: +12:2
|
||||||
}
|
}
|
||||||
|
|
||||||
bb3: {
|
bb3: {
|
||||||
|
@ -221,11 +221,11 @@
|
||||||
discriminant(_0) = 0; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:5: +11:7
|
discriminant(_0) = 0; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+5:5: +11:7
|
||||||
StorageDead(_3); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+11:6: +11:7
|
StorageDead(_3); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+11:6: +11:7
|
||||||
StorageDead(_4); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+12:1: +12:2
|
StorageDead(_4); // scope 0 at $DIR/early_otherwise_branch_68867.rs:+12:1: +12:2
|
||||||
return; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+12:2: +12:2
|
goto -> bb11; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+12:2: +12:2
|
||||||
}
|
}
|
||||||
|
|
||||||
bb11: {
|
bb11: {
|
||||||
unreachable; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+12:2: +12:2
|
return; // scope 0 at $DIR/early_otherwise_branch_68867.rs:+12:2: +12:2
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,4 +10,3 @@ fn main() {
|
||||||
|
|
||||||
// EMIT_MIR_FOR_EACH_BIT_WIDTH
|
// EMIT_MIR_FOR_EACH_BIT_WIDTH
|
||||||
// EMIT_MIR issue_73223.main.SimplifyArmIdentity.diff
|
// EMIT_MIR issue_73223.main.SimplifyArmIdentity.diff
|
||||||
// EMIT_MIR issue_73223.main.PreCodegen.diff
|
|
||||||
|
|
|
@ -1,117 +0,0 @@
|
||||||
- // MIR for `main` before PreCodegen
|
|
||||||
+ // MIR for `main` after PreCodegen
|
|
||||||
|
|
||||||
fn main() -> () {
|
|
||||||
let mut _0: (); // return place in scope 0 at $DIR/issue-73223.rs:+0:11: +0:11
|
|
||||||
let _1: i32; // in scope 0 at $DIR/issue-73223.rs:+1:9: +1:14
|
|
||||||
let mut _2: std::option::Option<i32>; // in scope 0 at $DIR/issue-73223.rs:+1:23: +1:30
|
|
||||||
let _3: i32; // in scope 0 at $DIR/issue-73223.rs:+2:14: +2:15
|
|
||||||
let mut _5: (&i32, &i32); // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let mut _6: &i32; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let mut _7: &i32; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let mut _10: bool; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let mut _11: bool; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let mut _12: i32; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let _14: !; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let mut _15: &i32; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let _16: &i32; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let mut _17: &i32; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let _18: &i32; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let mut _19: std::option::Option<std::fmt::Arguments>; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
scope 1 {
|
|
||||||
debug split => _1; // in scope 1 at $DIR/issue-73223.rs:+1:9: +1:14
|
|
||||||
let _4: std::option::Option<i32>; // in scope 1 at $DIR/issue-73223.rs:+6:9: +6:14
|
|
||||||
scope 3 {
|
|
||||||
debug _prev => _4; // in scope 3 at $DIR/issue-73223.rs:+6:9: +6:14
|
|
||||||
let _8: &i32; // in scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let _9: &i32; // in scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let mut _20: &i32; // in scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
scope 4 {
|
|
||||||
debug left_val => _8; // in scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
debug right_val => _9; // in scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let _13: core::panicking::AssertKind; // in scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
scope 5 {
|
|
||||||
debug kind => _13; // in scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
scope 2 {
|
|
||||||
debug v => _3; // in scope 2 at $DIR/issue-73223.rs:+2:14: +2:15
|
|
||||||
}
|
|
||||||
|
|
||||||
bb0: {
|
|
||||||
StorageLive(_1); // scope 0 at $DIR/issue-73223.rs:+1:9: +1:14
|
|
||||||
StorageLive(_2); // scope 0 at $DIR/issue-73223.rs:+1:23: +1:30
|
|
||||||
Deinit(_2); // scope 0 at $DIR/issue-73223.rs:+1:23: +1:30
|
|
||||||
((_2 as Some).0: i32) = const 1_i32; // scope 0 at $DIR/issue-73223.rs:+1:23: +1:30
|
|
||||||
discriminant(_2) = 1; // scope 0 at $DIR/issue-73223.rs:+1:23: +1:30
|
|
||||||
StorageLive(_3); // scope 0 at $DIR/issue-73223.rs:+2:14: +2:15
|
|
||||||
_3 = ((_2 as Some).0: i32); // scope 0 at $DIR/issue-73223.rs:+2:14: +2:15
|
|
||||||
_1 = _3; // scope 2 at $DIR/issue-73223.rs:+2:20: +2:21
|
|
||||||
StorageDead(_3); // scope 0 at $DIR/issue-73223.rs:+2:20: +2:21
|
|
||||||
StorageDead(_2); // scope 0 at $DIR/issue-73223.rs:+4:6: +4:7
|
|
||||||
StorageLive(_4); // scope 1 at $DIR/issue-73223.rs:+6:9: +6:14
|
|
||||||
StorageLive(_5); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageLive(_6); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
_6 = &_1; // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageLive(_7); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
_20 = const main::promoted[0]; // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
// mir::Constant
|
|
||||||
// + span: $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
// + literal: Const { ty: &i32, val: Unevaluated(main, [], Some(promoted[0])) }
|
|
||||||
_7 = _20; // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
Deinit(_5); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
(_5.0: &i32) = move _6; // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
(_5.1: &i32) = move _7; // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageDead(_7); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageDead(_6); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageLive(_8); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
_8 = (_5.0: &i32); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageLive(_9); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
_9 = (_5.1: &i32); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageLive(_10); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageLive(_11); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageLive(_12); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
_12 = (*_8); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
_11 = Eq(move _12, const 1_i32); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageDead(_12); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
_10 = Not(move _11); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageDead(_11); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
switchInt(move _10) -> [false: bb2, otherwise: bb1]; // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
}
|
|
||||||
|
|
||||||
bb1: {
|
|
||||||
StorageLive(_13); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageLive(_14); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageLive(_15); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageLive(_16); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
_16 = _8; // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
_15 = _16; // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageLive(_17); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageLive(_18); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
_18 = _9; // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
_17 = _18; // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageLive(_19); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
Deinit(_19); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
discriminant(_19) = 0; // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
_14 = core::panicking::assert_failed::<i32, i32>(const core::panicking::AssertKind::Eq, move _15, move _17, move _19); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
// mir::Constant
|
|
||||||
// + span: $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
// + literal: Const { ty: for<'r, 's, 't0> fn(core::panicking::AssertKind, &'r i32, &'s i32, Option<Arguments<'t0>>) -> ! {core::panicking::assert_failed::<i32, i32>}, val: Value(<ZST>) }
|
|
||||||
// mir::Constant
|
|
||||||
// + span: $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
// + literal: Const { ty: core::panicking::AssertKind, val: Value(Scalar(0x00)) }
|
|
||||||
}
|
|
||||||
|
|
||||||
bb2: {
|
|
||||||
StorageDead(_10); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageDead(_9); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageDead(_8); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageDead(_5); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageDead(_4); // scope 1 at $DIR/issue-73223.rs:+8:1: +8:2
|
|
||||||
StorageDead(_1); // scope 0 at $DIR/issue-73223.rs:+8:1: +8:2
|
|
||||||
return; // scope 0 at $DIR/issue-73223.rs:+8:2: +8:2
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,117 +0,0 @@
|
||||||
- // MIR for `main` before PreCodegen
|
|
||||||
+ // MIR for `main` after PreCodegen
|
|
||||||
|
|
||||||
fn main() -> () {
|
|
||||||
let mut _0: (); // return place in scope 0 at $DIR/issue-73223.rs:+0:11: +0:11
|
|
||||||
let _1: i32; // in scope 0 at $DIR/issue-73223.rs:+1:9: +1:14
|
|
||||||
let mut _2: std::option::Option<i32>; // in scope 0 at $DIR/issue-73223.rs:+1:23: +1:30
|
|
||||||
let _3: i32; // in scope 0 at $DIR/issue-73223.rs:+2:14: +2:15
|
|
||||||
let mut _5: (&i32, &i32); // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let mut _6: &i32; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let mut _7: &i32; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let mut _10: bool; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let mut _11: bool; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let mut _12: i32; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let _14: !; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let mut _15: &i32; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let _16: &i32; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let mut _17: &i32; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let _18: &i32; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let mut _19: std::option::Option<std::fmt::Arguments>; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
scope 1 {
|
|
||||||
debug split => _1; // in scope 1 at $DIR/issue-73223.rs:+1:9: +1:14
|
|
||||||
let _4: std::option::Option<i32>; // in scope 1 at $DIR/issue-73223.rs:+6:9: +6:14
|
|
||||||
scope 3 {
|
|
||||||
debug _prev => _4; // in scope 3 at $DIR/issue-73223.rs:+6:9: +6:14
|
|
||||||
let _8: &i32; // in scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let _9: &i32; // in scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let mut _20: &i32; // in scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
scope 4 {
|
|
||||||
debug left_val => _8; // in scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
debug right_val => _9; // in scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let _13: core::panicking::AssertKind; // in scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
scope 5 {
|
|
||||||
debug kind => _13; // in scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
scope 2 {
|
|
||||||
debug v => _3; // in scope 2 at $DIR/issue-73223.rs:+2:14: +2:15
|
|
||||||
}
|
|
||||||
|
|
||||||
bb0: {
|
|
||||||
StorageLive(_1); // scope 0 at $DIR/issue-73223.rs:+1:9: +1:14
|
|
||||||
StorageLive(_2); // scope 0 at $DIR/issue-73223.rs:+1:23: +1:30
|
|
||||||
Deinit(_2); // scope 0 at $DIR/issue-73223.rs:+1:23: +1:30
|
|
||||||
((_2 as Some).0: i32) = const 1_i32; // scope 0 at $DIR/issue-73223.rs:+1:23: +1:30
|
|
||||||
discriminant(_2) = 1; // scope 0 at $DIR/issue-73223.rs:+1:23: +1:30
|
|
||||||
StorageLive(_3); // scope 0 at $DIR/issue-73223.rs:+2:14: +2:15
|
|
||||||
_3 = ((_2 as Some).0: i32); // scope 0 at $DIR/issue-73223.rs:+2:14: +2:15
|
|
||||||
_1 = _3; // scope 2 at $DIR/issue-73223.rs:+2:20: +2:21
|
|
||||||
StorageDead(_3); // scope 0 at $DIR/issue-73223.rs:+2:20: +2:21
|
|
||||||
StorageDead(_2); // scope 0 at $DIR/issue-73223.rs:+4:6: +4:7
|
|
||||||
StorageLive(_4); // scope 1 at $DIR/issue-73223.rs:+6:9: +6:14
|
|
||||||
StorageLive(_5); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageLive(_6); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
_6 = &_1; // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageLive(_7); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
_20 = const main::promoted[0]; // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
// mir::Constant
|
|
||||||
// + span: $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
// + literal: Const { ty: &i32, val: Unevaluated(main, [], Some(promoted[0])) }
|
|
||||||
_7 = _20; // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
Deinit(_5); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
(_5.0: &i32) = move _6; // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
(_5.1: &i32) = move _7; // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageDead(_7); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageDead(_6); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageLive(_8); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
_8 = (_5.0: &i32); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageLive(_9); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
_9 = (_5.1: &i32); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageLive(_10); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageLive(_11); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageLive(_12); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
_12 = (*_8); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
_11 = Eq(move _12, const 1_i32); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageDead(_12); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
_10 = Not(move _11); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageDead(_11); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
switchInt(move _10) -> [false: bb2, otherwise: bb1]; // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
}
|
|
||||||
|
|
||||||
bb1: {
|
|
||||||
StorageLive(_13); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageLive(_14); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageLive(_15); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageLive(_16); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
_16 = _8; // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
_15 = _16; // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageLive(_17); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageLive(_18); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
_18 = _9; // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
_17 = _18; // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageLive(_19); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
Deinit(_19); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
discriminant(_19) = 0; // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
_14 = core::panicking::assert_failed::<i32, i32>(const core::panicking::AssertKind::Eq, move _15, move _17, move _19); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
// mir::Constant
|
|
||||||
// + span: $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
// + literal: Const { ty: for<'r, 's, 't0> fn(core::panicking::AssertKind, &'r i32, &'s i32, Option<Arguments<'t0>>) -> ! {core::panicking::assert_failed::<i32, i32>}, val: Value(<ZST>) }
|
|
||||||
// mir::Constant
|
|
||||||
// + span: $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
// + literal: Const { ty: core::panicking::AssertKind, val: Value(Scalar(0x00)) }
|
|
||||||
}
|
|
||||||
|
|
||||||
bb2: {
|
|
||||||
StorageDead(_10); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageDead(_9); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageDead(_8); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageDead(_5); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageDead(_4); // scope 1 at $DIR/issue-73223.rs:+8:1: +8:2
|
|
||||||
StorageDead(_1); // scope 0 at $DIR/issue-73223.rs:+8:1: +8:2
|
|
||||||
return; // scope 0 at $DIR/issue-73223.rs:+8:2: +8:2
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,66 +0,0 @@
|
||||||
- // MIR for `array_bound` before InstCombine
|
|
||||||
+ // MIR for `array_bound` after InstCombine
|
|
||||||
|
|
||||||
fn array_bound(_1: usize, _2: &[u8; N]) -> u8 {
|
|
||||||
debug index => _1; // in scope 0 at $DIR/lower_array_len.rs:+0:36: +0:41
|
|
||||||
debug slice => _2; // in scope 0 at $DIR/lower_array_len.rs:+0:50: +0:55
|
|
||||||
let mut _0: u8; // return place in scope 0 at $DIR/lower_array_len.rs:+0:70: +0:72
|
|
||||||
let mut _3: bool; // in scope 0 at $DIR/lower_array_len.rs:+1:8: +1:27
|
|
||||||
let mut _4: usize; // in scope 0 at $DIR/lower_array_len.rs:+1:8: +1:13
|
|
||||||
let mut _5: usize; // in scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
|
|
||||||
let mut _6: &[u8]; // in scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
|
|
||||||
let mut _7: &[u8; N]; // in scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
|
|
||||||
let _8: usize; // in scope 0 at $DIR/lower_array_len.rs:+2:15: +2:20
|
|
||||||
let mut _9: usize; // in scope 0 at $DIR/lower_array_len.rs:+2:9: +2:21
|
|
||||||
let mut _10: bool; // in scope 0 at $DIR/lower_array_len.rs:+2:9: +2:21
|
|
||||||
let mut _11: &[u8; N]; // in scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
|
|
||||||
|
|
||||||
bb0: {
|
|
||||||
StorageLive(_3); // scope 0 at $DIR/lower_array_len.rs:+1:8: +1:27
|
|
||||||
StorageLive(_4); // scope 0 at $DIR/lower_array_len.rs:+1:8: +1:13
|
|
||||||
_4 = _1; // scope 0 at $DIR/lower_array_len.rs:+1:8: +1:13
|
|
||||||
StorageLive(_5); // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
|
|
||||||
StorageLive(_6); // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
|
|
||||||
StorageLive(_7); // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
|
|
||||||
- _7 = &(*_2); // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
|
|
||||||
+ _7 = _2; // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
|
|
||||||
StorageLive(_11); // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
|
|
||||||
_11 = _7; // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
|
|
||||||
_6 = move _7 as &[u8] (Pointer(Unsize)); // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
|
|
||||||
StorageDead(_7); // scope 0 at $DIR/lower_array_len.rs:+1:20: +1:21
|
|
||||||
- _5 = Len((*_11)); // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
|
|
||||||
+ _5 = const N; // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
|
|
||||||
StorageDead(_11); // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
|
|
||||||
StorageDead(_6); // scope 0 at $DIR/lower_array_len.rs:+1:26: +1:27
|
|
||||||
_3 = Lt(move _4, move _5); // scope 0 at $DIR/lower_array_len.rs:+1:8: +1:27
|
|
||||||
StorageDead(_5); // scope 0 at $DIR/lower_array_len.rs:+1:26: +1:27
|
|
||||||
StorageDead(_4); // scope 0 at $DIR/lower_array_len.rs:+1:26: +1:27
|
|
||||||
switchInt(move _3) -> [false: bb3, otherwise: bb1]; // scope 0 at $DIR/lower_array_len.rs:+1:8: +1:27
|
|
||||||
}
|
|
||||||
|
|
||||||
bb1: {
|
|
||||||
StorageLive(_8); // scope 0 at $DIR/lower_array_len.rs:+2:15: +2:20
|
|
||||||
_8 = _1; // scope 0 at $DIR/lower_array_len.rs:+2:15: +2:20
|
|
||||||
- _9 = Len((*_2)); // scope 0 at $DIR/lower_array_len.rs:+2:9: +2:21
|
|
||||||
+ _9 = const N; // scope 0 at $DIR/lower_array_len.rs:+2:9: +2:21
|
|
||||||
_10 = Lt(_8, _9); // scope 0 at $DIR/lower_array_len.rs:+2:9: +2:21
|
|
||||||
assert(move _10, "index out of bounds: the length is {} but the index is {}", move _9, _8) -> bb2; // scope 0 at $DIR/lower_array_len.rs:+2:9: +2:21
|
|
||||||
}
|
|
||||||
|
|
||||||
bb2: {
|
|
||||||
_0 = (*_2)[_8]; // scope 0 at $DIR/lower_array_len.rs:+2:9: +2:21
|
|
||||||
StorageDead(_8); // scope 0 at $DIR/lower_array_len.rs:+3:5: +3:6
|
|
||||||
goto -> bb4; // scope 0 at $DIR/lower_array_len.rs:+1:5: +5:6
|
|
||||||
}
|
|
||||||
|
|
||||||
bb3: {
|
|
||||||
_0 = const 42_u8; // scope 0 at $DIR/lower_array_len.rs:+4:9: +4:11
|
|
||||||
goto -> bb4; // scope 0 at $DIR/lower_array_len.rs:+1:5: +5:6
|
|
||||||
}
|
|
||||||
|
|
||||||
bb4: {
|
|
||||||
StorageDead(_3); // scope 0 at $DIR/lower_array_len.rs:+5:5: +5:6
|
|
||||||
return; // scope 0 at $DIR/lower_array_len.rs:+6:2: +6:2
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,70 +0,0 @@
|
||||||
- // MIR for `array_bound` before SimplifyLocals
|
|
||||||
+ // MIR for `array_bound` after SimplifyLocals
|
|
||||||
|
|
||||||
fn array_bound(_1: usize, _2: &[u8; N]) -> u8 {
|
|
||||||
debug index => _1; // in scope 0 at $DIR/lower_array_len.rs:+0:36: +0:41
|
|
||||||
debug slice => _2; // in scope 0 at $DIR/lower_array_len.rs:+0:50: +0:55
|
|
||||||
let mut _0: u8; // return place in scope 0 at $DIR/lower_array_len.rs:+0:70: +0:72
|
|
||||||
let mut _3: bool; // in scope 0 at $DIR/lower_array_len.rs:+1:8: +1:27
|
|
||||||
let mut _4: usize; // in scope 0 at $DIR/lower_array_len.rs:+1:8: +1:13
|
|
||||||
let mut _5: usize; // in scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
|
|
||||||
- let mut _6: &[u8]; // in scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
|
|
||||||
- let mut _7: &[u8; N]; // in scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
|
|
||||||
- let _8: usize; // in scope 0 at $DIR/lower_array_len.rs:+2:15: +2:20
|
|
||||||
- let mut _9: usize; // in scope 0 at $DIR/lower_array_len.rs:+2:9: +2:21
|
|
||||||
- let mut _10: bool; // in scope 0 at $DIR/lower_array_len.rs:+2:9: +2:21
|
|
||||||
- let mut _11: &[u8; N]; // in scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
|
|
||||||
+ let _6: usize; // in scope 0 at $DIR/lower_array_len.rs:+2:15: +2:20
|
|
||||||
+ let mut _7: usize; // in scope 0 at $DIR/lower_array_len.rs:+2:9: +2:21
|
|
||||||
+ let mut _8: bool; // in scope 0 at $DIR/lower_array_len.rs:+2:9: +2:21
|
|
||||||
|
|
||||||
bb0: {
|
|
||||||
StorageLive(_3); // scope 0 at $DIR/lower_array_len.rs:+1:8: +1:27
|
|
||||||
StorageLive(_4); // scope 0 at $DIR/lower_array_len.rs:+1:8: +1:13
|
|
||||||
_4 = _1; // scope 0 at $DIR/lower_array_len.rs:+1:8: +1:13
|
|
||||||
StorageLive(_5); // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
|
|
||||||
- StorageLive(_6); // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
|
|
||||||
- StorageLive(_7); // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
|
|
||||||
- StorageLive(_11); // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
|
|
||||||
- StorageDead(_7); // scope 0 at $DIR/lower_array_len.rs:+1:20: +1:21
|
|
||||||
_5 = const N; // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
|
|
||||||
- StorageDead(_11); // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
|
|
||||||
- StorageDead(_6); // scope 0 at $DIR/lower_array_len.rs:+1:26: +1:27
|
|
||||||
_3 = Lt(move _4, move _5); // scope 0 at $DIR/lower_array_len.rs:+1:8: +1:27
|
|
||||||
StorageDead(_5); // scope 0 at $DIR/lower_array_len.rs:+1:26: +1:27
|
|
||||||
StorageDead(_4); // scope 0 at $DIR/lower_array_len.rs:+1:26: +1:27
|
|
||||||
switchInt(move _3) -> [false: bb3, otherwise: bb1]; // scope 0 at $DIR/lower_array_len.rs:+1:8: +1:27
|
|
||||||
}
|
|
||||||
|
|
||||||
bb1: {
|
|
||||||
- StorageLive(_8); // scope 0 at $DIR/lower_array_len.rs:+2:15: +2:20
|
|
||||||
- _8 = _1; // scope 0 at $DIR/lower_array_len.rs:+2:15: +2:20
|
|
||||||
- _9 = const N; // scope 0 at $DIR/lower_array_len.rs:+2:9: +2:21
|
|
||||||
- _10 = Lt(_8, _9); // scope 0 at $DIR/lower_array_len.rs:+2:9: +2:21
|
|
||||||
- assert(move _10, "index out of bounds: the length is {} but the index is {}", move _9, _8) -> bb2; // scope 0 at $DIR/lower_array_len.rs:+2:9: +2:21
|
|
||||||
+ StorageLive(_6); // scope 0 at $DIR/lower_array_len.rs:+2:15: +2:20
|
|
||||||
+ _6 = _1; // scope 0 at $DIR/lower_array_len.rs:+2:15: +2:20
|
|
||||||
+ _7 = const N; // scope 0 at $DIR/lower_array_len.rs:+2:9: +2:21
|
|
||||||
+ _8 = Lt(_6, _7); // scope 0 at $DIR/lower_array_len.rs:+2:9: +2:21
|
|
||||||
+ assert(move _8, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> bb2; // scope 0 at $DIR/lower_array_len.rs:+2:9: +2:21
|
|
||||||
}
|
|
||||||
|
|
||||||
bb2: {
|
|
||||||
- _0 = (*_2)[_8]; // scope 0 at $DIR/lower_array_len.rs:+2:9: +2:21
|
|
||||||
- StorageDead(_8); // scope 0 at $DIR/lower_array_len.rs:+3:5: +3:6
|
|
||||||
+ _0 = (*_2)[_6]; // scope 0 at $DIR/lower_array_len.rs:+2:9: +2:21
|
|
||||||
+ StorageDead(_6); // scope 0 at $DIR/lower_array_len.rs:+3:5: +3:6
|
|
||||||
goto -> bb4; // scope 0 at $DIR/lower_array_len.rs:+1:5: +5:6
|
|
||||||
}
|
|
||||||
|
|
||||||
bb3: {
|
|
||||||
_0 = const 42_u8; // scope 0 at $DIR/lower_array_len.rs:+4:9: +4:11
|
|
||||||
goto -> bb4; // scope 0 at $DIR/lower_array_len.rs:+1:5: +5:6
|
|
||||||
}
|
|
||||||
|
|
||||||
bb4: {
|
|
||||||
StorageDead(_3); // scope 0 at $DIR/lower_array_len.rs:+5:5: +5:6
|
|
||||||
return; // scope 0 at $DIR/lower_array_len.rs:+6:2: +6:2
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,79 +0,0 @@
|
||||||
- // MIR for `array_bound_mut` before InstCombine
|
|
||||||
+ // MIR for `array_bound_mut` after InstCombine
|
|
||||||
|
|
||||||
fn array_bound_mut(_1: usize, _2: &mut [u8; N]) -> u8 {
|
|
||||||
debug index => _1; // in scope 0 at $DIR/lower_array_len.rs:+0:40: +0:45
|
|
||||||
debug slice => _2; // in scope 0 at $DIR/lower_array_len.rs:+0:54: +0:59
|
|
||||||
let mut _0: u8; // return place in scope 0 at $DIR/lower_array_len.rs:+0:78: +0:80
|
|
||||||
let mut _3: bool; // in scope 0 at $DIR/lower_array_len.rs:+1:8: +1:27
|
|
||||||
let mut _4: usize; // in scope 0 at $DIR/lower_array_len.rs:+1:8: +1:13
|
|
||||||
let mut _5: usize; // in scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
|
|
||||||
let mut _6: &[u8]; // in scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
|
|
||||||
let mut _7: &[u8; N]; // in scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
|
|
||||||
let _8: usize; // in scope 0 at $DIR/lower_array_len.rs:+2:15: +2:20
|
|
||||||
let mut _9: usize; // in scope 0 at $DIR/lower_array_len.rs:+2:9: +2:21
|
|
||||||
let mut _10: bool; // in scope 0 at $DIR/lower_array_len.rs:+2:9: +2:21
|
|
||||||
let _11: usize; // in scope 0 at $DIR/lower_array_len.rs:+4:15: +4:16
|
|
||||||
let mut _12: usize; // in scope 0 at $DIR/lower_array_len.rs:+4:9: +4:17
|
|
||||||
let mut _13: bool; // in scope 0 at $DIR/lower_array_len.rs:+4:9: +4:17
|
|
||||||
let mut _14: &[u8; N]; // in scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
|
|
||||||
|
|
||||||
bb0: {
|
|
||||||
StorageLive(_3); // scope 0 at $DIR/lower_array_len.rs:+1:8: +1:27
|
|
||||||
StorageLive(_4); // scope 0 at $DIR/lower_array_len.rs:+1:8: +1:13
|
|
||||||
_4 = _1; // scope 0 at $DIR/lower_array_len.rs:+1:8: +1:13
|
|
||||||
StorageLive(_5); // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
|
|
||||||
StorageLive(_6); // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
|
|
||||||
StorageLive(_7); // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
|
|
||||||
_7 = &(*_2); // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
|
|
||||||
StorageLive(_14); // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
|
|
||||||
_14 = _7; // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
|
|
||||||
_6 = move _7 as &[u8] (Pointer(Unsize)); // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
|
|
||||||
StorageDead(_7); // scope 0 at $DIR/lower_array_len.rs:+1:20: +1:21
|
|
||||||
- _5 = Len((*_14)); // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
|
|
||||||
+ _5 = const N; // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
|
|
||||||
StorageDead(_14); // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
|
|
||||||
StorageDead(_6); // scope 0 at $DIR/lower_array_len.rs:+1:26: +1:27
|
|
||||||
_3 = Lt(move _4, move _5); // scope 0 at $DIR/lower_array_len.rs:+1:8: +1:27
|
|
||||||
StorageDead(_5); // scope 0 at $DIR/lower_array_len.rs:+1:26: +1:27
|
|
||||||
StorageDead(_4); // scope 0 at $DIR/lower_array_len.rs:+1:26: +1:27
|
|
||||||
switchInt(move _3) -> [false: bb3, otherwise: bb1]; // scope 0 at $DIR/lower_array_len.rs:+1:8: +1:27
|
|
||||||
}
|
|
||||||
|
|
||||||
bb1: {
|
|
||||||
StorageLive(_8); // scope 0 at $DIR/lower_array_len.rs:+2:15: +2:20
|
|
||||||
_8 = _1; // scope 0 at $DIR/lower_array_len.rs:+2:15: +2:20
|
|
||||||
- _9 = Len((*_2)); // scope 0 at $DIR/lower_array_len.rs:+2:9: +2:21
|
|
||||||
+ _9 = const N; // scope 0 at $DIR/lower_array_len.rs:+2:9: +2:21
|
|
||||||
_10 = Lt(_8, _9); // scope 0 at $DIR/lower_array_len.rs:+2:9: +2:21
|
|
||||||
assert(move _10, "index out of bounds: the length is {} but the index is {}", move _9, _8) -> bb2; // scope 0 at $DIR/lower_array_len.rs:+2:9: +2:21
|
|
||||||
}
|
|
||||||
|
|
||||||
bb2: {
|
|
||||||
_0 = (*_2)[_8]; // scope 0 at $DIR/lower_array_len.rs:+2:9: +2:21
|
|
||||||
StorageDead(_8); // scope 0 at $DIR/lower_array_len.rs:+3:5: +3:6
|
|
||||||
goto -> bb5; // scope 0 at $DIR/lower_array_len.rs:+1:5: +7:6
|
|
||||||
}
|
|
||||||
|
|
||||||
bb3: {
|
|
||||||
StorageLive(_11); // scope 0 at $DIR/lower_array_len.rs:+4:15: +4:16
|
|
||||||
_11 = const 0_usize; // scope 0 at $DIR/lower_array_len.rs:+4:15: +4:16
|
|
||||||
- _12 = Len((*_2)); // scope 0 at $DIR/lower_array_len.rs:+4:9: +4:17
|
|
||||||
+ _12 = const N; // scope 0 at $DIR/lower_array_len.rs:+4:9: +4:17
|
|
||||||
_13 = Lt(_11, _12); // scope 0 at $DIR/lower_array_len.rs:+4:9: +4:17
|
|
||||||
assert(move _13, "index out of bounds: the length is {} but the index is {}", move _12, _11) -> bb4; // scope 0 at $DIR/lower_array_len.rs:+4:9: +4:17
|
|
||||||
}
|
|
||||||
|
|
||||||
bb4: {
|
|
||||||
(*_2)[_11] = const 42_u8; // scope 0 at $DIR/lower_array_len.rs:+4:9: +4:22
|
|
||||||
StorageDead(_11); // scope 0 at $DIR/lower_array_len.rs:+4:22: +4:23
|
|
||||||
_0 = const 42_u8; // scope 0 at $DIR/lower_array_len.rs:+6:9: +6:11
|
|
||||||
goto -> bb5; // scope 0 at $DIR/lower_array_len.rs:+1:5: +7:6
|
|
||||||
}
|
|
||||||
|
|
||||||
bb5: {
|
|
||||||
StorageDead(_3); // scope 0 at $DIR/lower_array_len.rs:+7:5: +7:6
|
|
||||||
return; // scope 0 at $DIR/lower_array_len.rs:+8:2: +8:2
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,93 +0,0 @@
|
||||||
- // MIR for `array_bound_mut` before SimplifyLocals
|
|
||||||
+ // MIR for `array_bound_mut` after SimplifyLocals
|
|
||||||
|
|
||||||
fn array_bound_mut(_1: usize, _2: &mut [u8; N]) -> u8 {
|
|
||||||
debug index => _1; // in scope 0 at $DIR/lower_array_len.rs:+0:40: +0:45
|
|
||||||
debug slice => _2; // in scope 0 at $DIR/lower_array_len.rs:+0:54: +0:59
|
|
||||||
let mut _0: u8; // return place in scope 0 at $DIR/lower_array_len.rs:+0:78: +0:80
|
|
||||||
let mut _3: bool; // in scope 0 at $DIR/lower_array_len.rs:+1:8: +1:27
|
|
||||||
let mut _4: usize; // in scope 0 at $DIR/lower_array_len.rs:+1:8: +1:13
|
|
||||||
let mut _5: usize; // in scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
|
|
||||||
- let mut _6: &[u8]; // in scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
|
|
||||||
- let mut _7: &[u8; N]; // in scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
|
|
||||||
- let _8: usize; // in scope 0 at $DIR/lower_array_len.rs:+2:15: +2:20
|
|
||||||
- let mut _9: usize; // in scope 0 at $DIR/lower_array_len.rs:+2:9: +2:21
|
|
||||||
- let mut _10: bool; // in scope 0 at $DIR/lower_array_len.rs:+2:9: +2:21
|
|
||||||
- let _11: usize; // in scope 0 at $DIR/lower_array_len.rs:+4:15: +4:16
|
|
||||||
- let mut _12: usize; // in scope 0 at $DIR/lower_array_len.rs:+4:9: +4:17
|
|
||||||
- let mut _13: bool; // in scope 0 at $DIR/lower_array_len.rs:+4:9: +4:17
|
|
||||||
- let mut _14: &[u8; N]; // in scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
|
|
||||||
+ let _6: usize; // in scope 0 at $DIR/lower_array_len.rs:+2:15: +2:20
|
|
||||||
+ let mut _7: usize; // in scope 0 at $DIR/lower_array_len.rs:+2:9: +2:21
|
|
||||||
+ let mut _8: bool; // in scope 0 at $DIR/lower_array_len.rs:+2:9: +2:21
|
|
||||||
+ let _9: usize; // in scope 0 at $DIR/lower_array_len.rs:+4:15: +4:16
|
|
||||||
+ let mut _10: usize; // in scope 0 at $DIR/lower_array_len.rs:+4:9: +4:17
|
|
||||||
+ let mut _11: bool; // in scope 0 at $DIR/lower_array_len.rs:+4:9: +4:17
|
|
||||||
|
|
||||||
bb0: {
|
|
||||||
StorageLive(_3); // scope 0 at $DIR/lower_array_len.rs:+1:8: +1:27
|
|
||||||
StorageLive(_4); // scope 0 at $DIR/lower_array_len.rs:+1:8: +1:13
|
|
||||||
_4 = _1; // scope 0 at $DIR/lower_array_len.rs:+1:8: +1:13
|
|
||||||
StorageLive(_5); // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
|
|
||||||
- StorageLive(_6); // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
|
|
||||||
- StorageLive(_7); // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
|
|
||||||
- StorageLive(_14); // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
|
|
||||||
- StorageDead(_7); // scope 0 at $DIR/lower_array_len.rs:+1:20: +1:21
|
|
||||||
_5 = const N; // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
|
|
||||||
- StorageDead(_14); // scope 0 at $DIR/lower_array_len.rs:+1:16: +1:27
|
|
||||||
- StorageDead(_6); // scope 0 at $DIR/lower_array_len.rs:+1:26: +1:27
|
|
||||||
_3 = Lt(move _4, move _5); // scope 0 at $DIR/lower_array_len.rs:+1:8: +1:27
|
|
||||||
StorageDead(_5); // scope 0 at $DIR/lower_array_len.rs:+1:26: +1:27
|
|
||||||
StorageDead(_4); // scope 0 at $DIR/lower_array_len.rs:+1:26: +1:27
|
|
||||||
switchInt(move _3) -> [false: bb3, otherwise: bb1]; // scope 0 at $DIR/lower_array_len.rs:+1:8: +1:27
|
|
||||||
}
|
|
||||||
|
|
||||||
bb1: {
|
|
||||||
- StorageLive(_8); // scope 0 at $DIR/lower_array_len.rs:+2:15: +2:20
|
|
||||||
- _8 = _1; // scope 0 at $DIR/lower_array_len.rs:+2:15: +2:20
|
|
||||||
- _9 = const N; // scope 0 at $DIR/lower_array_len.rs:+2:9: +2:21
|
|
||||||
- _10 = Lt(_8, _9); // scope 0 at $DIR/lower_array_len.rs:+2:9: +2:21
|
|
||||||
- assert(move _10, "index out of bounds: the length is {} but the index is {}", move _9, _8) -> bb2; // scope 0 at $DIR/lower_array_len.rs:+2:9: +2:21
|
|
||||||
+ StorageLive(_6); // scope 0 at $DIR/lower_array_len.rs:+2:15: +2:20
|
|
||||||
+ _6 = _1; // scope 0 at $DIR/lower_array_len.rs:+2:15: +2:20
|
|
||||||
+ _7 = const N; // scope 0 at $DIR/lower_array_len.rs:+2:9: +2:21
|
|
||||||
+ _8 = Lt(_6, _7); // scope 0 at $DIR/lower_array_len.rs:+2:9: +2:21
|
|
||||||
+ assert(move _8, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> bb2; // scope 0 at $DIR/lower_array_len.rs:+2:9: +2:21
|
|
||||||
}
|
|
||||||
|
|
||||||
bb2: {
|
|
||||||
- _0 = (*_2)[_8]; // scope 0 at $DIR/lower_array_len.rs:+2:9: +2:21
|
|
||||||
- StorageDead(_8); // scope 0 at $DIR/lower_array_len.rs:+3:5: +3:6
|
|
||||||
+ _0 = (*_2)[_6]; // scope 0 at $DIR/lower_array_len.rs:+2:9: +2:21
|
|
||||||
+ StorageDead(_6); // scope 0 at $DIR/lower_array_len.rs:+3:5: +3:6
|
|
||||||
goto -> bb5; // scope 0 at $DIR/lower_array_len.rs:+1:5: +7:6
|
|
||||||
}
|
|
||||||
|
|
||||||
bb3: {
|
|
||||||
- StorageLive(_11); // scope 0 at $DIR/lower_array_len.rs:+4:15: +4:16
|
|
||||||
- _11 = const 0_usize; // scope 0 at $DIR/lower_array_len.rs:+4:15: +4:16
|
|
||||||
- _12 = const N; // scope 0 at $DIR/lower_array_len.rs:+4:9: +4:17
|
|
||||||
- _13 = Lt(const 0_usize, _12); // scope 0 at $DIR/lower_array_len.rs:+4:9: +4:17
|
|
||||||
- assert(move _13, "index out of bounds: the length is {} but the index is {}", move _12, const 0_usize) -> bb4; // scope 0 at $DIR/lower_array_len.rs:+4:9: +4:17
|
|
||||||
+ StorageLive(_9); // scope 0 at $DIR/lower_array_len.rs:+4:15: +4:16
|
|
||||||
+ _9 = const 0_usize; // scope 0 at $DIR/lower_array_len.rs:+4:15: +4:16
|
|
||||||
+ _10 = const N; // scope 0 at $DIR/lower_array_len.rs:+4:9: +4:17
|
|
||||||
+ _11 = Lt(const 0_usize, _10); // scope 0 at $DIR/lower_array_len.rs:+4:9: +4:17
|
|
||||||
+ assert(move _11, "index out of bounds: the length is {} but the index is {}", move _10, const 0_usize) -> bb4; // scope 0 at $DIR/lower_array_len.rs:+4:9: +4:17
|
|
||||||
}
|
|
||||||
|
|
||||||
bb4: {
|
|
||||||
- (*_2)[_11] = const 42_u8; // scope 0 at $DIR/lower_array_len.rs:+4:9: +4:22
|
|
||||||
- StorageDead(_11); // scope 0 at $DIR/lower_array_len.rs:+4:22: +4:23
|
|
||||||
+ (*_2)[_9] = const 42_u8; // scope 0 at $DIR/lower_array_len.rs:+4:9: +4:22
|
|
||||||
+ StorageDead(_9); // scope 0 at $DIR/lower_array_len.rs:+4:22: +4:23
|
|
||||||
_0 = const 42_u8; // scope 0 at $DIR/lower_array_len.rs:+6:9: +6:11
|
|
||||||
goto -> bb5; // scope 0 at $DIR/lower_array_len.rs:+1:5: +7:6
|
|
||||||
}
|
|
||||||
|
|
||||||
bb5: {
|
|
||||||
StorageDead(_3); // scope 0 at $DIR/lower_array_len.rs:+7:5: +7:6
|
|
||||||
return; // scope 0 at $DIR/lower_array_len.rs:+8:2: +8:2
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,27 +0,0 @@
|
||||||
- // MIR for `array_len` before InstCombine
|
|
||||||
+ // MIR for `array_len` after InstCombine
|
|
||||||
|
|
||||||
fn array_len(_1: &[u8; N]) -> usize {
|
|
||||||
debug arr => _1; // in scope 0 at $DIR/lower_array_len.rs:+0:34: +0:37
|
|
||||||
let mut _0: usize; // return place in scope 0 at $DIR/lower_array_len.rs:+0:52: +0:57
|
|
||||||
let mut _2: &[u8]; // in scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
|
|
||||||
let mut _3: &[u8; N]; // in scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
|
|
||||||
let mut _4: &[u8; N]; // in scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
|
|
||||||
|
|
||||||
bb0: {
|
|
||||||
StorageLive(_2); // scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
|
|
||||||
StorageLive(_3); // scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
|
|
||||||
- _3 = &(*_1); // scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
|
|
||||||
+ _3 = _1; // scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
|
|
||||||
StorageLive(_4); // scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
|
|
||||||
_4 = _3; // scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
|
|
||||||
_2 = move _3 as &[u8] (Pointer(Unsize)); // scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
|
|
||||||
StorageDead(_3); // scope 0 at $DIR/lower_array_len.rs:+1:7: +1:8
|
|
||||||
- _0 = Len((*_4)); // scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
|
|
||||||
+ _0 = const N; // scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
|
|
||||||
StorageDead(_4); // scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
|
|
||||||
StorageDead(_2); // scope 0 at $DIR/lower_array_len.rs:+1:13: +1:14
|
|
||||||
return; // scope 0 at $DIR/lower_array_len.rs:+2:2: +2:2
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,22 +0,0 @@
|
||||||
- // MIR for `array_len` before SimplifyLocals
|
|
||||||
+ // MIR for `array_len` after SimplifyLocals
|
|
||||||
|
|
||||||
fn array_len(_1: &[u8; N]) -> usize {
|
|
||||||
debug arr => _1; // in scope 0 at $DIR/lower_array_len.rs:+0:34: +0:37
|
|
||||||
let mut _0: usize; // return place in scope 0 at $DIR/lower_array_len.rs:+0:52: +0:57
|
|
||||||
- let mut _2: &[u8]; // in scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
|
|
||||||
- let mut _3: &[u8; N]; // in scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
|
|
||||||
- let mut _4: &[u8; N]; // in scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
|
|
||||||
|
|
||||||
bb0: {
|
|
||||||
- StorageLive(_2); // scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
|
|
||||||
- StorageLive(_3); // scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
|
|
||||||
- StorageLive(_4); // scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
|
|
||||||
- StorageDead(_3); // scope 0 at $DIR/lower_array_len.rs:+1:7: +1:8
|
|
||||||
_0 = const N; // scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
|
|
||||||
- StorageDead(_4); // scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
|
|
||||||
- StorageDead(_2); // scope 0 at $DIR/lower_array_len.rs:+1:13: +1:14
|
|
||||||
return; // scope 0 at $DIR/lower_array_len.rs:+2:2: +2:2
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,26 +0,0 @@
|
||||||
- // MIR for `array_len_by_value` before InstCombine
|
|
||||||
+ // MIR for `array_len_by_value` after InstCombine
|
|
||||||
|
|
||||||
fn array_len_by_value(_1: [u8; N]) -> usize {
|
|
||||||
debug arr => _1; // in scope 0 at $DIR/lower_array_len.rs:+0:43: +0:46
|
|
||||||
let mut _0: usize; // return place in scope 0 at $DIR/lower_array_len.rs:+0:60: +0:65
|
|
||||||
let mut _2: &[u8]; // in scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
|
|
||||||
let mut _3: &[u8; N]; // in scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
|
|
||||||
let mut _4: &[u8; N]; // in scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
|
|
||||||
|
|
||||||
bb0: {
|
|
||||||
StorageLive(_2); // scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
|
|
||||||
StorageLive(_3); // scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
|
|
||||||
_3 = &_1; // scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
|
|
||||||
StorageLive(_4); // scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
|
|
||||||
_4 = _3; // scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
|
|
||||||
_2 = move _3 as &[u8] (Pointer(Unsize)); // scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
|
|
||||||
StorageDead(_3); // scope 0 at $DIR/lower_array_len.rs:+1:7: +1:8
|
|
||||||
- _0 = Len((*_4)); // scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
|
|
||||||
+ _0 = const N; // scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
|
|
||||||
StorageDead(_4); // scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
|
|
||||||
StorageDead(_2); // scope 0 at $DIR/lower_array_len.rs:+1:13: +1:14
|
|
||||||
return; // scope 0 at $DIR/lower_array_len.rs:+2:2: +2:2
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,22 +0,0 @@
|
||||||
- // MIR for `array_len_by_value` before SimplifyLocals
|
|
||||||
+ // MIR for `array_len_by_value` after SimplifyLocals
|
|
||||||
|
|
||||||
fn array_len_by_value(_1: [u8; N]) -> usize {
|
|
||||||
debug arr => _1; // in scope 0 at $DIR/lower_array_len.rs:+0:43: +0:46
|
|
||||||
let mut _0: usize; // return place in scope 0 at $DIR/lower_array_len.rs:+0:60: +0:65
|
|
||||||
- let mut _2: &[u8]; // in scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
|
|
||||||
- let mut _3: &[u8; N]; // in scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
|
|
||||||
- let mut _4: &[u8; N]; // in scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
|
|
||||||
|
|
||||||
bb0: {
|
|
||||||
- StorageLive(_2); // scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
|
|
||||||
- StorageLive(_3); // scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
|
|
||||||
- StorageLive(_4); // scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
|
|
||||||
- StorageDead(_3); // scope 0 at $DIR/lower_array_len.rs:+1:7: +1:8
|
|
||||||
_0 = const N; // scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
|
|
||||||
- StorageDead(_4); // scope 0 at $DIR/lower_array_len.rs:+1:5: +1:14
|
|
||||||
- StorageDead(_2); // scope 0 at $DIR/lower_array_len.rs:+1:13: +1:14
|
|
||||||
return; // scope 0 at $DIR/lower_array_len.rs:+2:2: +2:2
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
// compile-flags: -Z mir-opt-level=4
|
// unit-test: NormalizeArrayLen
|
||||||
|
// compile-flags: -Zmir-enable-passes=+LowerSliceLenCalls
|
||||||
|
|
||||||
// EMIT_MIR lower_array_len.array_bound.NormalizeArrayLen.diff
|
// EMIT_MIR lower_array_len.array_bound.NormalizeArrayLen.diff
|
||||||
// EMIT_MIR lower_array_len.array_bound.SimplifyLocals.diff
|
|
||||||
// EMIT_MIR lower_array_len.array_bound.InstCombine.diff
|
|
||||||
pub fn array_bound<const N: usize>(index: usize, slice: &[u8; N]) -> u8 {
|
pub fn array_bound<const N: usize>(index: usize, slice: &[u8; N]) -> u8 {
|
||||||
if index < slice.len() {
|
if index < slice.len() {
|
||||||
slice[index]
|
slice[index]
|
||||||
|
@ -12,8 +11,6 @@ pub fn array_bound<const N: usize>(index: usize, slice: &[u8; N]) -> u8 {
|
||||||
}
|
}
|
||||||
|
|
||||||
// EMIT_MIR lower_array_len.array_bound_mut.NormalizeArrayLen.diff
|
// EMIT_MIR lower_array_len.array_bound_mut.NormalizeArrayLen.diff
|
||||||
// EMIT_MIR lower_array_len.array_bound_mut.SimplifyLocals.diff
|
|
||||||
// EMIT_MIR lower_array_len.array_bound_mut.InstCombine.diff
|
|
||||||
pub fn array_bound_mut<const N: usize>(index: usize, slice: &mut [u8; N]) -> u8 {
|
pub fn array_bound_mut<const N: usize>(index: usize, slice: &mut [u8; N]) -> u8 {
|
||||||
if index < slice.len() {
|
if index < slice.len() {
|
||||||
slice[index]
|
slice[index]
|
||||||
|
@ -25,15 +22,11 @@ pub fn array_bound_mut<const N: usize>(index: usize, slice: &mut [u8; N]) -> u8
|
||||||
}
|
}
|
||||||
|
|
||||||
// EMIT_MIR lower_array_len.array_len.NormalizeArrayLen.diff
|
// EMIT_MIR lower_array_len.array_len.NormalizeArrayLen.diff
|
||||||
// EMIT_MIR lower_array_len.array_len.SimplifyLocals.diff
|
|
||||||
// EMIT_MIR lower_array_len.array_len.InstCombine.diff
|
|
||||||
pub fn array_len<const N: usize>(arr: &[u8; N]) -> usize {
|
pub fn array_len<const N: usize>(arr: &[u8; N]) -> usize {
|
||||||
arr.len()
|
arr.len()
|
||||||
}
|
}
|
||||||
|
|
||||||
// EMIT_MIR lower_array_len.array_len_by_value.NormalizeArrayLen.diff
|
// EMIT_MIR lower_array_len.array_len_by_value.NormalizeArrayLen.diff
|
||||||
// EMIT_MIR lower_array_len.array_len_by_value.SimplifyLocals.diff
|
|
||||||
// EMIT_MIR lower_array_len.array_len_by_value.InstCombine.diff
|
|
||||||
pub fn array_len_by_value<const N: usize>(arr: [u8; N]) -> usize {
|
pub fn array_len_by_value<const N: usize>(arr: [u8; N]) -> usize {
|
||||||
arr.len()
|
arr.len()
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,49 @@
|
||||||
|
// MIR for `array_bound` after PreCodegen
|
||||||
|
|
||||||
|
fn array_bound(_1: usize, _2: &[u8; N]) -> u8 {
|
||||||
|
debug index => _1; // in scope 0 at $DIR/lower_array_len_e2e.rs:+0:36: +0:41
|
||||||
|
debug slice => _2; // in scope 0 at $DIR/lower_array_len_e2e.rs:+0:50: +0:55
|
||||||
|
let mut _0: u8; // return place in scope 0 at $DIR/lower_array_len_e2e.rs:+0:70: +0:72
|
||||||
|
let mut _3: bool; // in scope 0 at $DIR/lower_array_len_e2e.rs:+1:8: +1:27
|
||||||
|
let mut _4: usize; // in scope 0 at $DIR/lower_array_len_e2e.rs:+1:8: +1:13
|
||||||
|
let mut _5: usize; // in scope 0 at $DIR/lower_array_len_e2e.rs:+1:16: +1:27
|
||||||
|
let _6: usize; // in scope 0 at $DIR/lower_array_len_e2e.rs:+2:15: +2:20
|
||||||
|
let mut _7: usize; // in scope 0 at $DIR/lower_array_len_e2e.rs:+2:9: +2:21
|
||||||
|
let mut _8: bool; // in scope 0 at $DIR/lower_array_len_e2e.rs:+2:9: +2:21
|
||||||
|
|
||||||
|
bb0: {
|
||||||
|
StorageLive(_3); // scope 0 at $DIR/lower_array_len_e2e.rs:+1:8: +1:27
|
||||||
|
StorageLive(_4); // scope 0 at $DIR/lower_array_len_e2e.rs:+1:8: +1:13
|
||||||
|
_4 = _1; // scope 0 at $DIR/lower_array_len_e2e.rs:+1:8: +1:13
|
||||||
|
StorageLive(_5); // scope 0 at $DIR/lower_array_len_e2e.rs:+1:16: +1:27
|
||||||
|
_5 = const N; // scope 0 at $DIR/lower_array_len_e2e.rs:+1:16: +1:27
|
||||||
|
_3 = Lt(move _4, move _5); // scope 0 at $DIR/lower_array_len_e2e.rs:+1:8: +1:27
|
||||||
|
StorageDead(_5); // scope 0 at $DIR/lower_array_len_e2e.rs:+1:26: +1:27
|
||||||
|
StorageDead(_4); // scope 0 at $DIR/lower_array_len_e2e.rs:+1:26: +1:27
|
||||||
|
switchInt(move _3) -> [false: bb3, otherwise: bb1]; // scope 0 at $DIR/lower_array_len_e2e.rs:+1:8: +1:27
|
||||||
|
}
|
||||||
|
|
||||||
|
bb1: {
|
||||||
|
StorageLive(_6); // scope 0 at $DIR/lower_array_len_e2e.rs:+2:15: +2:20
|
||||||
|
_6 = _1; // scope 0 at $DIR/lower_array_len_e2e.rs:+2:15: +2:20
|
||||||
|
_7 = const N; // scope 0 at $DIR/lower_array_len_e2e.rs:+2:9: +2:21
|
||||||
|
_8 = Lt(_6, _7); // scope 0 at $DIR/lower_array_len_e2e.rs:+2:9: +2:21
|
||||||
|
assert(move _8, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> bb2; // scope 0 at $DIR/lower_array_len_e2e.rs:+2:9: +2:21
|
||||||
|
}
|
||||||
|
|
||||||
|
bb2: {
|
||||||
|
_0 = (*_2)[_6]; // scope 0 at $DIR/lower_array_len_e2e.rs:+2:9: +2:21
|
||||||
|
StorageDead(_6); // scope 0 at $DIR/lower_array_len_e2e.rs:+3:5: +3:6
|
||||||
|
goto -> bb4; // scope 0 at $DIR/lower_array_len_e2e.rs:+1:5: +5:6
|
||||||
|
}
|
||||||
|
|
||||||
|
bb3: {
|
||||||
|
_0 = const 42_u8; // scope 0 at $DIR/lower_array_len_e2e.rs:+4:9: +4:11
|
||||||
|
goto -> bb4; // scope 0 at $DIR/lower_array_len_e2e.rs:+1:5: +5:6
|
||||||
|
}
|
||||||
|
|
||||||
|
bb4: {
|
||||||
|
StorageDead(_3); // scope 0 at $DIR/lower_array_len_e2e.rs:+5:5: +5:6
|
||||||
|
return; // scope 0 at $DIR/lower_array_len_e2e.rs:+6:2: +6:2
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,62 @@
|
||||||
|
// MIR for `array_bound_mut` after PreCodegen
|
||||||
|
|
||||||
|
fn array_bound_mut(_1: usize, _2: &mut [u8; N]) -> u8 {
|
||||||
|
debug index => _1; // in scope 0 at $DIR/lower_array_len_e2e.rs:+0:40: +0:45
|
||||||
|
debug slice => _2; // in scope 0 at $DIR/lower_array_len_e2e.rs:+0:54: +0:59
|
||||||
|
let mut _0: u8; // return place in scope 0 at $DIR/lower_array_len_e2e.rs:+0:78: +0:80
|
||||||
|
let mut _3: bool; // in scope 0 at $DIR/lower_array_len_e2e.rs:+1:8: +1:27
|
||||||
|
let mut _4: usize; // in scope 0 at $DIR/lower_array_len_e2e.rs:+1:8: +1:13
|
||||||
|
let mut _5: usize; // in scope 0 at $DIR/lower_array_len_e2e.rs:+1:16: +1:27
|
||||||
|
let _6: usize; // in scope 0 at $DIR/lower_array_len_e2e.rs:+2:15: +2:20
|
||||||
|
let mut _7: usize; // in scope 0 at $DIR/lower_array_len_e2e.rs:+2:9: +2:21
|
||||||
|
let mut _8: bool; // in scope 0 at $DIR/lower_array_len_e2e.rs:+2:9: +2:21
|
||||||
|
let _9: usize; // in scope 0 at $DIR/lower_array_len_e2e.rs:+4:15: +4:16
|
||||||
|
let mut _10: usize; // in scope 0 at $DIR/lower_array_len_e2e.rs:+4:9: +4:17
|
||||||
|
let mut _11: bool; // in scope 0 at $DIR/lower_array_len_e2e.rs:+4:9: +4:17
|
||||||
|
|
||||||
|
bb0: {
|
||||||
|
StorageLive(_3); // scope 0 at $DIR/lower_array_len_e2e.rs:+1:8: +1:27
|
||||||
|
StorageLive(_4); // scope 0 at $DIR/lower_array_len_e2e.rs:+1:8: +1:13
|
||||||
|
_4 = _1; // scope 0 at $DIR/lower_array_len_e2e.rs:+1:8: +1:13
|
||||||
|
StorageLive(_5); // scope 0 at $DIR/lower_array_len_e2e.rs:+1:16: +1:27
|
||||||
|
_5 = const N; // scope 0 at $DIR/lower_array_len_e2e.rs:+1:16: +1:27
|
||||||
|
_3 = Lt(move _4, move _5); // scope 0 at $DIR/lower_array_len_e2e.rs:+1:8: +1:27
|
||||||
|
StorageDead(_5); // scope 0 at $DIR/lower_array_len_e2e.rs:+1:26: +1:27
|
||||||
|
StorageDead(_4); // scope 0 at $DIR/lower_array_len_e2e.rs:+1:26: +1:27
|
||||||
|
switchInt(move _3) -> [false: bb3, otherwise: bb1]; // scope 0 at $DIR/lower_array_len_e2e.rs:+1:8: +1:27
|
||||||
|
}
|
||||||
|
|
||||||
|
bb1: {
|
||||||
|
StorageLive(_6); // scope 0 at $DIR/lower_array_len_e2e.rs:+2:15: +2:20
|
||||||
|
_6 = _1; // scope 0 at $DIR/lower_array_len_e2e.rs:+2:15: +2:20
|
||||||
|
_7 = const N; // scope 0 at $DIR/lower_array_len_e2e.rs:+2:9: +2:21
|
||||||
|
_8 = Lt(_6, _7); // scope 0 at $DIR/lower_array_len_e2e.rs:+2:9: +2:21
|
||||||
|
assert(move _8, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> bb2; // scope 0 at $DIR/lower_array_len_e2e.rs:+2:9: +2:21
|
||||||
|
}
|
||||||
|
|
||||||
|
bb2: {
|
||||||
|
_0 = (*_2)[_6]; // scope 0 at $DIR/lower_array_len_e2e.rs:+2:9: +2:21
|
||||||
|
StorageDead(_6); // scope 0 at $DIR/lower_array_len_e2e.rs:+3:5: +3:6
|
||||||
|
goto -> bb5; // scope 0 at $DIR/lower_array_len_e2e.rs:+1:5: +7:6
|
||||||
|
}
|
||||||
|
|
||||||
|
bb3: {
|
||||||
|
StorageLive(_9); // scope 0 at $DIR/lower_array_len_e2e.rs:+4:15: +4:16
|
||||||
|
_9 = const 0_usize; // scope 0 at $DIR/lower_array_len_e2e.rs:+4:15: +4:16
|
||||||
|
_10 = const N; // scope 0 at $DIR/lower_array_len_e2e.rs:+4:9: +4:17
|
||||||
|
_11 = Lt(const 0_usize, _10); // scope 0 at $DIR/lower_array_len_e2e.rs:+4:9: +4:17
|
||||||
|
assert(move _11, "index out of bounds: the length is {} but the index is {}", move _10, const 0_usize) -> bb4; // scope 0 at $DIR/lower_array_len_e2e.rs:+4:9: +4:17
|
||||||
|
}
|
||||||
|
|
||||||
|
bb4: {
|
||||||
|
(*_2)[_9] = const 42_u8; // scope 0 at $DIR/lower_array_len_e2e.rs:+4:9: +4:22
|
||||||
|
StorageDead(_9); // scope 0 at $DIR/lower_array_len_e2e.rs:+4:22: +4:23
|
||||||
|
_0 = const 42_u8; // scope 0 at $DIR/lower_array_len_e2e.rs:+6:9: +6:11
|
||||||
|
goto -> bb5; // scope 0 at $DIR/lower_array_len_e2e.rs:+1:5: +7:6
|
||||||
|
}
|
||||||
|
|
||||||
|
bb5: {
|
||||||
|
StorageDead(_3); // scope 0 at $DIR/lower_array_len_e2e.rs:+7:5: +7:6
|
||||||
|
return; // scope 0 at $DIR/lower_array_len_e2e.rs:+8:2: +8:2
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
// MIR for `array_len` after PreCodegen
|
||||||
|
|
||||||
|
fn array_len(_1: &[u8; N]) -> usize {
|
||||||
|
debug arr => _1; // in scope 0 at $DIR/lower_array_len_e2e.rs:+0:34: +0:37
|
||||||
|
let mut _0: usize; // return place in scope 0 at $DIR/lower_array_len_e2e.rs:+0:52: +0:57
|
||||||
|
|
||||||
|
bb0: {
|
||||||
|
_0 = const N; // scope 0 at $DIR/lower_array_len_e2e.rs:+1:5: +1:14
|
||||||
|
return; // scope 0 at $DIR/lower_array_len_e2e.rs:+2:2: +2:2
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
// MIR for `array_len_by_value` after PreCodegen
|
||||||
|
|
||||||
|
fn array_len_by_value(_1: [u8; N]) -> usize {
|
||||||
|
debug arr => _1; // in scope 0 at $DIR/lower_array_len_e2e.rs:+0:43: +0:46
|
||||||
|
let mut _0: usize; // return place in scope 0 at $DIR/lower_array_len_e2e.rs:+0:60: +0:65
|
||||||
|
|
||||||
|
bb0: {
|
||||||
|
_0 = const N; // scope 0 at $DIR/lower_array_len_e2e.rs:+1:5: +1:14
|
||||||
|
return; // scope 0 at $DIR/lower_array_len_e2e.rs:+2:2: +2:2
|
||||||
|
}
|
||||||
|
}
|
39
src/test/mir-opt/lower_array_len_e2e.rs
Normal file
39
src/test/mir-opt/lower_array_len_e2e.rs
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
// compile-flags: -Z mir-opt-level=4
|
||||||
|
|
||||||
|
// EMIT_MIR lower_array_len_e2e.array_bound.PreCodegen.after.mir
|
||||||
|
pub fn array_bound<const N: usize>(index: usize, slice: &[u8; N]) -> u8 {
|
||||||
|
if index < slice.len() {
|
||||||
|
slice[index]
|
||||||
|
} else {
|
||||||
|
42
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// EMIT_MIR lower_array_len_e2e.array_bound_mut.PreCodegen.after.mir
|
||||||
|
pub fn array_bound_mut<const N: usize>(index: usize, slice: &mut [u8; N]) -> u8 {
|
||||||
|
if index < slice.len() {
|
||||||
|
slice[index]
|
||||||
|
} else {
|
||||||
|
slice[0] = 42;
|
||||||
|
|
||||||
|
42
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// EMIT_MIR lower_array_len_e2e.array_len.PreCodegen.after.mir
|
||||||
|
pub fn array_len<const N: usize>(arr: &[u8; N]) -> usize {
|
||||||
|
arr.len()
|
||||||
|
}
|
||||||
|
|
||||||
|
// EMIT_MIR lower_array_len_e2e.array_len_by_value.PreCodegen.after.mir
|
||||||
|
pub fn array_len_by_value<const N: usize>(arr: [u8; N]) -> usize {
|
||||||
|
arr.len()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let _ = array_bound(3, &[0, 1, 2, 3]);
|
||||||
|
let mut tmp = [0, 1, 2, 3, 4];
|
||||||
|
let _ = array_bound_mut(3, &mut [0, 1, 2, 3]);
|
||||||
|
let _ = array_len(&[0]);
|
||||||
|
let _ = array_len_by_value([0, 2]);
|
||||||
|
}
|
|
@ -7,7 +7,7 @@
|
||||||
bb0: {
|
bb0: {
|
||||||
- _0 = std::intrinsics::min_align_of::<T>() -> bb1; // scope 0 at $DIR/lower_intrinsics.rs:+1:5: +1:42
|
- _0 = std::intrinsics::min_align_of::<T>() -> bb1; // scope 0 at $DIR/lower_intrinsics.rs:+1:5: +1:42
|
||||||
- // mir::Constant
|
- // mir::Constant
|
||||||
- // + span: $DIR/lower_intrinsics.rs:19:5: 19:40
|
- // + span: $DIR/lower_intrinsics.rs:21:5: 21:40
|
||||||
- // + literal: Const { ty: extern "rust-intrinsic" fn() -> usize {std::intrinsics::min_align_of::<T>}, val: Value(<ZST>) }
|
- // + literal: Const { ty: extern "rust-intrinsic" fn() -> usize {std::intrinsics::min_align_of::<T>}, val: Value(<ZST>) }
|
||||||
+ _0 = AlignOf(T); // scope 0 at $DIR/lower_intrinsics.rs:+1:5: +1:42
|
+ _0 = AlignOf(T); // scope 0 at $DIR/lower_intrinsics.rs:+1:5: +1:42
|
||||||
+ goto -> bb1; // scope 0 at $DIR/lower_intrinsics.rs:+1:5: +1:42
|
+ goto -> bb1; // scope 0 at $DIR/lower_intrinsics.rs:+1:5: +1:42
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
_3 = &(*_4); // scope 0 at $DIR/lower_intrinsics.rs:+1:42: +1:44
|
_3 = &(*_4); // scope 0 at $DIR/lower_intrinsics.rs:+1:42: +1:44
|
||||||
- _2 = discriminant_value::<T>(move _3) -> bb1; // scope 0 at $DIR/lower_intrinsics.rs:+1:5: +1:45
|
- _2 = discriminant_value::<T>(move _3) -> bb1; // scope 0 at $DIR/lower_intrinsics.rs:+1:5: +1:45
|
||||||
- // mir::Constant
|
- // mir::Constant
|
||||||
- // + span: $DIR/lower_intrinsics.rs:74:5: 74:41
|
- // + span: $DIR/lower_intrinsics.rs:49:5: 49:41
|
||||||
- // + literal: Const { ty: for<'r> extern "rust-intrinsic" fn(&'r T) -> <T as DiscriminantKind>::Discriminant {discriminant_value::<T>}, val: Value(<ZST>) }
|
- // + literal: Const { ty: for<'r> extern "rust-intrinsic" fn(&'r T) -> <T as DiscriminantKind>::Discriminant {discriminant_value::<T>}, val: Value(<ZST>) }
|
||||||
+ _2 = discriminant((*_3)); // scope 0 at $DIR/lower_intrinsics.rs:+1:5: +1:45
|
+ _2 = discriminant((*_3)); // scope 0 at $DIR/lower_intrinsics.rs:+1:5: +1:45
|
||||||
+ goto -> bb1; // scope 0 at $DIR/lower_intrinsics.rs:+1:5: +1:45
|
+ goto -> bb1; // scope 0 at $DIR/lower_intrinsics.rs:+1:5: +1:45
|
||||||
|
@ -46,13 +46,13 @@
|
||||||
StorageLive(_7); // scope 0 at $DIR/lower_intrinsics.rs:+2:42: +2:44
|
StorageLive(_7); // scope 0 at $DIR/lower_intrinsics.rs:+2:42: +2:44
|
||||||
_19 = const discriminant::<T>::promoted[2]; // scope 0 at $DIR/lower_intrinsics.rs:+2:42: +2:44
|
_19 = const discriminant::<T>::promoted[2]; // scope 0 at $DIR/lower_intrinsics.rs:+2:42: +2:44
|
||||||
// mir::Constant
|
// mir::Constant
|
||||||
// + span: $DIR/lower_intrinsics.rs:75:42: 75:44
|
// + span: $DIR/lower_intrinsics.rs:50:42: 50:44
|
||||||
// + literal: Const { ty: &i32, val: Unevaluated(discriminant, [T], Some(promoted[2])) }
|
// + literal: Const { ty: &i32, val: Unevaluated(discriminant, [T], Some(promoted[2])) }
|
||||||
_7 = &(*_19); // scope 0 at $DIR/lower_intrinsics.rs:+2:42: +2:44
|
_7 = &(*_19); // scope 0 at $DIR/lower_intrinsics.rs:+2:42: +2:44
|
||||||
_6 = &(*_7); // scope 0 at $DIR/lower_intrinsics.rs:+2:42: +2:44
|
_6 = &(*_7); // scope 0 at $DIR/lower_intrinsics.rs:+2:42: +2:44
|
||||||
- _5 = discriminant_value::<i32>(move _6) -> bb2; // scope 0 at $DIR/lower_intrinsics.rs:+2:5: +2:45
|
- _5 = discriminant_value::<i32>(move _6) -> bb2; // scope 0 at $DIR/lower_intrinsics.rs:+2:5: +2:45
|
||||||
- // mir::Constant
|
- // mir::Constant
|
||||||
- // + span: $DIR/lower_intrinsics.rs:75:5: 75:41
|
- // + span: $DIR/lower_intrinsics.rs:50:5: 50:41
|
||||||
- // + literal: Const { ty: for<'r> extern "rust-intrinsic" fn(&'r i32) -> <i32 as DiscriminantKind>::Discriminant {discriminant_value::<i32>}, val: Value(<ZST>) }
|
- // + literal: Const { ty: for<'r> extern "rust-intrinsic" fn(&'r i32) -> <i32 as DiscriminantKind>::Discriminant {discriminant_value::<i32>}, val: Value(<ZST>) }
|
||||||
+ _5 = discriminant((*_6)); // scope 0 at $DIR/lower_intrinsics.rs:+2:5: +2:45
|
+ _5 = discriminant((*_6)); // scope 0 at $DIR/lower_intrinsics.rs:+2:5: +2:45
|
||||||
+ goto -> bb2; // scope 0 at $DIR/lower_intrinsics.rs:+2:5: +2:45
|
+ goto -> bb2; // scope 0 at $DIR/lower_intrinsics.rs:+2:5: +2:45
|
||||||
|
@ -67,13 +67,13 @@
|
||||||
StorageLive(_11); // scope 0 at $DIR/lower_intrinsics.rs:+3:42: +3:45
|
StorageLive(_11); // scope 0 at $DIR/lower_intrinsics.rs:+3:42: +3:45
|
||||||
_18 = const discriminant::<T>::promoted[1]; // scope 0 at $DIR/lower_intrinsics.rs:+3:42: +3:45
|
_18 = const discriminant::<T>::promoted[1]; // scope 0 at $DIR/lower_intrinsics.rs:+3:42: +3:45
|
||||||
// mir::Constant
|
// mir::Constant
|
||||||
// + span: $DIR/lower_intrinsics.rs:76:42: 76:45
|
// + span: $DIR/lower_intrinsics.rs:51:42: 51:45
|
||||||
// + literal: Const { ty: &(), val: Unevaluated(discriminant, [T], Some(promoted[1])) }
|
// + literal: Const { ty: &(), val: Unevaluated(discriminant, [T], Some(promoted[1])) }
|
||||||
_11 = &(*_18); // scope 0 at $DIR/lower_intrinsics.rs:+3:42: +3:45
|
_11 = &(*_18); // scope 0 at $DIR/lower_intrinsics.rs:+3:42: +3:45
|
||||||
_10 = &(*_11); // scope 0 at $DIR/lower_intrinsics.rs:+3:42: +3:45
|
_10 = &(*_11); // scope 0 at $DIR/lower_intrinsics.rs:+3:42: +3:45
|
||||||
- _9 = discriminant_value::<()>(move _10) -> bb3; // scope 0 at $DIR/lower_intrinsics.rs:+3:5: +3:46
|
- _9 = discriminant_value::<()>(move _10) -> bb3; // scope 0 at $DIR/lower_intrinsics.rs:+3:5: +3:46
|
||||||
- // mir::Constant
|
- // mir::Constant
|
||||||
- // + span: $DIR/lower_intrinsics.rs:76:5: 76:41
|
- // + span: $DIR/lower_intrinsics.rs:51:5: 51:41
|
||||||
- // + literal: Const { ty: for<'r> extern "rust-intrinsic" fn(&'r ()) -> <() as DiscriminantKind>::Discriminant {discriminant_value::<()>}, val: Value(<ZST>) }
|
- // + literal: Const { ty: for<'r> extern "rust-intrinsic" fn(&'r ()) -> <() as DiscriminantKind>::Discriminant {discriminant_value::<()>}, val: Value(<ZST>) }
|
||||||
+ _9 = discriminant((*_10)); // scope 0 at $DIR/lower_intrinsics.rs:+3:5: +3:46
|
+ _9 = discriminant((*_10)); // scope 0 at $DIR/lower_intrinsics.rs:+3:5: +3:46
|
||||||
+ goto -> bb3; // scope 0 at $DIR/lower_intrinsics.rs:+3:5: +3:46
|
+ goto -> bb3; // scope 0 at $DIR/lower_intrinsics.rs:+3:5: +3:46
|
||||||
|
@ -88,13 +88,13 @@
|
||||||
StorageLive(_15); // scope 0 at $DIR/lower_intrinsics.rs:+4:42: +4:47
|
StorageLive(_15); // scope 0 at $DIR/lower_intrinsics.rs:+4:42: +4:47
|
||||||
_17 = const discriminant::<T>::promoted[0]; // scope 0 at $DIR/lower_intrinsics.rs:+4:42: +4:47
|
_17 = const discriminant::<T>::promoted[0]; // scope 0 at $DIR/lower_intrinsics.rs:+4:42: +4:47
|
||||||
// mir::Constant
|
// mir::Constant
|
||||||
// + span: $DIR/lower_intrinsics.rs:77:42: 77:47
|
// + span: $DIR/lower_intrinsics.rs:52:42: 52:47
|
||||||
// + literal: Const { ty: &E, val: Unevaluated(discriminant, [T], Some(promoted[0])) }
|
// + literal: Const { ty: &E, val: Unevaluated(discriminant, [T], Some(promoted[0])) }
|
||||||
_15 = &(*_17); // scope 0 at $DIR/lower_intrinsics.rs:+4:42: +4:47
|
_15 = &(*_17); // scope 0 at $DIR/lower_intrinsics.rs:+4:42: +4:47
|
||||||
_14 = &(*_15); // scope 0 at $DIR/lower_intrinsics.rs:+4:42: +4:47
|
_14 = &(*_15); // scope 0 at $DIR/lower_intrinsics.rs:+4:42: +4:47
|
||||||
- _13 = discriminant_value::<E>(move _14) -> bb4; // scope 0 at $DIR/lower_intrinsics.rs:+4:5: +4:48
|
- _13 = discriminant_value::<E>(move _14) -> bb4; // scope 0 at $DIR/lower_intrinsics.rs:+4:5: +4:48
|
||||||
- // mir::Constant
|
- // mir::Constant
|
||||||
- // + span: $DIR/lower_intrinsics.rs:77:5: 77:41
|
- // + span: $DIR/lower_intrinsics.rs:52:5: 52:41
|
||||||
- // + literal: Const { ty: for<'r> extern "rust-intrinsic" fn(&'r E) -> <E as DiscriminantKind>::Discriminant {discriminant_value::<E>}, val: Value(<ZST>) }
|
- // + literal: Const { ty: for<'r> extern "rust-intrinsic" fn(&'r E) -> <E as DiscriminantKind>::Discriminant {discriminant_value::<E>}, val: Value(<ZST>) }
|
||||||
+ _13 = discriminant((*_14)); // scope 0 at $DIR/lower_intrinsics.rs:+4:5: +4:48
|
+ _13 = discriminant((*_14)); // scope 0 at $DIR/lower_intrinsics.rs:+4:5: +4:48
|
||||||
+ goto -> bb4; // scope 0 at $DIR/lower_intrinsics.rs:+4:5: +4:48
|
+ goto -> bb4; // scope 0 at $DIR/lower_intrinsics.rs:+4:5: +4:48
|
||||||
|
@ -105,11 +105,15 @@
|
||||||
StorageDead(_15); // scope 0 at $DIR/lower_intrinsics.rs:+4:48: +4:49
|
StorageDead(_15); // scope 0 at $DIR/lower_intrinsics.rs:+4:48: +4:49
|
||||||
StorageDead(_13); // scope 0 at $DIR/lower_intrinsics.rs:+4:48: +4:49
|
StorageDead(_13); // scope 0 at $DIR/lower_intrinsics.rs:+4:48: +4:49
|
||||||
_0 = const (); // scope 0 at $DIR/lower_intrinsics.rs:+0:30: +5:2
|
_0 = const (); // scope 0 at $DIR/lower_intrinsics.rs:+0:30: +5:2
|
||||||
drop(_1) -> bb5; // scope 0 at $DIR/lower_intrinsics.rs:+5:1: +5:2
|
drop(_1) -> [return: bb5, unwind: bb6]; // scope 0 at $DIR/lower_intrinsics.rs:+5:1: +5:2
|
||||||
}
|
}
|
||||||
|
|
||||||
bb5: {
|
bb5: {
|
||||||
return; // scope 0 at $DIR/lower_intrinsics.rs:+5:2: +5:2
|
return; // scope 0 at $DIR/lower_intrinsics.rs:+5:2: +5:2
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bb6 (cleanup): {
|
||||||
|
resume; // scope 0 at $DIR/lower_intrinsics.rs:+0:1: +5:2
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
_2 = move _1; // scope 0 at $DIR/lower_intrinsics.rs:+1:30: +1:31
|
_2 = move _1; // scope 0 at $DIR/lower_intrinsics.rs:+1:30: +1:31
|
||||||
- _0 = std::intrinsics::forget::<T>(move _2) -> bb1; // scope 0 at $DIR/lower_intrinsics.rs:+1:5: +1:32
|
- _0 = std::intrinsics::forget::<T>(move _2) -> bb1; // scope 0 at $DIR/lower_intrinsics.rs:+1:5: +1:32
|
||||||
- // mir::Constant
|
- // mir::Constant
|
||||||
- // + span: $DIR/lower_intrinsics.rs:24:5: 24:29
|
- // + span: $DIR/lower_intrinsics.rs:26:5: 26:29
|
||||||
- // + literal: Const { ty: extern "rust-intrinsic" fn(T) {std::intrinsics::forget::<T>}, val: Value(<ZST>) }
|
- // + literal: Const { ty: extern "rust-intrinsic" fn(T) {std::intrinsics::forget::<T>}, val: Value(<ZST>) }
|
||||||
+ _0 = const (); // scope 0 at $DIR/lower_intrinsics.rs:+1:5: +1:32
|
+ _0 = const (); // scope 0 at $DIR/lower_intrinsics.rs:+1:5: +1:32
|
||||||
+ goto -> bb1; // scope 0 at $DIR/lower_intrinsics.rs:+1:5: +1:32
|
+ goto -> bb1; // scope 0 at $DIR/lower_intrinsics.rs:+1:5: +1:32
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
StorageLive(_1); // scope 0 at $DIR/lower_intrinsics.rs:+2:9: +2:18
|
StorageLive(_1); // scope 0 at $DIR/lower_intrinsics.rs:+2:9: +2:18
|
||||||
_1 = std::intrinsics::size_of::<T>; // scope 0 at $DIR/lower_intrinsics.rs:+2:21: +2:51
|
_1 = std::intrinsics::size_of::<T>; // scope 0 at $DIR/lower_intrinsics.rs:+2:21: +2:51
|
||||||
// mir::Constant
|
// mir::Constant
|
||||||
// + span: $DIR/lower_intrinsics.rs:62:21: 62:51
|
// + span: $DIR/lower_intrinsics.rs:37:21: 37:51
|
||||||
// + literal: Const { ty: extern "rust-intrinsic" fn() -> usize {std::intrinsics::size_of::<T>}, val: Value(<ZST>) }
|
// + literal: Const { ty: extern "rust-intrinsic" fn() -> usize {std::intrinsics::size_of::<T>}, val: Value(<ZST>) }
|
||||||
StorageLive(_2); // scope 1 at $DIR/lower_intrinsics.rs:+3:5: +3:14
|
StorageLive(_2); // scope 1 at $DIR/lower_intrinsics.rs:+3:5: +3:14
|
||||||
_2 = _1; // scope 1 at $DIR/lower_intrinsics.rs:+3:5: +3:14
|
_2 = _1; // scope 1 at $DIR/lower_intrinsics.rs:+3:5: +3:14
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
// compile-flags: -Cpanic=abort
|
// unit-test: LowerIntrinsics
|
||||||
|
// ignore-wasm32 compiled with panic=abort by default
|
||||||
|
|
||||||
#![feature(core_intrinsics)]
|
#![feature(core_intrinsics)]
|
||||||
#![crate_type = "lib"]
|
#![crate_type = "lib"]
|
||||||
|
|
||||||
|
@ -29,33 +31,6 @@ pub fn unreachable() -> ! {
|
||||||
unsafe { core::intrinsics::unreachable() };
|
unsafe { core::intrinsics::unreachable() };
|
||||||
}
|
}
|
||||||
|
|
||||||
// EMIT_MIR lower_intrinsics.f_unit.PreCodegen.before.mir
|
|
||||||
pub fn f_unit() {
|
|
||||||
f_dispatch(());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// EMIT_MIR lower_intrinsics.f_u64.PreCodegen.before.mir
|
|
||||||
pub fn f_u64() {
|
|
||||||
f_dispatch(0u64);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[inline(always)]
|
|
||||||
pub fn f_dispatch<T>(t: T) {
|
|
||||||
if std::mem::size_of::<T>() == 0 {
|
|
||||||
f_zst(t);
|
|
||||||
} else {
|
|
||||||
f_non_zst(t);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[inline(never)]
|
|
||||||
pub fn f_zst<T>(_t: T) {
|
|
||||||
}
|
|
||||||
|
|
||||||
#[inline(never)]
|
|
||||||
pub fn f_non_zst<T>(_t: T) {}
|
|
||||||
|
|
||||||
// EMIT_MIR lower_intrinsics.non_const.LowerIntrinsics.diff
|
// EMIT_MIR lower_intrinsics.non_const.LowerIntrinsics.diff
|
||||||
pub fn non_const<T>() -> usize {
|
pub fn non_const<T>() -> usize {
|
||||||
// Check that lowering works with non-const operand as a func.
|
// Check that lowering works with non-const operand as a func.
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
bb0: {
|
bb0: {
|
||||||
- _0 = std::intrinsics::size_of::<T>() -> bb1; // scope 0 at $DIR/lower_intrinsics.rs:+1:5: +1:37
|
- _0 = std::intrinsics::size_of::<T>() -> bb1; // scope 0 at $DIR/lower_intrinsics.rs:+1:5: +1:37
|
||||||
- // mir::Constant
|
- // mir::Constant
|
||||||
- // + span: $DIR/lower_intrinsics.rs:14:5: 14:35
|
- // + span: $DIR/lower_intrinsics.rs:16:5: 16:35
|
||||||
- // + literal: Const { ty: extern "rust-intrinsic" fn() -> usize {std::intrinsics::size_of::<T>}, val: Value(<ZST>) }
|
- // + literal: Const { ty: extern "rust-intrinsic" fn() -> usize {std::intrinsics::size_of::<T>}, val: Value(<ZST>) }
|
||||||
+ _0 = SizeOf(T); // scope 0 at $DIR/lower_intrinsics.rs:+1:5: +1:37
|
+ _0 = SizeOf(T); // scope 0 at $DIR/lower_intrinsics.rs:+1:5: +1:37
|
||||||
+ goto -> bb1; // scope 0 at $DIR/lower_intrinsics.rs:+1:5: +1:37
|
+ goto -> bb1; // scope 0 at $DIR/lower_intrinsics.rs:+1:5: +1:37
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
StorageLive(_3); // scope 1 at $DIR/lower_intrinsics.rs:+1:14: +1:45
|
StorageLive(_3); // scope 1 at $DIR/lower_intrinsics.rs:+1:14: +1:45
|
||||||
- _3 = std::intrinsics::unreachable(); // scope 1 at $DIR/lower_intrinsics.rs:+1:14: +1:45
|
- _3 = std::intrinsics::unreachable(); // scope 1 at $DIR/lower_intrinsics.rs:+1:14: +1:45
|
||||||
- // mir::Constant
|
- // mir::Constant
|
||||||
- // + span: $DIR/lower_intrinsics.rs:29:14: 29:43
|
- // + span: $DIR/lower_intrinsics.rs:31:14: 31:43
|
||||||
- // + literal: Const { ty: unsafe extern "rust-intrinsic" fn() -> ! {std::intrinsics::unreachable}, val: Value(<ZST>) }
|
- // + literal: Const { ty: unsafe extern "rust-intrinsic" fn() -> ! {std::intrinsics::unreachable}, val: Value(<ZST>) }
|
||||||
+ unreachable; // scope 1 at $DIR/lower_intrinsics.rs:+1:14: +1:45
|
+ unreachable; // scope 1 at $DIR/lower_intrinsics.rs:+1:14: +1:45
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,7 +32,7 @@
|
||||||
_5 = _2; // scope 0 at $DIR/lower_intrinsics.rs:+1:48: +1:49
|
_5 = _2; // scope 0 at $DIR/lower_intrinsics.rs:+1:48: +1:49
|
||||||
- _3 = wrapping_add::<i32>(move _4, move _5) -> bb1; // scope 0 at $DIR/lower_intrinsics.rs:+1:14: +1:50
|
- _3 = wrapping_add::<i32>(move _4, move _5) -> bb1; // scope 0 at $DIR/lower_intrinsics.rs:+1:14: +1:50
|
||||||
- // mir::Constant
|
- // mir::Constant
|
||||||
- // + span: $DIR/lower_intrinsics.rs:7:14: 7:44
|
- // + span: $DIR/lower_intrinsics.rs:9:14: 9:44
|
||||||
- // + literal: Const { ty: extern "rust-intrinsic" fn(i32, i32) -> i32 {wrapping_add::<i32>}, val: Value(<ZST>) }
|
- // + literal: Const { ty: extern "rust-intrinsic" fn(i32, i32) -> i32 {wrapping_add::<i32>}, val: Value(<ZST>) }
|
||||||
+ _3 = Add(move _4, move _5); // scope 0 at $DIR/lower_intrinsics.rs:+1:14: +1:50
|
+ _3 = Add(move _4, move _5); // scope 0 at $DIR/lower_intrinsics.rs:+1:14: +1:50
|
||||||
+ goto -> bb1; // scope 0 at $DIR/lower_intrinsics.rs:+1:14: +1:50
|
+ goto -> bb1; // scope 0 at $DIR/lower_intrinsics.rs:+1:14: +1:50
|
||||||
|
@ -48,7 +48,7 @@
|
||||||
_8 = _2; // scope 1 at $DIR/lower_intrinsics.rs:+2:48: +2:49
|
_8 = _2; // scope 1 at $DIR/lower_intrinsics.rs:+2:48: +2:49
|
||||||
- _6 = wrapping_sub::<i32>(move _7, move _8) -> bb2; // scope 1 at $DIR/lower_intrinsics.rs:+2:14: +2:50
|
- _6 = wrapping_sub::<i32>(move _7, move _8) -> bb2; // scope 1 at $DIR/lower_intrinsics.rs:+2:14: +2:50
|
||||||
- // mir::Constant
|
- // mir::Constant
|
||||||
- // + span: $DIR/lower_intrinsics.rs:8:14: 8:44
|
- // + span: $DIR/lower_intrinsics.rs:10:14: 10:44
|
||||||
- // + literal: Const { ty: extern "rust-intrinsic" fn(i32, i32) -> i32 {wrapping_sub::<i32>}, val: Value(<ZST>) }
|
- // + literal: Const { ty: extern "rust-intrinsic" fn(i32, i32) -> i32 {wrapping_sub::<i32>}, val: Value(<ZST>) }
|
||||||
+ _6 = Sub(move _7, move _8); // scope 1 at $DIR/lower_intrinsics.rs:+2:14: +2:50
|
+ _6 = Sub(move _7, move _8); // scope 1 at $DIR/lower_intrinsics.rs:+2:14: +2:50
|
||||||
+ goto -> bb2; // scope 1 at $DIR/lower_intrinsics.rs:+2:14: +2:50
|
+ goto -> bb2; // scope 1 at $DIR/lower_intrinsics.rs:+2:14: +2:50
|
||||||
|
@ -64,7 +64,7 @@
|
||||||
_11 = _2; // scope 2 at $DIR/lower_intrinsics.rs:+3:48: +3:49
|
_11 = _2; // scope 2 at $DIR/lower_intrinsics.rs:+3:48: +3:49
|
||||||
- _9 = wrapping_mul::<i32>(move _10, move _11) -> bb3; // scope 2 at $DIR/lower_intrinsics.rs:+3:14: +3:50
|
- _9 = wrapping_mul::<i32>(move _10, move _11) -> bb3; // scope 2 at $DIR/lower_intrinsics.rs:+3:14: +3:50
|
||||||
- // mir::Constant
|
- // mir::Constant
|
||||||
- // + span: $DIR/lower_intrinsics.rs:9:14: 9:44
|
- // + span: $DIR/lower_intrinsics.rs:11:14: 11:44
|
||||||
- // + literal: Const { ty: extern "rust-intrinsic" fn(i32, i32) -> i32 {wrapping_mul::<i32>}, val: Value(<ZST>) }
|
- // + literal: Const { ty: extern "rust-intrinsic" fn(i32, i32) -> i32 {wrapping_mul::<i32>}, val: Value(<ZST>) }
|
||||||
+ _9 = Mul(move _10, move _11); // scope 2 at $DIR/lower_intrinsics.rs:+3:14: +3:50
|
+ _9 = Mul(move _10, move _11); // scope 2 at $DIR/lower_intrinsics.rs:+3:14: +3:50
|
||||||
+ goto -> bb3; // scope 2 at $DIR/lower_intrinsics.rs:+3:14: +3:50
|
+ goto -> bb3; // scope 2 at $DIR/lower_intrinsics.rs:+3:14: +3:50
|
||||||
|
|
|
@ -1,32 +1,32 @@
|
||||||
// MIR for `f_u64` before PreCodegen
|
// MIR for `f_u64` after PreCodegen
|
||||||
|
|
||||||
fn f_u64() -> () {
|
fn f_u64() -> () {
|
||||||
let mut _0: (); // return place in scope 0 at $DIR/lower_intrinsics.rs:+0:16: +0:16
|
let mut _0: (); // return place in scope 0 at $DIR/lower_intrinsics_e2e.rs:+0:16: +0:16
|
||||||
let mut _1: u64; // in scope 0 at $DIR/lower_intrinsics.rs:+1:5: +1:21
|
let mut _1: u64; // in scope 0 at $DIR/lower_intrinsics_e2e.rs:+1:5: +1:21
|
||||||
scope 1 (inlined f_dispatch::<u64>) { // at $DIR/lower_intrinsics.rs:40:5: 40:21
|
scope 1 (inlined f_dispatch::<u64>) { // at $DIR/lower_intrinsics_e2e.rs:15:5: 15:21
|
||||||
debug t => _1; // in scope 1 at $DIR/lower_intrinsics.rs:44:22: 44:23
|
debug t => _1; // in scope 1 at $DIR/lower_intrinsics_e2e.rs:19:22: 19:23
|
||||||
let _2: (); // in scope 1 at $DIR/lower_intrinsics.rs:48:9: 48:21
|
let _2: (); // in scope 1 at $DIR/lower_intrinsics_e2e.rs:23:9: 23:21
|
||||||
let mut _3: u64; // in scope 1 at $DIR/lower_intrinsics.rs:48:19: 48:20
|
let mut _3: u64; // in scope 1 at $DIR/lower_intrinsics_e2e.rs:23:19: 23:20
|
||||||
scope 2 (inlined std::mem::size_of::<u64>) { // at $DIR/lower_intrinsics.rs:45:8: 45:32
|
scope 2 (inlined std::mem::size_of::<u64>) { // at $DIR/lower_intrinsics_e2e.rs:20:8: 20:32
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bb0: {
|
bb0: {
|
||||||
StorageLive(_1); // scope 0 at $DIR/lower_intrinsics.rs:+1:5: +1:21
|
StorageLive(_1); // scope 0 at $DIR/lower_intrinsics_e2e.rs:+1:5: +1:21
|
||||||
_1 = const 0_u64; // scope 0 at $DIR/lower_intrinsics.rs:+1:5: +1:21
|
_1 = const 0_u64; // scope 0 at $DIR/lower_intrinsics_e2e.rs:+1:5: +1:21
|
||||||
StorageLive(_2); // scope 1 at $DIR/lower_intrinsics.rs:48:9: 48:21
|
StorageLive(_2); // scope 1 at $DIR/lower_intrinsics_e2e.rs:23:9: 23:21
|
||||||
StorageLive(_3); // scope 1 at $DIR/lower_intrinsics.rs:48:19: 48:20
|
StorageLive(_3); // scope 1 at $DIR/lower_intrinsics_e2e.rs:23:19: 23:20
|
||||||
_3 = move _1; // scope 1 at $DIR/lower_intrinsics.rs:48:19: 48:20
|
_3 = move _1; // scope 1 at $DIR/lower_intrinsics_e2e.rs:23:19: 23:20
|
||||||
_2 = f_non_zst::<u64>(move _3) -> bb1; // scope 1 at $DIR/lower_intrinsics.rs:48:9: 48:21
|
_2 = f_non_zst::<u64>(move _3) -> bb1; // scope 1 at $DIR/lower_intrinsics_e2e.rs:23:9: 23:21
|
||||||
// mir::Constant
|
// mir::Constant
|
||||||
// + span: $DIR/lower_intrinsics.rs:48:9: 48:18
|
// + span: $DIR/lower_intrinsics_e2e.rs:23:9: 23:18
|
||||||
// + literal: Const { ty: fn(u64) {f_non_zst::<u64>}, val: Value(<ZST>) }
|
// + literal: Const { ty: fn(u64) {f_non_zst::<u64>}, val: Value(<ZST>) }
|
||||||
}
|
}
|
||||||
|
|
||||||
bb1: {
|
bb1: {
|
||||||
StorageDead(_3); // scope 1 at $DIR/lower_intrinsics.rs:48:20: 48:21
|
StorageDead(_3); // scope 1 at $DIR/lower_intrinsics_e2e.rs:23:20: 23:21
|
||||||
StorageDead(_2); // scope 1 at $DIR/lower_intrinsics.rs:48:21: 48:22
|
StorageDead(_2); // scope 1 at $DIR/lower_intrinsics_e2e.rs:23:21: 23:22
|
||||||
StorageDead(_1); // scope 0 at $DIR/lower_intrinsics.rs:+1:5: +1:21
|
StorageDead(_1); // scope 0 at $DIR/lower_intrinsics_e2e.rs:+1:5: +1:21
|
||||||
return; // scope 0 at $DIR/lower_intrinsics.rs:+2:2: +2:2
|
return; // scope 0 at $DIR/lower_intrinsics_e2e.rs:+2:2: +2:2
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,30 +1,30 @@
|
||||||
// MIR for `f_unit` before PreCodegen
|
// MIR for `f_unit` after PreCodegen
|
||||||
|
|
||||||
fn f_unit() -> () {
|
fn f_unit() -> () {
|
||||||
let mut _0: (); // return place in scope 0 at $DIR/lower_intrinsics.rs:+0:17: +0:17
|
let mut _0: (); // return place in scope 0 at $DIR/lower_intrinsics_e2e.rs:+0:17: +0:17
|
||||||
let mut _1: (); // in scope 0 at $DIR/lower_intrinsics.rs:+1:16: +1:18
|
let mut _1: (); // in scope 0 at $DIR/lower_intrinsics_e2e.rs:+1:16: +1:18
|
||||||
scope 1 (inlined f_dispatch::<()>) { // at $DIR/lower_intrinsics.rs:34:5: 34:19
|
scope 1 (inlined f_dispatch::<()>) { // at $DIR/lower_intrinsics_e2e.rs:9:5: 9:19
|
||||||
debug t => _1; // in scope 1 at $DIR/lower_intrinsics.rs:44:22: 44:23
|
debug t => _1; // in scope 1 at $DIR/lower_intrinsics_e2e.rs:19:22: 19:23
|
||||||
let _2: (); // in scope 1 at $DIR/lower_intrinsics.rs:46:9: 46:17
|
let _2: (); // in scope 1 at $DIR/lower_intrinsics_e2e.rs:21:9: 21:17
|
||||||
let mut _3: (); // in scope 1 at $DIR/lower_intrinsics.rs:46:15: 46:16
|
let mut _3: (); // in scope 1 at $DIR/lower_intrinsics_e2e.rs:21:15: 21:16
|
||||||
scope 2 (inlined std::mem::size_of::<()>) { // at $DIR/lower_intrinsics.rs:45:8: 45:32
|
scope 2 (inlined std::mem::size_of::<()>) { // at $DIR/lower_intrinsics_e2e.rs:20:8: 20:32
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bb0: {
|
bb0: {
|
||||||
StorageLive(_1); // scope 0 at $DIR/lower_intrinsics.rs:+1:16: +1:18
|
StorageLive(_1); // scope 0 at $DIR/lower_intrinsics_e2e.rs:+1:16: +1:18
|
||||||
StorageLive(_2); // scope 1 at $DIR/lower_intrinsics.rs:46:9: 46:17
|
StorageLive(_2); // scope 1 at $DIR/lower_intrinsics_e2e.rs:21:9: 21:17
|
||||||
StorageLive(_3); // scope 1 at $DIR/lower_intrinsics.rs:46:15: 46:16
|
StorageLive(_3); // scope 1 at $DIR/lower_intrinsics_e2e.rs:21:15: 21:16
|
||||||
_2 = f_zst::<()>(move _3) -> bb1; // scope 1 at $DIR/lower_intrinsics.rs:46:9: 46:17
|
_2 = f_zst::<()>(move _3) -> bb1; // scope 1 at $DIR/lower_intrinsics_e2e.rs:21:9: 21:17
|
||||||
// mir::Constant
|
// mir::Constant
|
||||||
// + span: $DIR/lower_intrinsics.rs:46:9: 46:14
|
// + span: $DIR/lower_intrinsics_e2e.rs:21:9: 21:14
|
||||||
// + literal: Const { ty: fn(()) {f_zst::<()>}, val: Value(<ZST>) }
|
// + literal: Const { ty: fn(()) {f_zst::<()>}, val: Value(<ZST>) }
|
||||||
}
|
}
|
||||||
|
|
||||||
bb1: {
|
bb1: {
|
||||||
StorageDead(_3); // scope 1 at $DIR/lower_intrinsics.rs:46:16: 46:17
|
StorageDead(_3); // scope 1 at $DIR/lower_intrinsics_e2e.rs:21:16: 21:17
|
||||||
StorageDead(_2); // scope 1 at $DIR/lower_intrinsics.rs:46:17: 46:18
|
StorageDead(_2); // scope 1 at $DIR/lower_intrinsics_e2e.rs:21:17: 21:18
|
||||||
StorageDead(_1); // scope 0 at $DIR/lower_intrinsics.rs:+1:18: +1:19
|
StorageDead(_1); // scope 0 at $DIR/lower_intrinsics_e2e.rs:+1:18: +1:19
|
||||||
return; // scope 0 at $DIR/lower_intrinsics.rs:+2:2: +2:2
|
return; // scope 0 at $DIR/lower_intrinsics_e2e.rs:+2:2: +2:2
|
||||||
}
|
}
|
||||||
}
|
}
|
32
src/test/mir-opt/lower_intrinsics_e2e.rs
Normal file
32
src/test/mir-opt/lower_intrinsics_e2e.rs
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
// Checks that we do not have any branches in the MIR for the two tested functions.
|
||||||
|
|
||||||
|
// compile-flags: -Cpanic=abort
|
||||||
|
#![feature(core_intrinsics)]
|
||||||
|
#![crate_type = "lib"]
|
||||||
|
|
||||||
|
// EMIT_MIR lower_intrinsics_e2e.f_unit.PreCodegen.after.mir
|
||||||
|
pub fn f_unit() {
|
||||||
|
f_dispatch(());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// EMIT_MIR lower_intrinsics_e2e.f_u64.PreCodegen.after.mir
|
||||||
|
pub fn f_u64() {
|
||||||
|
f_dispatch(0u64);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[inline(always)]
|
||||||
|
pub fn f_dispatch<T>(t: T) {
|
||||||
|
if std::mem::size_of::<T>() == 0 {
|
||||||
|
f_zst(t);
|
||||||
|
} else {
|
||||||
|
f_non_zst(t);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[inline(never)]
|
||||||
|
pub fn f_zst<T>(_t: T) {
|
||||||
|
}
|
||||||
|
|
||||||
|
#[inline(never)]
|
||||||
|
pub fn f_non_zst<T>(_t: T) {}
|
|
@ -41,7 +41,7 @@
|
||||||
- _3 = const false; // scope 4 at $DIR/matches_reduce_branches.rs:+16:13: +16:22
|
- _3 = const false; // scope 4 at $DIR/matches_reduce_branches.rs:+16:13: +16:22
|
||||||
- _4 = const false; // scope 4 at $DIR/matches_reduce_branches.rs:+17:13: +17:22
|
- _4 = const false; // scope 4 at $DIR/matches_reduce_branches.rs:+17:13: +17:22
|
||||||
- _5 = const true; // scope 4 at $DIR/matches_reduce_branches.rs:+18:13: +18:21
|
- _5 = const true; // scope 4 at $DIR/matches_reduce_branches.rs:+18:13: +18:21
|
||||||
- nop; // scope 4 at $DIR/matches_reduce_branches.rs:+19:13: +19:15
|
- Deinit(_6); // scope 4 at $DIR/matches_reduce_branches.rs:+19:13: +19:15
|
||||||
- goto -> bb3; // scope 4 at $DIR/matches_reduce_branches.rs:+19:13: +19:15
|
- goto -> bb3; // scope 4 at $DIR/matches_reduce_branches.rs:+19:13: +19:15
|
||||||
- }
|
- }
|
||||||
-
|
-
|
||||||
|
@ -54,7 +54,7 @@
|
||||||
+ _3 = Eq(_11, const 7_i32); // scope 4 at $DIR/matches_reduce_branches.rs:+9:13: +9:21
|
+ _3 = Eq(_11, const 7_i32); // scope 4 at $DIR/matches_reduce_branches.rs:+9:13: +9:21
|
||||||
_4 = const false; // scope 4 at $DIR/matches_reduce_branches.rs:+10:13: +10:22
|
_4 = const false; // scope 4 at $DIR/matches_reduce_branches.rs:+10:13: +10:22
|
||||||
_5 = const true; // scope 4 at $DIR/matches_reduce_branches.rs:+11:13: +11:21
|
_5 = const true; // scope 4 at $DIR/matches_reduce_branches.rs:+11:13: +11:21
|
||||||
- nop; // scope 4 at $DIR/matches_reduce_branches.rs:+12:13: +12:15
|
Deinit(_6); // scope 4 at $DIR/matches_reduce_branches.rs:+12:13: +12:15
|
||||||
- goto -> bb3; // scope 4 at $DIR/matches_reduce_branches.rs:+12:13: +12:15
|
- goto -> bb3; // scope 4 at $DIR/matches_reduce_branches.rs:+12:13: +12:15
|
||||||
- }
|
- }
|
||||||
-
|
-
|
||||||
|
|
|
@ -41,7 +41,7 @@
|
||||||
- _3 = const false; // scope 4 at $DIR/matches_reduce_branches.rs:+16:13: +16:22
|
- _3 = const false; // scope 4 at $DIR/matches_reduce_branches.rs:+16:13: +16:22
|
||||||
- _4 = const false; // scope 4 at $DIR/matches_reduce_branches.rs:+17:13: +17:22
|
- _4 = const false; // scope 4 at $DIR/matches_reduce_branches.rs:+17:13: +17:22
|
||||||
- _5 = const true; // scope 4 at $DIR/matches_reduce_branches.rs:+18:13: +18:21
|
- _5 = const true; // scope 4 at $DIR/matches_reduce_branches.rs:+18:13: +18:21
|
||||||
- nop; // scope 4 at $DIR/matches_reduce_branches.rs:+19:13: +19:15
|
- Deinit(_6); // scope 4 at $DIR/matches_reduce_branches.rs:+19:13: +19:15
|
||||||
- goto -> bb3; // scope 4 at $DIR/matches_reduce_branches.rs:+19:13: +19:15
|
- goto -> bb3; // scope 4 at $DIR/matches_reduce_branches.rs:+19:13: +19:15
|
||||||
- }
|
- }
|
||||||
-
|
-
|
||||||
|
@ -54,7 +54,7 @@
|
||||||
+ _3 = Eq(_11, const 7_i32); // scope 4 at $DIR/matches_reduce_branches.rs:+9:13: +9:21
|
+ _3 = Eq(_11, const 7_i32); // scope 4 at $DIR/matches_reduce_branches.rs:+9:13: +9:21
|
||||||
_4 = const false; // scope 4 at $DIR/matches_reduce_branches.rs:+10:13: +10:22
|
_4 = const false; // scope 4 at $DIR/matches_reduce_branches.rs:+10:13: +10:22
|
||||||
_5 = const true; // scope 4 at $DIR/matches_reduce_branches.rs:+11:13: +11:21
|
_5 = const true; // scope 4 at $DIR/matches_reduce_branches.rs:+11:13: +11:21
|
||||||
- nop; // scope 4 at $DIR/matches_reduce_branches.rs:+12:13: +12:15
|
Deinit(_6); // scope 4 at $DIR/matches_reduce_branches.rs:+12:13: +12:15
|
||||||
- goto -> bb3; // scope 4 at $DIR/matches_reduce_branches.rs:+12:13: +12:15
|
- goto -> bb3; // scope 4 at $DIR/matches_reduce_branches.rs:+12:13: +12:15
|
||||||
- }
|
- }
|
||||||
-
|
-
|
||||||
|
|
|
@ -4,26 +4,51 @@
|
||||||
fn foo(_1: Option<()>) -> () {
|
fn foo(_1: Option<()>) -> () {
|
||||||
debug bar => _1; // in scope 0 at $DIR/matches_reduce_branches.rs:+0:8: +0:11
|
debug bar => _1; // in scope 0 at $DIR/matches_reduce_branches.rs:+0:8: +0:11
|
||||||
let mut _0: (); // return place in scope 0 at $DIR/matches_reduce_branches.rs:+0:25: +0:25
|
let mut _0: (); // return place in scope 0 at $DIR/matches_reduce_branches.rs:+0:25: +0:25
|
||||||
let mut _2: isize; // in scope 0 at $DIR/matches_reduce_branches.rs:+1:22: +1:26
|
let mut _2: bool; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||||
+ let mut _3: isize; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
let mut _3: isize; // in scope 0 at $DIR/matches_reduce_branches.rs:+1:22: +1:26
|
||||||
|
+ let mut _4: isize; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||||
|
|
||||||
bb0: {
|
bb0: {
|
||||||
_2 = discriminant(_1); // scope 0 at $DIR/matches_reduce_branches.rs:+1:17: +1:20
|
StorageLive(_2); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||||
- switchInt(move _2) -> [0_isize: bb2, otherwise: bb1]; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
_3 = discriminant(_1); // scope 0 at $DIR/matches_reduce_branches.rs:+1:17: +1:20
|
||||||
- }
|
- switchInt(move _3) -> [0_isize: bb2, otherwise: bb1]; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||||
-
|
+ StorageLive(_4); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||||
- bb1: {
|
+ _4 = move _3; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||||
|
+ _2 = Eq(_4, const 0_isize); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||||
|
+ StorageDead(_4); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||||
|
+ switchInt(move _2) -> [false: bb2, otherwise: bb1]; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||||
|
}
|
||||||
|
|
||||||
|
bb1: {
|
||||||
|
- _2 = const false; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||||
- goto -> bb3; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
- goto -> bb3; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||||
- }
|
- }
|
||||||
-
|
-
|
||||||
- bb2: {
|
- bb2: {
|
||||||
|
- _2 = const true; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||||
- goto -> bb3; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
- goto -> bb3; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||||
- }
|
- }
|
||||||
-
|
-
|
||||||
- bb3: {
|
- bb3: {
|
||||||
+ StorageLive(_3); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
- switchInt(move _2) -> [false: bb5, otherwise: bb4]; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||||
+ _3 = move _2; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
- }
|
||||||
+ StorageDead(_3); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
-
|
||||||
|
- bb4: {
|
||||||
|
Deinit(_0); // scope 0 at $DIR/matches_reduce_branches.rs:+2:9: +2:11
|
||||||
|
- goto -> bb6; // scope 0 at $DIR/matches_reduce_branches.rs:+1:5: +3:6
|
||||||
|
+ goto -> bb3; // scope 0 at $DIR/matches_reduce_branches.rs:+1:5: +3:6
|
||||||
|
}
|
||||||
|
|
||||||
|
- bb5: {
|
||||||
|
+ bb2: {
|
||||||
|
_0 = const (); // scope 0 at $DIR/matches_reduce_branches.rs:+3:6: +3:6
|
||||||
|
- goto -> bb6; // scope 0 at $DIR/matches_reduce_branches.rs:+1:5: +3:6
|
||||||
|
+ goto -> bb3; // scope 0 at $DIR/matches_reduce_branches.rs:+1:5: +3:6
|
||||||
|
}
|
||||||
|
|
||||||
|
- bb6: {
|
||||||
|
+ bb3: {
|
||||||
|
StorageDead(_2); // scope 0 at $DIR/matches_reduce_branches.rs:+3:5: +3:6
|
||||||
return; // scope 0 at $DIR/matches_reduce_branches.rs:+4:2: +4:2
|
return; // scope 0 at $DIR/matches_reduce_branches.rs:+4:2: +4:2
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,26 +4,51 @@
|
||||||
fn foo(_1: Option<()>) -> () {
|
fn foo(_1: Option<()>) -> () {
|
||||||
debug bar => _1; // in scope 0 at $DIR/matches_reduce_branches.rs:+0:8: +0:11
|
debug bar => _1; // in scope 0 at $DIR/matches_reduce_branches.rs:+0:8: +0:11
|
||||||
let mut _0: (); // return place in scope 0 at $DIR/matches_reduce_branches.rs:+0:25: +0:25
|
let mut _0: (); // return place in scope 0 at $DIR/matches_reduce_branches.rs:+0:25: +0:25
|
||||||
let mut _2: isize; // in scope 0 at $DIR/matches_reduce_branches.rs:+1:22: +1:26
|
let mut _2: bool; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||||
+ let mut _3: isize; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
let mut _3: isize; // in scope 0 at $DIR/matches_reduce_branches.rs:+1:22: +1:26
|
||||||
|
+ let mut _4: isize; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||||
|
|
||||||
bb0: {
|
bb0: {
|
||||||
_2 = discriminant(_1); // scope 0 at $DIR/matches_reduce_branches.rs:+1:17: +1:20
|
StorageLive(_2); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||||
- switchInt(move _2) -> [0_isize: bb2, otherwise: bb1]; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
_3 = discriminant(_1); // scope 0 at $DIR/matches_reduce_branches.rs:+1:17: +1:20
|
||||||
- }
|
- switchInt(move _3) -> [0_isize: bb2, otherwise: bb1]; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||||
-
|
+ StorageLive(_4); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||||
- bb1: {
|
+ _4 = move _3; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||||
|
+ _2 = Eq(_4, const 0_isize); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||||
|
+ StorageDead(_4); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||||
|
+ switchInt(move _2) -> [false: bb2, otherwise: bb1]; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||||
|
}
|
||||||
|
|
||||||
|
bb1: {
|
||||||
|
- _2 = const false; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||||
- goto -> bb3; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
- goto -> bb3; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||||
- }
|
- }
|
||||||
-
|
-
|
||||||
- bb2: {
|
- bb2: {
|
||||||
|
- _2 = const true; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||||
- goto -> bb3; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
- goto -> bb3; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||||
- }
|
- }
|
||||||
-
|
-
|
||||||
- bb3: {
|
- bb3: {
|
||||||
+ StorageLive(_3); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
- switchInt(move _2) -> [false: bb5, otherwise: bb4]; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||||
+ _3 = move _2; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
- }
|
||||||
+ StorageDead(_3); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
-
|
||||||
|
- bb4: {
|
||||||
|
Deinit(_0); // scope 0 at $DIR/matches_reduce_branches.rs:+2:9: +2:11
|
||||||
|
- goto -> bb6; // scope 0 at $DIR/matches_reduce_branches.rs:+1:5: +3:6
|
||||||
|
+ goto -> bb3; // scope 0 at $DIR/matches_reduce_branches.rs:+1:5: +3:6
|
||||||
|
}
|
||||||
|
|
||||||
|
- bb5: {
|
||||||
|
+ bb2: {
|
||||||
|
_0 = const (); // scope 0 at $DIR/matches_reduce_branches.rs:+3:6: +3:6
|
||||||
|
- goto -> bb6; // scope 0 at $DIR/matches_reduce_branches.rs:+1:5: +3:6
|
||||||
|
+ goto -> bb3; // scope 0 at $DIR/matches_reduce_branches.rs:+1:5: +3:6
|
||||||
|
}
|
||||||
|
|
||||||
|
- bb6: {
|
||||||
|
+ bb3: {
|
||||||
|
StorageDead(_2); // scope 0 at $DIR/matches_reduce_branches.rs:+3:5: +3:6
|
||||||
return; // scope 0 at $DIR/matches_reduce_branches.rs:+4:2: +4:2
|
return; // scope 0 at $DIR/matches_reduce_branches.rs:+4:2: +4:2
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +0,0 @@
|
||||||
// MIR for `foo` before PreCodegen
|
|
||||||
|
|
||||||
fn foo(_1: Option<()>) -> () {
|
|
||||||
debug bar => _1; // in scope 0 at $DIR/matches_reduce_branches.rs:+0:8: +0:11
|
|
||||||
let mut _0: (); // return place in scope 0 at $DIR/matches_reduce_branches.rs:+0:25: +0:25
|
|
||||||
|
|
||||||
bb0: {
|
|
||||||
return; // scope 0 at $DIR/matches_reduce_branches.rs:+4:2: +4:2
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,10 +0,0 @@
|
||||||
// MIR for `foo` before PreCodegen
|
|
||||||
|
|
||||||
fn foo(_1: Option<()>) -> () {
|
|
||||||
debug bar => _1; // in scope 0 at $DIR/matches_reduce_branches.rs:+0:8: +0:11
|
|
||||||
let mut _0: (); // return place in scope 0 at $DIR/matches_reduce_branches.rs:+0:25: +0:25
|
|
||||||
|
|
||||||
bb0: {
|
|
||||||
return; // scope 0 at $DIR/matches_reduce_branches.rs:+4:2: +4:2
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -4,36 +4,107 @@
|
||||||
fn match_nested_if() -> bool {
|
fn match_nested_if() -> bool {
|
||||||
let mut _0: bool; // return place in scope 0 at $DIR/matches_reduce_branches.rs:+0:25: +0:29
|
let mut _0: bool; // return place in scope 0 at $DIR/matches_reduce_branches.rs:+0:25: +0:29
|
||||||
let _1: bool; // in scope 0 at $DIR/matches_reduce_branches.rs:+1:9: +1:12
|
let _1: bool; // in scope 0 at $DIR/matches_reduce_branches.rs:+1:9: +1:12
|
||||||
let mut _2: bool; // in scope 0 at $DIR/matches_reduce_branches.rs:+2:24: +2:28
|
let mut _2: (); // in scope 0 at $DIR/matches_reduce_branches.rs:+1:21: +1:23
|
||||||
+ let mut _3: bool; // in scope 0 at $DIR/matches_reduce_branches.rs:+2:24: +2:28
|
let mut _3: bool; // in scope 0 at $DIR/matches_reduce_branches.rs:+2:15: +6:10
|
||||||
|
let mut _4: bool; // in scope 0 at $DIR/matches_reduce_branches.rs:+2:18: +2:76
|
||||||
|
let mut _5: bool; // in scope 0 at $DIR/matches_reduce_branches.rs:+2:21: +2:52
|
||||||
|
let mut _6: bool; // in scope 0 at $DIR/matches_reduce_branches.rs:+2:24: +2:28
|
||||||
|
+ let mut _7: bool; // in scope 0 at $DIR/matches_reduce_branches.rs:+2:24: +2:28
|
||||||
|
+ let mut _8: bool; // in scope 0 at $DIR/matches_reduce_branches.rs:+2:21: +2:52
|
||||||
|
+ let mut _9: bool; // in scope 0 at $DIR/matches_reduce_branches.rs:+2:18: +2:76
|
||||||
|
+ let mut _10: bool; // in scope 0 at $DIR/matches_reduce_branches.rs:+2:15: +6:10
|
||||||
scope 1 {
|
scope 1 {
|
||||||
debug val => _1; // in scope 1 at $DIR/matches_reduce_branches.rs:+1:9: +1:12
|
debug val => _1; // in scope 1 at $DIR/matches_reduce_branches.rs:+1:9: +1:12
|
||||||
}
|
}
|
||||||
|
|
||||||
bb0: {
|
bb0: {
|
||||||
StorageLive(_1); // scope 0 at $DIR/matches_reduce_branches.rs:+1:9: +1:12
|
StorageLive(_1); // scope 0 at $DIR/matches_reduce_branches.rs:+1:9: +1:12
|
||||||
StorageLive(_2); // scope 0 at $DIR/matches_reduce_branches.rs:+2:24: +2:28
|
StorageLive(_2); // scope 0 at $DIR/matches_reduce_branches.rs:+1:21: +1:23
|
||||||
_2 = const true; // scope 0 at $DIR/matches_reduce_branches.rs:+2:24: +2:28
|
Deinit(_2); // scope 0 at $DIR/matches_reduce_branches.rs:+1:21: +1:23
|
||||||
- switchInt(move _2) -> [false: bb2, otherwise: bb1]; // scope 0 at $DIR/matches_reduce_branches.rs:+2:24: +2:28
|
StorageLive(_3); // scope 0 at $DIR/matches_reduce_branches.rs:+2:15: +6:10
|
||||||
|
StorageLive(_4); // scope 0 at $DIR/matches_reduce_branches.rs:+2:18: +2:76
|
||||||
|
StorageLive(_5); // scope 0 at $DIR/matches_reduce_branches.rs:+2:21: +2:52
|
||||||
|
StorageLive(_6); // scope 0 at $DIR/matches_reduce_branches.rs:+2:24: +2:28
|
||||||
|
_6 = const true; // scope 0 at $DIR/matches_reduce_branches.rs:+2:24: +2:28
|
||||||
|
- switchInt(move _6) -> [false: bb2, otherwise: bb1]; // scope 0 at $DIR/matches_reduce_branches.rs:+2:24: +2:28
|
||||||
- }
|
- }
|
||||||
-
|
-
|
||||||
- bb1: {
|
- bb1: {
|
||||||
+ StorageLive(_3); // scope 0 at $DIR/matches_reduce_branches.rs:+2:24: +2:28
|
- _5 = const true; // scope 0 at $DIR/matches_reduce_branches.rs:+2:31: +2:35
|
||||||
+ _3 = move _2; // scope 0 at $DIR/matches_reduce_branches.rs:+2:24: +2:28
|
- goto -> bb3; // scope 0 at $DIR/matches_reduce_branches.rs:+2:21: +2:52
|
||||||
StorageDead(_2); // scope 0 at $DIR/matches_reduce_branches.rs:+2:51: +2:52
|
|
||||||
- _1 = const true; // scope 0 at $DIR/matches_reduce_branches.rs:+8:13: +8:17
|
|
||||||
- goto -> bb3; // scope 0 at $DIR/matches_reduce_branches.rs:+8:13: +8:17
|
|
||||||
- }
|
- }
|
||||||
-
|
-
|
||||||
- bb2: {
|
- bb2: {
|
||||||
- StorageDead(_2); // scope 0 at $DIR/matches_reduce_branches.rs:+2:51: +2:52
|
- _5 = const false; // scope 0 at $DIR/matches_reduce_branches.rs:+2:45: +2:50
|
||||||
- _1 = const false; // scope 0 at $DIR/matches_reduce_branches.rs:+10:14: +10:19
|
- goto -> bb3; // scope 0 at $DIR/matches_reduce_branches.rs:+2:21: +2:52
|
||||||
- goto -> bb3; // scope 0 at $DIR/matches_reduce_branches.rs:+10:14: +10:19
|
|
||||||
- }
|
- }
|
||||||
-
|
-
|
||||||
- bb3: {
|
- bb3: {
|
||||||
+ _1 = Ne(_3, const false); // scope 0 at $DIR/matches_reduce_branches.rs:+10:14: +10:19
|
+ StorageLive(_7); // scope 0 at $DIR/matches_reduce_branches.rs:+2:24: +2:28
|
||||||
+ StorageDead(_3); // scope 0 at $DIR/matches_reduce_branches.rs:+2:24: +2:28
|
+ _7 = move _6; // scope 0 at $DIR/matches_reduce_branches.rs:+2:24: +2:28
|
||||||
|
+ _5 = Ne(_7, const false); // scope 0 at $DIR/matches_reduce_branches.rs:+2:45: +2:50
|
||||||
|
+ StorageDead(_7); // scope 0 at $DIR/matches_reduce_branches.rs:+2:24: +2:28
|
||||||
|
StorageDead(_6); // scope 0 at $DIR/matches_reduce_branches.rs:+2:51: +2:52
|
||||||
|
- switchInt(move _5) -> [false: bb5, otherwise: bb4]; // scope 0 at $DIR/matches_reduce_branches.rs:+2:21: +2:52
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- bb4: {
|
||||||
|
- _4 = const true; // scope 0 at $DIR/matches_reduce_branches.rs:+2:55: +2:59
|
||||||
|
- goto -> bb6; // scope 0 at $DIR/matches_reduce_branches.rs:+2:18: +2:76
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- bb5: {
|
||||||
|
- _4 = const false; // scope 0 at $DIR/matches_reduce_branches.rs:+2:69: +2:74
|
||||||
|
- goto -> bb6; // scope 0 at $DIR/matches_reduce_branches.rs:+2:18: +2:76
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- bb6: {
|
||||||
|
+ StorageLive(_8); // scope 0 at $DIR/matches_reduce_branches.rs:+2:21: +2:52
|
||||||
|
+ _8 = move _5; // scope 0 at $DIR/matches_reduce_branches.rs:+2:21: +2:52
|
||||||
|
+ _4 = Ne(_8, const false); // scope 0 at $DIR/matches_reduce_branches.rs:+2:69: +2:74
|
||||||
|
+ StorageDead(_8); // scope 0 at $DIR/matches_reduce_branches.rs:+2:21: +2:52
|
||||||
|
StorageDead(_5); // scope 0 at $DIR/matches_reduce_branches.rs:+2:75: +2:76
|
||||||
|
- switchInt(move _4) -> [false: bb8, otherwise: bb7]; // scope 0 at $DIR/matches_reduce_branches.rs:+2:18: +2:76
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- bb7: {
|
||||||
|
- _3 = const true; // scope 0 at $DIR/matches_reduce_branches.rs:+3:13: +3:17
|
||||||
|
- goto -> bb9; // scope 0 at $DIR/matches_reduce_branches.rs:+2:15: +6:10
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- bb8: {
|
||||||
|
- _3 = const false; // scope 0 at $DIR/matches_reduce_branches.rs:+5:13: +5:18
|
||||||
|
- goto -> bb9; // scope 0 at $DIR/matches_reduce_branches.rs:+2:15: +6:10
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- bb9: {
|
||||||
|
- switchInt(move _3) -> [false: bb11, otherwise: bb10]; // scope 0 at $DIR/matches_reduce_branches.rs:+2:15: +6:10
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- bb10: {
|
||||||
|
+ StorageLive(_9); // scope 0 at $DIR/matches_reduce_branches.rs:+2:18: +2:76
|
||||||
|
+ _9 = move _4; // scope 0 at $DIR/matches_reduce_branches.rs:+2:18: +2:76
|
||||||
|
+ _3 = Ne(_9, const false); // scope 0 at $DIR/matches_reduce_branches.rs:+5:13: +5:18
|
||||||
|
+ StorageDead(_9); // scope 0 at $DIR/matches_reduce_branches.rs:+2:18: +2:76
|
||||||
|
+ StorageLive(_10); // scope 0 at $DIR/matches_reduce_branches.rs:+2:15: +6:10
|
||||||
|
+ _10 = move _3; // scope 0 at $DIR/matches_reduce_branches.rs:+2:15: +6:10
|
||||||
|
StorageDead(_4); // scope 0 at $DIR/matches_reduce_branches.rs:+6:9: +6:10
|
||||||
|
StorageDead(_3); // scope 0 at $DIR/matches_reduce_branches.rs:+6:9: +6:10
|
||||||
|
- _1 = const true; // scope 0 at $DIR/matches_reduce_branches.rs:+8:13: +8:17
|
||||||
|
- goto -> bb12; // scope 0 at $DIR/matches_reduce_branches.rs:+8:13: +8:17
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- bb11: {
|
||||||
|
- StorageDead(_4); // scope 0 at $DIR/matches_reduce_branches.rs:+6:9: +6:10
|
||||||
|
- StorageDead(_3); // scope 0 at $DIR/matches_reduce_branches.rs:+6:9: +6:10
|
||||||
|
- _1 = const false; // scope 0 at $DIR/matches_reduce_branches.rs:+10:14: +10:19
|
||||||
|
- goto -> bb12; // scope 0 at $DIR/matches_reduce_branches.rs:+10:14: +10:19
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- bb12: {
|
||||||
|
+ _1 = Ne(_10, const false); // scope 0 at $DIR/matches_reduce_branches.rs:+10:14: +10:19
|
||||||
|
+ StorageDead(_10); // scope 0 at $DIR/matches_reduce_branches.rs:+2:15: +6:10
|
||||||
|
StorageDead(_2); // scope 0 at $DIR/matches_reduce_branches.rs:+11:6: +11:7
|
||||||
_0 = _1; // scope 1 at $DIR/matches_reduce_branches.rs:+12:5: +12:8
|
_0 = _1; // scope 1 at $DIR/matches_reduce_branches.rs:+12:5: +12:8
|
||||||
StorageDead(_1); // scope 0 at $DIR/matches_reduce_branches.rs:+13:1: +13:2
|
StorageDead(_1); // scope 0 at $DIR/matches_reduce_branches.rs:+13:1: +13:2
|
||||||
return; // scope 0 at $DIR/matches_reduce_branches.rs:+13:2: +13:2
|
return; // scope 0 at $DIR/matches_reduce_branches.rs:+13:2: +13:2
|
||||||
|
|
|
@ -4,36 +4,107 @@
|
||||||
fn match_nested_if() -> bool {
|
fn match_nested_if() -> bool {
|
||||||
let mut _0: bool; // return place in scope 0 at $DIR/matches_reduce_branches.rs:+0:25: +0:29
|
let mut _0: bool; // return place in scope 0 at $DIR/matches_reduce_branches.rs:+0:25: +0:29
|
||||||
let _1: bool; // in scope 0 at $DIR/matches_reduce_branches.rs:+1:9: +1:12
|
let _1: bool; // in scope 0 at $DIR/matches_reduce_branches.rs:+1:9: +1:12
|
||||||
let mut _2: bool; // in scope 0 at $DIR/matches_reduce_branches.rs:+2:24: +2:28
|
let mut _2: (); // in scope 0 at $DIR/matches_reduce_branches.rs:+1:21: +1:23
|
||||||
+ let mut _3: bool; // in scope 0 at $DIR/matches_reduce_branches.rs:+2:24: +2:28
|
let mut _3: bool; // in scope 0 at $DIR/matches_reduce_branches.rs:+2:15: +6:10
|
||||||
|
let mut _4: bool; // in scope 0 at $DIR/matches_reduce_branches.rs:+2:18: +2:76
|
||||||
|
let mut _5: bool; // in scope 0 at $DIR/matches_reduce_branches.rs:+2:21: +2:52
|
||||||
|
let mut _6: bool; // in scope 0 at $DIR/matches_reduce_branches.rs:+2:24: +2:28
|
||||||
|
+ let mut _7: bool; // in scope 0 at $DIR/matches_reduce_branches.rs:+2:24: +2:28
|
||||||
|
+ let mut _8: bool; // in scope 0 at $DIR/matches_reduce_branches.rs:+2:21: +2:52
|
||||||
|
+ let mut _9: bool; // in scope 0 at $DIR/matches_reduce_branches.rs:+2:18: +2:76
|
||||||
|
+ let mut _10: bool; // in scope 0 at $DIR/matches_reduce_branches.rs:+2:15: +6:10
|
||||||
scope 1 {
|
scope 1 {
|
||||||
debug val => _1; // in scope 1 at $DIR/matches_reduce_branches.rs:+1:9: +1:12
|
debug val => _1; // in scope 1 at $DIR/matches_reduce_branches.rs:+1:9: +1:12
|
||||||
}
|
}
|
||||||
|
|
||||||
bb0: {
|
bb0: {
|
||||||
StorageLive(_1); // scope 0 at $DIR/matches_reduce_branches.rs:+1:9: +1:12
|
StorageLive(_1); // scope 0 at $DIR/matches_reduce_branches.rs:+1:9: +1:12
|
||||||
StorageLive(_2); // scope 0 at $DIR/matches_reduce_branches.rs:+2:24: +2:28
|
StorageLive(_2); // scope 0 at $DIR/matches_reduce_branches.rs:+1:21: +1:23
|
||||||
_2 = const true; // scope 0 at $DIR/matches_reduce_branches.rs:+2:24: +2:28
|
Deinit(_2); // scope 0 at $DIR/matches_reduce_branches.rs:+1:21: +1:23
|
||||||
- switchInt(move _2) -> [false: bb2, otherwise: bb1]; // scope 0 at $DIR/matches_reduce_branches.rs:+2:24: +2:28
|
StorageLive(_3); // scope 0 at $DIR/matches_reduce_branches.rs:+2:15: +6:10
|
||||||
|
StorageLive(_4); // scope 0 at $DIR/matches_reduce_branches.rs:+2:18: +2:76
|
||||||
|
StorageLive(_5); // scope 0 at $DIR/matches_reduce_branches.rs:+2:21: +2:52
|
||||||
|
StorageLive(_6); // scope 0 at $DIR/matches_reduce_branches.rs:+2:24: +2:28
|
||||||
|
_6 = const true; // scope 0 at $DIR/matches_reduce_branches.rs:+2:24: +2:28
|
||||||
|
- switchInt(move _6) -> [false: bb2, otherwise: bb1]; // scope 0 at $DIR/matches_reduce_branches.rs:+2:24: +2:28
|
||||||
- }
|
- }
|
||||||
-
|
-
|
||||||
- bb1: {
|
- bb1: {
|
||||||
+ StorageLive(_3); // scope 0 at $DIR/matches_reduce_branches.rs:+2:24: +2:28
|
- _5 = const true; // scope 0 at $DIR/matches_reduce_branches.rs:+2:31: +2:35
|
||||||
+ _3 = move _2; // scope 0 at $DIR/matches_reduce_branches.rs:+2:24: +2:28
|
- goto -> bb3; // scope 0 at $DIR/matches_reduce_branches.rs:+2:21: +2:52
|
||||||
StorageDead(_2); // scope 0 at $DIR/matches_reduce_branches.rs:+2:51: +2:52
|
|
||||||
- _1 = const true; // scope 0 at $DIR/matches_reduce_branches.rs:+8:13: +8:17
|
|
||||||
- goto -> bb3; // scope 0 at $DIR/matches_reduce_branches.rs:+8:13: +8:17
|
|
||||||
- }
|
- }
|
||||||
-
|
-
|
||||||
- bb2: {
|
- bb2: {
|
||||||
- StorageDead(_2); // scope 0 at $DIR/matches_reduce_branches.rs:+2:51: +2:52
|
- _5 = const false; // scope 0 at $DIR/matches_reduce_branches.rs:+2:45: +2:50
|
||||||
- _1 = const false; // scope 0 at $DIR/matches_reduce_branches.rs:+10:14: +10:19
|
- goto -> bb3; // scope 0 at $DIR/matches_reduce_branches.rs:+2:21: +2:52
|
||||||
- goto -> bb3; // scope 0 at $DIR/matches_reduce_branches.rs:+10:14: +10:19
|
|
||||||
- }
|
- }
|
||||||
-
|
-
|
||||||
- bb3: {
|
- bb3: {
|
||||||
+ _1 = Ne(_3, const false); // scope 0 at $DIR/matches_reduce_branches.rs:+10:14: +10:19
|
+ StorageLive(_7); // scope 0 at $DIR/matches_reduce_branches.rs:+2:24: +2:28
|
||||||
+ StorageDead(_3); // scope 0 at $DIR/matches_reduce_branches.rs:+2:24: +2:28
|
+ _7 = move _6; // scope 0 at $DIR/matches_reduce_branches.rs:+2:24: +2:28
|
||||||
|
+ _5 = Ne(_7, const false); // scope 0 at $DIR/matches_reduce_branches.rs:+2:45: +2:50
|
||||||
|
+ StorageDead(_7); // scope 0 at $DIR/matches_reduce_branches.rs:+2:24: +2:28
|
||||||
|
StorageDead(_6); // scope 0 at $DIR/matches_reduce_branches.rs:+2:51: +2:52
|
||||||
|
- switchInt(move _5) -> [false: bb5, otherwise: bb4]; // scope 0 at $DIR/matches_reduce_branches.rs:+2:21: +2:52
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- bb4: {
|
||||||
|
- _4 = const true; // scope 0 at $DIR/matches_reduce_branches.rs:+2:55: +2:59
|
||||||
|
- goto -> bb6; // scope 0 at $DIR/matches_reduce_branches.rs:+2:18: +2:76
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- bb5: {
|
||||||
|
- _4 = const false; // scope 0 at $DIR/matches_reduce_branches.rs:+2:69: +2:74
|
||||||
|
- goto -> bb6; // scope 0 at $DIR/matches_reduce_branches.rs:+2:18: +2:76
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- bb6: {
|
||||||
|
+ StorageLive(_8); // scope 0 at $DIR/matches_reduce_branches.rs:+2:21: +2:52
|
||||||
|
+ _8 = move _5; // scope 0 at $DIR/matches_reduce_branches.rs:+2:21: +2:52
|
||||||
|
+ _4 = Ne(_8, const false); // scope 0 at $DIR/matches_reduce_branches.rs:+2:69: +2:74
|
||||||
|
+ StorageDead(_8); // scope 0 at $DIR/matches_reduce_branches.rs:+2:21: +2:52
|
||||||
|
StorageDead(_5); // scope 0 at $DIR/matches_reduce_branches.rs:+2:75: +2:76
|
||||||
|
- switchInt(move _4) -> [false: bb8, otherwise: bb7]; // scope 0 at $DIR/matches_reduce_branches.rs:+2:18: +2:76
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- bb7: {
|
||||||
|
- _3 = const true; // scope 0 at $DIR/matches_reduce_branches.rs:+3:13: +3:17
|
||||||
|
- goto -> bb9; // scope 0 at $DIR/matches_reduce_branches.rs:+2:15: +6:10
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- bb8: {
|
||||||
|
- _3 = const false; // scope 0 at $DIR/matches_reduce_branches.rs:+5:13: +5:18
|
||||||
|
- goto -> bb9; // scope 0 at $DIR/matches_reduce_branches.rs:+2:15: +6:10
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- bb9: {
|
||||||
|
- switchInt(move _3) -> [false: bb11, otherwise: bb10]; // scope 0 at $DIR/matches_reduce_branches.rs:+2:15: +6:10
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- bb10: {
|
||||||
|
+ StorageLive(_9); // scope 0 at $DIR/matches_reduce_branches.rs:+2:18: +2:76
|
||||||
|
+ _9 = move _4; // scope 0 at $DIR/matches_reduce_branches.rs:+2:18: +2:76
|
||||||
|
+ _3 = Ne(_9, const false); // scope 0 at $DIR/matches_reduce_branches.rs:+5:13: +5:18
|
||||||
|
+ StorageDead(_9); // scope 0 at $DIR/matches_reduce_branches.rs:+2:18: +2:76
|
||||||
|
+ StorageLive(_10); // scope 0 at $DIR/matches_reduce_branches.rs:+2:15: +6:10
|
||||||
|
+ _10 = move _3; // scope 0 at $DIR/matches_reduce_branches.rs:+2:15: +6:10
|
||||||
|
StorageDead(_4); // scope 0 at $DIR/matches_reduce_branches.rs:+6:9: +6:10
|
||||||
|
StorageDead(_3); // scope 0 at $DIR/matches_reduce_branches.rs:+6:9: +6:10
|
||||||
|
- _1 = const true; // scope 0 at $DIR/matches_reduce_branches.rs:+8:13: +8:17
|
||||||
|
- goto -> bb12; // scope 0 at $DIR/matches_reduce_branches.rs:+8:13: +8:17
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- bb11: {
|
||||||
|
- StorageDead(_4); // scope 0 at $DIR/matches_reduce_branches.rs:+6:9: +6:10
|
||||||
|
- StorageDead(_3); // scope 0 at $DIR/matches_reduce_branches.rs:+6:9: +6:10
|
||||||
|
- _1 = const false; // scope 0 at $DIR/matches_reduce_branches.rs:+10:14: +10:19
|
||||||
|
- goto -> bb12; // scope 0 at $DIR/matches_reduce_branches.rs:+10:14: +10:19
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- bb12: {
|
||||||
|
+ _1 = Ne(_10, const false); // scope 0 at $DIR/matches_reduce_branches.rs:+10:14: +10:19
|
||||||
|
+ StorageDead(_10); // scope 0 at $DIR/matches_reduce_branches.rs:+2:15: +6:10
|
||||||
|
StorageDead(_2); // scope 0 at $DIR/matches_reduce_branches.rs:+11:6: +11:7
|
||||||
_0 = _1; // scope 1 at $DIR/matches_reduce_branches.rs:+12:5: +12:8
|
_0 = _1; // scope 1 at $DIR/matches_reduce_branches.rs:+12:5: +12:8
|
||||||
StorageDead(_1); // scope 0 at $DIR/matches_reduce_branches.rs:+13:1: +13:2
|
StorageDead(_1); // scope 0 at $DIR/matches_reduce_branches.rs:+13:1: +13:2
|
||||||
return; // scope 0 at $DIR/matches_reduce_branches.rs:+13:2: +13:2
|
return; // scope 0 at $DIR/matches_reduce_branches.rs:+13:2: +13:2
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
|
// unit-test: MatchBranchSimplification
|
||||||
|
|
||||||
// EMIT_MIR_FOR_EACH_BIT_WIDTH
|
// EMIT_MIR_FOR_EACH_BIT_WIDTH
|
||||||
// EMIT_MIR matches_reduce_branches.foo.MatchBranchSimplification.diff
|
// EMIT_MIR matches_reduce_branches.foo.MatchBranchSimplification.diff
|
||||||
// EMIT_MIR matches_reduce_branches.foo.PreCodegen.before.mir
|
|
||||||
// EMIT_MIR matches_reduce_branches.bar.MatchBranchSimplification.diff
|
// EMIT_MIR matches_reduce_branches.bar.MatchBranchSimplification.diff
|
||||||
// EMIT_MIR matches_reduce_branches.match_nested_if.MatchBranchSimplification.diff
|
// EMIT_MIR matches_reduce_branches.match_nested_if.MatchBranchSimplification.diff
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
// unit-test: MatchBranchSimplification
|
||||||
|
|
||||||
// EMIT_MIR_FOR_EACH_BIT_WIDTH
|
// EMIT_MIR_FOR_EACH_BIT_WIDTH
|
||||||
// EMIT_MIR matches_u8.exhaustive_match.MatchBranchSimplification.diff
|
// EMIT_MIR matches_u8.exhaustive_match.MatchBranchSimplification.diff
|
||||||
// EMIT_MIR matches_u8.exhaustive_match_i8.MatchBranchSimplification.diff
|
// EMIT_MIR matches_u8.exhaustive_match_i8.MatchBranchSimplification.diff
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
scope 1 {
|
scope 1 {
|
||||||
debug residual => _6; // in scope 1 at $DIR/separate_const_switch.rs:+1:9: +1:10
|
debug residual => _6; // in scope 1 at $DIR/separate_const_switch.rs:+1:9: +1:10
|
||||||
scope 2 {
|
scope 2 {
|
||||||
scope 8 (inlined #[track_caller] <Result<i32, i32> as FromResidual<Result<Infallible, i32>>>::from_residual) { // at $DIR/separate_const_switch.rs:29:8: 29:10
|
scope 8 (inlined #[track_caller] <Result<i32, i32> as FromResidual<Result<Infallible, i32>>>::from_residual) { // at $DIR/separate_const_switch.rs:25:8: 25:10
|
||||||
debug residual => _8; // in scope 8 at $SRC_DIR/core/src/result.rs:LL:COL
|
debug residual => _8; // in scope 8 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||||
let _16: i32; // in scope 8 at $SRC_DIR/core/src/result.rs:LL:COL
|
let _16: i32; // in scope 8 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||||
let mut _17: i32; // in scope 8 at $SRC_DIR/core/src/result.rs:LL:COL
|
let mut _17: i32; // in scope 8 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||||
|
@ -34,7 +34,7 @@
|
||||||
scope 4 {
|
scope 4 {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
scope 5 (inlined <Result<i32, i32> as Try>::branch) { // at $DIR/separate_const_switch.rs:29:8: 29:10
|
scope 5 (inlined <Result<i32, i32> as Try>::branch) { // at $DIR/separate_const_switch.rs:25:8: 25:10
|
||||||
debug self => _4; // in scope 5 at $SRC_DIR/core/src/result.rs:LL:COL
|
debug self => _4; // in scope 5 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||||
let mut _10: isize; // in scope 5 at $SRC_DIR/core/src/result.rs:LL:COL
|
let mut _10: isize; // in scope 5 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||||
let _11: i32; // in scope 5 at $SRC_DIR/core/src/result.rs:LL:COL
|
let _11: i32; // in scope 5 at $SRC_DIR/core/src/result.rs:LL:COL
|
||||||
|
|
|
@ -4,8 +4,6 @@
|
||||||
use std::ops::ControlFlow;
|
use std::ops::ControlFlow;
|
||||||
|
|
||||||
// EMIT_MIR separate_const_switch.too_complex.SeparateConstSwitch.diff
|
// EMIT_MIR separate_const_switch.too_complex.SeparateConstSwitch.diff
|
||||||
// EMIT_MIR separate_const_switch.too_complex.ConstProp.diff
|
|
||||||
// EMIT_MIR separate_const_switch.too_complex.PreCodegen.after.mir
|
|
||||||
fn too_complex(x: Result<i32, usize>) -> Option<i32> {
|
fn too_complex(x: Result<i32, usize>) -> Option<i32> {
|
||||||
// The pass should break the outer match into
|
// The pass should break the outer match into
|
||||||
// two blocks that only have one parent each.
|
// two blocks that only have one parent each.
|
||||||
|
@ -23,8 +21,6 @@ fn too_complex(x: Result<i32, usize>) -> Option<i32> {
|
||||||
}
|
}
|
||||||
|
|
||||||
// EMIT_MIR separate_const_switch.identity.SeparateConstSwitch.diff
|
// EMIT_MIR separate_const_switch.identity.SeparateConstSwitch.diff
|
||||||
// EMIT_MIR separate_const_switch.identity.ConstProp.diff
|
|
||||||
// EMIT_MIR separate_const_switch.identity.PreCodegen.after.mir
|
|
||||||
fn identity(x: Result<i32, i32>) -> Result<i32, i32> {
|
fn identity(x: Result<i32, i32>) -> Result<i32, i32> {
|
||||||
Ok(x?)
|
Ok(x?)
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,9 @@
|
||||||
// compile-flags: -Zmir-opt-level=3
|
// compile-flags: -Zmir-opt-level=3
|
||||||
// EMIT_MIR_FOR_EACH_BIT_WIDTH
|
// EMIT_MIR_FOR_EACH_BIT_WIDTH
|
||||||
|
|
||||||
|
// This pass is broken since deaggregation changed
|
||||||
|
// ignore-test
|
||||||
|
|
||||||
enum Src {
|
enum Src {
|
||||||
Foo(u8),
|
Foo(u8),
|
||||||
Bar,
|
Bar,
|
||||||
|
|
|
@ -6,6 +6,9 @@
|
||||||
// EMIT_MIR simplify_arm.id_try.SimplifyArmIdentity.diff
|
// EMIT_MIR simplify_arm.id_try.SimplifyArmIdentity.diff
|
||||||
// EMIT_MIR simplify_arm.id_try.SimplifyBranchSame.diff
|
// EMIT_MIR simplify_arm.id_try.SimplifyBranchSame.diff
|
||||||
|
|
||||||
|
// This pass is broken since deaggregation changed
|
||||||
|
// ignore-test
|
||||||
|
|
||||||
fn id(o: Option<u8>) -> Option<u8> {
|
fn id(o: Option<u8>) -> Option<u8> {
|
||||||
match o {
|
match o {
|
||||||
Some(v) => Some(v),
|
Some(v) => Some(v),
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// compile-flags: -Zunsound-mir-opts
|
// unit-test: SimplifyLocals
|
||||||
|
|
||||||
fn map(x: Option<Box<()>>) -> Option<Box<()>> {
|
fn map(x: Option<Box<()>>) -> Option<Box<()>> {
|
||||||
match x {
|
match x {
|
||||||
|
|
|
@ -1,46 +0,0 @@
|
||||||
- // MIR for `id` before SimplifyArmIdentity
|
|
||||||
+ // MIR for `id` after SimplifyArmIdentity
|
|
||||||
|
|
||||||
fn id(_1: Option<u8>) -> Option<u8> {
|
|
||||||
debug o => _1; // in scope 0 at $DIR/simplify-arm.rs:+0:7: +0:8
|
|
||||||
let mut _0: std::option::Option<u8>; // return place in scope 0 at $DIR/simplify-arm.rs:+0:25: +0:35
|
|
||||||
let mut _2: isize; // in scope 0 at $DIR/simplify-arm.rs:+2:9: +2:16
|
|
||||||
let _3: u8; // in scope 0 at $DIR/simplify-arm.rs:+2:14: +2:15
|
|
||||||
let mut _4: u8; // in scope 0 at $DIR/simplify-arm.rs:+2:25: +2:26
|
|
||||||
scope 1 {
|
|
||||||
debug v => _3; // in scope 1 at $DIR/simplify-arm.rs:+2:14: +2:15
|
|
||||||
}
|
|
||||||
|
|
||||||
bb0: {
|
|
||||||
_2 = discriminant(_1); // scope 0 at $DIR/simplify-arm.rs:+1:11: +1:12
|
|
||||||
switchInt(move _2) -> [0_isize: bb1, 1_isize: bb3, otherwise: bb2]; // scope 0 at $DIR/simplify-arm.rs:+1:5: +1:12
|
|
||||||
}
|
|
||||||
|
|
||||||
bb1: {
|
|
||||||
Deinit(_0); // scope 0 at $DIR/simplify-arm.rs:+3:17: +3:21
|
|
||||||
discriminant(_0) = 0; // scope 0 at $DIR/simplify-arm.rs:+3:17: +3:21
|
|
||||||
goto -> bb4; // scope 0 at $DIR/simplify-arm.rs:+3:17: +3:21
|
|
||||||
}
|
|
||||||
|
|
||||||
bb2: {
|
|
||||||
unreachable; // scope 0 at $DIR/simplify-arm.rs:+1:11: +1:12
|
|
||||||
}
|
|
||||||
|
|
||||||
bb3: {
|
|
||||||
StorageLive(_3); // scope 0 at $DIR/simplify-arm.rs:+2:14: +2:15
|
|
||||||
_3 = ((_1 as Some).0: u8); // scope 0 at $DIR/simplify-arm.rs:+2:14: +2:15
|
|
||||||
StorageLive(_4); // scope 1 at $DIR/simplify-arm.rs:+2:25: +2:26
|
|
||||||
_4 = _3; // scope 1 at $DIR/simplify-arm.rs:+2:25: +2:26
|
|
||||||
Deinit(_0); // scope 1 at $DIR/simplify-arm.rs:+2:20: +2:27
|
|
||||||
((_0 as Some).0: u8) = move _4; // scope 1 at $DIR/simplify-arm.rs:+2:20: +2:27
|
|
||||||
discriminant(_0) = 1; // scope 1 at $DIR/simplify-arm.rs:+2:20: +2:27
|
|
||||||
StorageDead(_4); // scope 1 at $DIR/simplify-arm.rs:+2:26: +2:27
|
|
||||||
StorageDead(_3); // scope 0 at $DIR/simplify-arm.rs:+2:26: +2:27
|
|
||||||
goto -> bb4; // scope 0 at $DIR/simplify-arm.rs:+2:26: +2:27
|
|
||||||
}
|
|
||||||
|
|
||||||
bb4: {
|
|
||||||
return; // scope 0 at $DIR/simplify-arm.rs:+5:2: +5:2
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,46 +0,0 @@
|
||||||
- // MIR for `id` before SimplifyBranchSame
|
|
||||||
+ // MIR for `id` after SimplifyBranchSame
|
|
||||||
|
|
||||||
fn id(_1: Option<u8>) -> Option<u8> {
|
|
||||||
debug o => _1; // in scope 0 at $DIR/simplify-arm.rs:+0:7: +0:8
|
|
||||||
let mut _0: std::option::Option<u8>; // return place in scope 0 at $DIR/simplify-arm.rs:+0:25: +0:35
|
|
||||||
let mut _2: isize; // in scope 0 at $DIR/simplify-arm.rs:+2:9: +2:16
|
|
||||||
let _3: u8; // in scope 0 at $DIR/simplify-arm.rs:+2:14: +2:15
|
|
||||||
let mut _4: u8; // in scope 0 at $DIR/simplify-arm.rs:+2:25: +2:26
|
|
||||||
scope 1 {
|
|
||||||
debug v => _3; // in scope 1 at $DIR/simplify-arm.rs:+2:14: +2:15
|
|
||||||
}
|
|
||||||
|
|
||||||
bb0: {
|
|
||||||
_2 = discriminant(_1); // scope 0 at $DIR/simplify-arm.rs:+1:11: +1:12
|
|
||||||
switchInt(move _2) -> [0_isize: bb1, 1_isize: bb3, otherwise: bb2]; // scope 0 at $DIR/simplify-arm.rs:+1:5: +1:12
|
|
||||||
}
|
|
||||||
|
|
||||||
bb1: {
|
|
||||||
Deinit(_0); // scope 0 at $DIR/simplify-arm.rs:+3:17: +3:21
|
|
||||||
discriminant(_0) = 0; // scope 0 at $DIR/simplify-arm.rs:+3:17: +3:21
|
|
||||||
goto -> bb4; // scope 0 at $DIR/simplify-arm.rs:+3:17: +3:21
|
|
||||||
}
|
|
||||||
|
|
||||||
bb2: {
|
|
||||||
unreachable; // scope 0 at $DIR/simplify-arm.rs:+1:11: +1:12
|
|
||||||
}
|
|
||||||
|
|
||||||
bb3: {
|
|
||||||
StorageLive(_3); // scope 0 at $DIR/simplify-arm.rs:+2:14: +2:15
|
|
||||||
_3 = ((_1 as Some).0: u8); // scope 0 at $DIR/simplify-arm.rs:+2:14: +2:15
|
|
||||||
StorageLive(_4); // scope 1 at $DIR/simplify-arm.rs:+2:25: +2:26
|
|
||||||
_4 = _3; // scope 1 at $DIR/simplify-arm.rs:+2:25: +2:26
|
|
||||||
Deinit(_0); // scope 1 at $DIR/simplify-arm.rs:+2:20: +2:27
|
|
||||||
((_0 as Some).0: u8) = move _4; // scope 1 at $DIR/simplify-arm.rs:+2:20: +2:27
|
|
||||||
discriminant(_0) = 1; // scope 1 at $DIR/simplify-arm.rs:+2:20: +2:27
|
|
||||||
StorageDead(_4); // scope 1 at $DIR/simplify-arm.rs:+2:26: +2:27
|
|
||||||
StorageDead(_3); // scope 0 at $DIR/simplify-arm.rs:+2:26: +2:27
|
|
||||||
goto -> bb4; // scope 0 at $DIR/simplify-arm.rs:+2:26: +2:27
|
|
||||||
}
|
|
||||||
|
|
||||||
bb4: {
|
|
||||||
return; // scope 0 at $DIR/simplify-arm.rs:+5:2: +5:2
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,58 +0,0 @@
|
||||||
- // MIR for `id_result` before SimplifyArmIdentity
|
|
||||||
+ // MIR for `id_result` after SimplifyArmIdentity
|
|
||||||
|
|
||||||
fn id_result(_1: Result<u8, i32>) -> Result<u8, i32> {
|
|
||||||
debug r => _1; // in scope 0 at $DIR/simplify-arm.rs:+0:14: +0:15
|
|
||||||
let mut _0: std::result::Result<u8, i32>; // return place in scope 0 at $DIR/simplify-arm.rs:+0:37: +0:52
|
|
||||||
let mut _2: isize; // in scope 0 at $DIR/simplify-arm.rs:+2:9: +2:14
|
|
||||||
let _3: u8; // in scope 0 at $DIR/simplify-arm.rs:+2:12: +2:13
|
|
||||||
let mut _4: u8; // in scope 0 at $DIR/simplify-arm.rs:+2:21: +2:22
|
|
||||||
let _5: i32; // in scope 0 at $DIR/simplify-arm.rs:+3:13: +3:14
|
|
||||||
let mut _6: i32; // in scope 0 at $DIR/simplify-arm.rs:+3:23: +3:24
|
|
||||||
scope 1 {
|
|
||||||
debug x => _3; // in scope 1 at $DIR/simplify-arm.rs:+2:12: +2:13
|
|
||||||
}
|
|
||||||
scope 2 {
|
|
||||||
debug y => _5; // in scope 2 at $DIR/simplify-arm.rs:+3:13: +3:14
|
|
||||||
}
|
|
||||||
|
|
||||||
bb0: {
|
|
||||||
_2 = discriminant(_1); // scope 0 at $DIR/simplify-arm.rs:+1:11: +1:12
|
|
||||||
switchInt(move _2) -> [0_isize: bb3, 1_isize: bb1, otherwise: bb2]; // scope 0 at $DIR/simplify-arm.rs:+1:5: +1:12
|
|
||||||
}
|
|
||||||
|
|
||||||
bb1: {
|
|
||||||
StorageLive(_5); // scope 0 at $DIR/simplify-arm.rs:+3:13: +3:14
|
|
||||||
_5 = ((_1 as Err).0: i32); // scope 0 at $DIR/simplify-arm.rs:+3:13: +3:14
|
|
||||||
StorageLive(_6); // scope 2 at $DIR/simplify-arm.rs:+3:23: +3:24
|
|
||||||
_6 = _5; // scope 2 at $DIR/simplify-arm.rs:+3:23: +3:24
|
|
||||||
Deinit(_0); // scope 2 at $DIR/simplify-arm.rs:+3:19: +3:25
|
|
||||||
((_0 as Err).0: i32) = move _6; // scope 2 at $DIR/simplify-arm.rs:+3:19: +3:25
|
|
||||||
discriminant(_0) = 1; // scope 2 at $DIR/simplify-arm.rs:+3:19: +3:25
|
|
||||||
StorageDead(_6); // scope 2 at $DIR/simplify-arm.rs:+3:24: +3:25
|
|
||||||
StorageDead(_5); // scope 0 at $DIR/simplify-arm.rs:+3:24: +3:25
|
|
||||||
goto -> bb4; // scope 0 at $DIR/simplify-arm.rs:+3:24: +3:25
|
|
||||||
}
|
|
||||||
|
|
||||||
bb2: {
|
|
||||||
unreachable; // scope 0 at $DIR/simplify-arm.rs:+1:11: +1:12
|
|
||||||
}
|
|
||||||
|
|
||||||
bb3: {
|
|
||||||
StorageLive(_3); // scope 0 at $DIR/simplify-arm.rs:+2:12: +2:13
|
|
||||||
_3 = ((_1 as Ok).0: u8); // scope 0 at $DIR/simplify-arm.rs:+2:12: +2:13
|
|
||||||
StorageLive(_4); // scope 1 at $DIR/simplify-arm.rs:+2:21: +2:22
|
|
||||||
_4 = _3; // scope 1 at $DIR/simplify-arm.rs:+2:21: +2:22
|
|
||||||
Deinit(_0); // scope 1 at $DIR/simplify-arm.rs:+2:18: +2:23
|
|
||||||
((_0 as Ok).0: u8) = move _4; // scope 1 at $DIR/simplify-arm.rs:+2:18: +2:23
|
|
||||||
discriminant(_0) = 0; // scope 1 at $DIR/simplify-arm.rs:+2:18: +2:23
|
|
||||||
StorageDead(_4); // scope 1 at $DIR/simplify-arm.rs:+2:22: +2:23
|
|
||||||
StorageDead(_3); // scope 0 at $DIR/simplify-arm.rs:+2:22: +2:23
|
|
||||||
goto -> bb4; // scope 0 at $DIR/simplify-arm.rs:+2:22: +2:23
|
|
||||||
}
|
|
||||||
|
|
||||||
bb4: {
|
|
||||||
return; // scope 0 at $DIR/simplify-arm.rs:+5:2: +5:2
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,58 +0,0 @@
|
||||||
- // MIR for `id_result` before SimplifyBranchSame
|
|
||||||
+ // MIR for `id_result` after SimplifyBranchSame
|
|
||||||
|
|
||||||
fn id_result(_1: Result<u8, i32>) -> Result<u8, i32> {
|
|
||||||
debug r => _1; // in scope 0 at $DIR/simplify-arm.rs:+0:14: +0:15
|
|
||||||
let mut _0: std::result::Result<u8, i32>; // return place in scope 0 at $DIR/simplify-arm.rs:+0:37: +0:52
|
|
||||||
let mut _2: isize; // in scope 0 at $DIR/simplify-arm.rs:+2:9: +2:14
|
|
||||||
let _3: u8; // in scope 0 at $DIR/simplify-arm.rs:+2:12: +2:13
|
|
||||||
let mut _4: u8; // in scope 0 at $DIR/simplify-arm.rs:+2:21: +2:22
|
|
||||||
let _5: i32; // in scope 0 at $DIR/simplify-arm.rs:+3:13: +3:14
|
|
||||||
let mut _6: i32; // in scope 0 at $DIR/simplify-arm.rs:+3:23: +3:24
|
|
||||||
scope 1 {
|
|
||||||
debug x => _3; // in scope 1 at $DIR/simplify-arm.rs:+2:12: +2:13
|
|
||||||
}
|
|
||||||
scope 2 {
|
|
||||||
debug y => _5; // in scope 2 at $DIR/simplify-arm.rs:+3:13: +3:14
|
|
||||||
}
|
|
||||||
|
|
||||||
bb0: {
|
|
||||||
_2 = discriminant(_1); // scope 0 at $DIR/simplify-arm.rs:+1:11: +1:12
|
|
||||||
switchInt(move _2) -> [0_isize: bb3, 1_isize: bb1, otherwise: bb2]; // scope 0 at $DIR/simplify-arm.rs:+1:5: +1:12
|
|
||||||
}
|
|
||||||
|
|
||||||
bb1: {
|
|
||||||
StorageLive(_5); // scope 0 at $DIR/simplify-arm.rs:+3:13: +3:14
|
|
||||||
_5 = ((_1 as Err).0: i32); // scope 0 at $DIR/simplify-arm.rs:+3:13: +3:14
|
|
||||||
StorageLive(_6); // scope 2 at $DIR/simplify-arm.rs:+3:23: +3:24
|
|
||||||
_6 = _5; // scope 2 at $DIR/simplify-arm.rs:+3:23: +3:24
|
|
||||||
Deinit(_0); // scope 2 at $DIR/simplify-arm.rs:+3:19: +3:25
|
|
||||||
((_0 as Err).0: i32) = move _6; // scope 2 at $DIR/simplify-arm.rs:+3:19: +3:25
|
|
||||||
discriminant(_0) = 1; // scope 2 at $DIR/simplify-arm.rs:+3:19: +3:25
|
|
||||||
StorageDead(_6); // scope 2 at $DIR/simplify-arm.rs:+3:24: +3:25
|
|
||||||
StorageDead(_5); // scope 0 at $DIR/simplify-arm.rs:+3:24: +3:25
|
|
||||||
goto -> bb4; // scope 0 at $DIR/simplify-arm.rs:+3:24: +3:25
|
|
||||||
}
|
|
||||||
|
|
||||||
bb2: {
|
|
||||||
unreachable; // scope 0 at $DIR/simplify-arm.rs:+1:11: +1:12
|
|
||||||
}
|
|
||||||
|
|
||||||
bb3: {
|
|
||||||
StorageLive(_3); // scope 0 at $DIR/simplify-arm.rs:+2:12: +2:13
|
|
||||||
_3 = ((_1 as Ok).0: u8); // scope 0 at $DIR/simplify-arm.rs:+2:12: +2:13
|
|
||||||
StorageLive(_4); // scope 1 at $DIR/simplify-arm.rs:+2:21: +2:22
|
|
||||||
_4 = _3; // scope 1 at $DIR/simplify-arm.rs:+2:21: +2:22
|
|
||||||
Deinit(_0); // scope 1 at $DIR/simplify-arm.rs:+2:18: +2:23
|
|
||||||
((_0 as Ok).0: u8) = move _4; // scope 1 at $DIR/simplify-arm.rs:+2:18: +2:23
|
|
||||||
discriminant(_0) = 0; // scope 1 at $DIR/simplify-arm.rs:+2:18: +2:23
|
|
||||||
StorageDead(_4); // scope 1 at $DIR/simplify-arm.rs:+2:22: +2:23
|
|
||||||
StorageDead(_3); // scope 0 at $DIR/simplify-arm.rs:+2:22: +2:23
|
|
||||||
goto -> bb4; // scope 0 at $DIR/simplify-arm.rs:+2:22: +2:23
|
|
||||||
}
|
|
||||||
|
|
||||||
bb4: {
|
|
||||||
return; // scope 0 at $DIR/simplify-arm.rs:+5:2: +5:2
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,61 +0,0 @@
|
||||||
- // MIR for `main` before SimplifyArmIdentity
|
|
||||||
+ // MIR for `main` after SimplifyArmIdentity
|
|
||||||
|
|
||||||
fn main() -> () {
|
|
||||||
let mut _0: (); // return place in scope 0 at $DIR/simplify-arm-identity.rs:+0:11: +0:11
|
|
||||||
let _1: Src; // in scope 0 at $DIR/simplify-arm-identity.rs:+1:9: +1:10
|
|
||||||
let mut _2: Dst; // in scope 0 at $DIR/simplify-arm-identity.rs:+2:18: +5:6
|
|
||||||
let mut _3: isize; // in scope 0 at $DIR/simplify-arm-identity.rs:+3:9: +3:20
|
|
||||||
let mut _5: u8; // in scope 0 at $DIR/simplify-arm-identity.rs:+3:33: +3:34
|
|
||||||
scope 1 {
|
|
||||||
debug e => _1; // in scope 1 at $DIR/simplify-arm-identity.rs:+1:9: +1:10
|
|
||||||
let _4: u8; // in scope 1 at $DIR/simplify-arm-identity.rs:+3:18: +3:19
|
|
||||||
scope 2 {
|
|
||||||
}
|
|
||||||
scope 3 {
|
|
||||||
debug x => _4; // in scope 3 at $DIR/simplify-arm-identity.rs:+3:18: +3:19
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bb0: {
|
|
||||||
StorageLive(_1); // scope 0 at $DIR/simplify-arm-identity.rs:+1:9: +1:10
|
|
||||||
Deinit(_1); // scope 0 at $DIR/simplify-arm-identity.rs:+1:18: +1:29
|
|
||||||
((_1 as Foo).0: u8) = const 0_u8; // scope 0 at $DIR/simplify-arm-identity.rs:+1:18: +1:29
|
|
||||||
discriminant(_1) = 0; // scope 0 at $DIR/simplify-arm-identity.rs:+1:18: +1:29
|
|
||||||
StorageLive(_2); // scope 1 at $DIR/simplify-arm-identity.rs:+2:18: +5:6
|
|
||||||
_3 = const 0_isize; // scope 1 at $DIR/simplify-arm-identity.rs:+2:24: +2:25
|
|
||||||
goto -> bb3; // scope 1 at $DIR/simplify-arm-identity.rs:+2:18: +2:25
|
|
||||||
}
|
|
||||||
|
|
||||||
bb1: {
|
|
||||||
Deinit(_2); // scope 1 at $DIR/simplify-arm-identity.rs:+4:21: +4:32
|
|
||||||
((_2 as Foo).0: u8) = const 0_u8; // scope 1 at $DIR/simplify-arm-identity.rs:+4:21: +4:32
|
|
||||||
discriminant(_2) = 0; // scope 1 at $DIR/simplify-arm-identity.rs:+4:21: +4:32
|
|
||||||
goto -> bb4; // scope 1 at $DIR/simplify-arm-identity.rs:+4:21: +4:32
|
|
||||||
}
|
|
||||||
|
|
||||||
bb2: {
|
|
||||||
unreachable; // scope 1 at $DIR/simplify-arm-identity.rs:+2:24: +2:25
|
|
||||||
}
|
|
||||||
|
|
||||||
bb3: {
|
|
||||||
StorageLive(_4); // scope 1 at $DIR/simplify-arm-identity.rs:+3:18: +3:19
|
|
||||||
_4 = ((_1 as Foo).0: u8); // scope 1 at $DIR/simplify-arm-identity.rs:+3:18: +3:19
|
|
||||||
StorageLive(_5); // scope 3 at $DIR/simplify-arm-identity.rs:+3:33: +3:34
|
|
||||||
_5 = _4; // scope 3 at $DIR/simplify-arm-identity.rs:+3:33: +3:34
|
|
||||||
Deinit(_2); // scope 3 at $DIR/simplify-arm-identity.rs:+3:24: +3:35
|
|
||||||
((_2 as Foo).0: u8) = move _5; // scope 3 at $DIR/simplify-arm-identity.rs:+3:24: +3:35
|
|
||||||
discriminant(_2) = 0; // scope 3 at $DIR/simplify-arm-identity.rs:+3:24: +3:35
|
|
||||||
StorageDead(_5); // scope 3 at $DIR/simplify-arm-identity.rs:+3:34: +3:35
|
|
||||||
StorageDead(_4); // scope 1 at $DIR/simplify-arm-identity.rs:+3:34: +3:35
|
|
||||||
goto -> bb4; // scope 1 at $DIR/simplify-arm-identity.rs:+3:34: +3:35
|
|
||||||
}
|
|
||||||
|
|
||||||
bb4: {
|
|
||||||
StorageDead(_2); // scope 1 at $DIR/simplify-arm-identity.rs:+5:6: +5:7
|
|
||||||
nop; // scope 0 at $DIR/simplify-arm-identity.rs:+0:11: +6:2
|
|
||||||
StorageDead(_1); // scope 0 at $DIR/simplify-arm-identity.rs:+6:1: +6:2
|
|
||||||
return; // scope 0 at $DIR/simplify-arm-identity.rs:+6:2: +6:2
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,61 +0,0 @@
|
||||||
- // MIR for `main` before SimplifyArmIdentity
|
|
||||||
+ // MIR for `main` after SimplifyArmIdentity
|
|
||||||
|
|
||||||
fn main() -> () {
|
|
||||||
let mut _0: (); // return place in scope 0 at $DIR/simplify-arm-identity.rs:+0:11: +0:11
|
|
||||||
let _1: Src; // in scope 0 at $DIR/simplify-arm-identity.rs:+1:9: +1:10
|
|
||||||
let mut _2: Dst; // in scope 0 at $DIR/simplify-arm-identity.rs:+2:18: +5:6
|
|
||||||
let mut _3: isize; // in scope 0 at $DIR/simplify-arm-identity.rs:+3:9: +3:20
|
|
||||||
let mut _5: u8; // in scope 0 at $DIR/simplify-arm-identity.rs:+3:33: +3:34
|
|
||||||
scope 1 {
|
|
||||||
debug e => _1; // in scope 1 at $DIR/simplify-arm-identity.rs:+1:9: +1:10
|
|
||||||
let _4: u8; // in scope 1 at $DIR/simplify-arm-identity.rs:+3:18: +3:19
|
|
||||||
scope 2 {
|
|
||||||
}
|
|
||||||
scope 3 {
|
|
||||||
debug x => _4; // in scope 3 at $DIR/simplify-arm-identity.rs:+3:18: +3:19
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bb0: {
|
|
||||||
StorageLive(_1); // scope 0 at $DIR/simplify-arm-identity.rs:+1:9: +1:10
|
|
||||||
Deinit(_1); // scope 0 at $DIR/simplify-arm-identity.rs:+1:18: +1:29
|
|
||||||
((_1 as Foo).0: u8) = const 0_u8; // scope 0 at $DIR/simplify-arm-identity.rs:+1:18: +1:29
|
|
||||||
discriminant(_1) = 0; // scope 0 at $DIR/simplify-arm-identity.rs:+1:18: +1:29
|
|
||||||
StorageLive(_2); // scope 1 at $DIR/simplify-arm-identity.rs:+2:18: +5:6
|
|
||||||
_3 = const 0_isize; // scope 1 at $DIR/simplify-arm-identity.rs:+2:24: +2:25
|
|
||||||
goto -> bb3; // scope 1 at $DIR/simplify-arm-identity.rs:+2:18: +2:25
|
|
||||||
}
|
|
||||||
|
|
||||||
bb1: {
|
|
||||||
Deinit(_2); // scope 1 at $DIR/simplify-arm-identity.rs:+4:21: +4:32
|
|
||||||
((_2 as Foo).0: u8) = const 0_u8; // scope 1 at $DIR/simplify-arm-identity.rs:+4:21: +4:32
|
|
||||||
discriminant(_2) = 0; // scope 1 at $DIR/simplify-arm-identity.rs:+4:21: +4:32
|
|
||||||
goto -> bb4; // scope 1 at $DIR/simplify-arm-identity.rs:+4:21: +4:32
|
|
||||||
}
|
|
||||||
|
|
||||||
bb2: {
|
|
||||||
unreachable; // scope 1 at $DIR/simplify-arm-identity.rs:+2:24: +2:25
|
|
||||||
}
|
|
||||||
|
|
||||||
bb3: {
|
|
||||||
StorageLive(_4); // scope 1 at $DIR/simplify-arm-identity.rs:+3:18: +3:19
|
|
||||||
_4 = ((_1 as Foo).0: u8); // scope 1 at $DIR/simplify-arm-identity.rs:+3:18: +3:19
|
|
||||||
StorageLive(_5); // scope 3 at $DIR/simplify-arm-identity.rs:+3:33: +3:34
|
|
||||||
_5 = _4; // scope 3 at $DIR/simplify-arm-identity.rs:+3:33: +3:34
|
|
||||||
Deinit(_2); // scope 3 at $DIR/simplify-arm-identity.rs:+3:24: +3:35
|
|
||||||
((_2 as Foo).0: u8) = move _5; // scope 3 at $DIR/simplify-arm-identity.rs:+3:24: +3:35
|
|
||||||
discriminant(_2) = 0; // scope 3 at $DIR/simplify-arm-identity.rs:+3:24: +3:35
|
|
||||||
StorageDead(_5); // scope 3 at $DIR/simplify-arm-identity.rs:+3:34: +3:35
|
|
||||||
StorageDead(_4); // scope 1 at $DIR/simplify-arm-identity.rs:+3:34: +3:35
|
|
||||||
goto -> bb4; // scope 1 at $DIR/simplify-arm-identity.rs:+3:34: +3:35
|
|
||||||
}
|
|
||||||
|
|
||||||
bb4: {
|
|
||||||
StorageDead(_2); // scope 1 at $DIR/simplify-arm-identity.rs:+5:6: +5:7
|
|
||||||
nop; // scope 0 at $DIR/simplify-arm-identity.rs:+0:11: +6:2
|
|
||||||
StorageDead(_1); // scope 0 at $DIR/simplify-arm-identity.rs:+6:1: +6:2
|
|
||||||
return; // scope 0 at $DIR/simplify-arm-identity.rs:+6:2: +6:2
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -5,24 +5,32 @@
|
||||||
debug x => _1; // in scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+0:8: +0:9
|
debug x => _1; // in scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+0:8: +0:9
|
||||||
let mut _0: std::option::Option<std::boxed::Box<()>>; // return place in scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+0:31: +0:46
|
let mut _0: std::option::Option<std::boxed::Box<()>>; // return place in scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+0:31: +0:46
|
||||||
let mut _2: isize; // in scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+2:9: +2:13
|
let mut _2: isize; // in scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+2:9: +2:13
|
||||||
- let _3: std::boxed::Box<()>; // in scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+3:14: +3:15
|
let _3: std::boxed::Box<()>; // in scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+3:14: +3:15
|
||||||
- let mut _4: std::boxed::Box<()>; // in scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+3:25: +3:26
|
let mut _4: std::boxed::Box<()>; // in scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+3:25: +3:26
|
||||||
- let mut _5: bool; // in scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+5:1: +5:2
|
- let mut _5: bool; // in scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+5:1: +5:2
|
||||||
- let mut _6: isize; // in scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+5:1: +5:2
|
- let mut _6: isize; // in scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+5:1: +5:2
|
||||||
- let mut _7: isize; // in scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+5:1: +5:2
|
- let mut _7: isize; // in scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+5:1: +5:2
|
||||||
scope 1 {
|
scope 1 {
|
||||||
debug x => ((_0 as Some).0: std::boxed::Box<()>); // in scope 1 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+3:14: +3:15
|
debug x => _3; // in scope 1 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+3:14: +3:15
|
||||||
}
|
}
|
||||||
|
|
||||||
bb0: {
|
bb0: {
|
||||||
|
- _5 = const false; // scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+1:11: +1:12
|
||||||
|
- _5 = const true; // scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+1:11: +1:12
|
||||||
_2 = discriminant(_1); // scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+1:11: +1:12
|
_2 = discriminant(_1); // scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+1:11: +1:12
|
||||||
switchInt(move _2) -> [0_isize: bb3, 1_isize: bb1, otherwise: bb2]; // scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+1:5: +1:12
|
switchInt(move _2) -> [0_isize: bb3, 1_isize: bb1, otherwise: bb2]; // scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+1:5: +1:12
|
||||||
}
|
}
|
||||||
|
|
||||||
bb1: {
|
bb1: {
|
||||||
((_0 as Some).0: std::boxed::Box<()>) = move ((_1 as Some).0: std::boxed::Box<()>); // scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+3:14: +3:15
|
StorageLive(_3); // scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+3:14: +3:15
|
||||||
|
_3 = move ((_1 as Some).0: std::boxed::Box<()>); // scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+3:14: +3:15
|
||||||
|
StorageLive(_4); // scope 1 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+3:25: +3:26
|
||||||
|
_4 = move _3; // scope 1 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+3:25: +3:26
|
||||||
Deinit(_0); // scope 1 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+3:20: +3:27
|
Deinit(_0); // scope 1 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+3:20: +3:27
|
||||||
|
((_0 as Some).0: std::boxed::Box<()>) = move _4; // scope 1 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+3:20: +3:27
|
||||||
discriminant(_0) = 1; // scope 1 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+3:20: +3:27
|
discriminant(_0) = 1; // scope 1 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+3:20: +3:27
|
||||||
|
StorageDead(_4); // scope 1 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+3:26: +3:27
|
||||||
|
StorageDead(_3); // scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+3:26: +3:27
|
||||||
goto -> bb4; // scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+3:26: +3:27
|
goto -> bb4; // scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+3:26: +3:27
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,6 +45,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
bb4: {
|
bb4: {
|
||||||
|
- _6 = discriminant(_1); // scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+5:1: +5:2
|
||||||
return; // scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+5:2: +5:2
|
return; // scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+5:2: +5:2
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,24 +5,32 @@
|
||||||
debug x => _1; // in scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+0:8: +0:9
|
debug x => _1; // in scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+0:8: +0:9
|
||||||
let mut _0: std::option::Option<std::boxed::Box<()>>; // return place in scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+0:31: +0:46
|
let mut _0: std::option::Option<std::boxed::Box<()>>; // return place in scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+0:31: +0:46
|
||||||
let mut _2: isize; // in scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+2:9: +2:13
|
let mut _2: isize; // in scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+2:9: +2:13
|
||||||
- let _3: std::boxed::Box<()>; // in scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+3:14: +3:15
|
let _3: std::boxed::Box<()>; // in scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+3:14: +3:15
|
||||||
- let mut _4: std::boxed::Box<()>; // in scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+3:25: +3:26
|
let mut _4: std::boxed::Box<()>; // in scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+3:25: +3:26
|
||||||
- let mut _5: bool; // in scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+5:1: +5:2
|
- let mut _5: bool; // in scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+5:1: +5:2
|
||||||
- let mut _6: isize; // in scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+5:1: +5:2
|
- let mut _6: isize; // in scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+5:1: +5:2
|
||||||
- let mut _7: isize; // in scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+5:1: +5:2
|
- let mut _7: isize; // in scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+5:1: +5:2
|
||||||
scope 1 {
|
scope 1 {
|
||||||
debug x => ((_0 as Some).0: std::boxed::Box<()>); // in scope 1 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+3:14: +3:15
|
debug x => _3; // in scope 1 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+3:14: +3:15
|
||||||
}
|
}
|
||||||
|
|
||||||
bb0: {
|
bb0: {
|
||||||
|
- _5 = const false; // scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+1:11: +1:12
|
||||||
|
- _5 = const true; // scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+1:11: +1:12
|
||||||
_2 = discriminant(_1); // scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+1:11: +1:12
|
_2 = discriminant(_1); // scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+1:11: +1:12
|
||||||
switchInt(move _2) -> [0_isize: bb3, 1_isize: bb1, otherwise: bb2]; // scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+1:5: +1:12
|
switchInt(move _2) -> [0_isize: bb3, 1_isize: bb1, otherwise: bb2]; // scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+1:5: +1:12
|
||||||
}
|
}
|
||||||
|
|
||||||
bb1: {
|
bb1: {
|
||||||
((_0 as Some).0: std::boxed::Box<()>) = move ((_1 as Some).0: std::boxed::Box<()>); // scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+3:14: +3:15
|
StorageLive(_3); // scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+3:14: +3:15
|
||||||
|
_3 = move ((_1 as Some).0: std::boxed::Box<()>); // scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+3:14: +3:15
|
||||||
|
StorageLive(_4); // scope 1 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+3:25: +3:26
|
||||||
|
_4 = move _3; // scope 1 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+3:25: +3:26
|
||||||
Deinit(_0); // scope 1 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+3:20: +3:27
|
Deinit(_0); // scope 1 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+3:20: +3:27
|
||||||
|
((_0 as Some).0: std::boxed::Box<()>) = move _4; // scope 1 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+3:20: +3:27
|
||||||
discriminant(_0) = 1; // scope 1 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+3:20: +3:27
|
discriminant(_0) = 1; // scope 1 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+3:20: +3:27
|
||||||
|
StorageDead(_4); // scope 1 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+3:26: +3:27
|
||||||
|
StorageDead(_3); // scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+3:26: +3:27
|
||||||
goto -> bb4; // scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+3:26: +3:27
|
goto -> bb4; // scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+3:26: +3:27
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,6 +45,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
bb4: {
|
bb4: {
|
||||||
|
- _6 = discriminant(_1); // scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+5:1: +5:2
|
||||||
return; // scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+5:2: +5:2
|
return; // scope 0 at $DIR/simplify-locals-removes-unused-discriminant-reads.rs:+5:2: +5:2
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,30 +0,0 @@
|
||||||
// compile-flags: -Zunsound-mir-opts
|
|
||||||
// EMIT_MIR simplify_try.try_identity.SimplifyArmIdentity.diff
|
|
||||||
// EMIT_MIR simplify_try.try_identity.SimplifyBranchSame.after.mir
|
|
||||||
// EMIT_MIR simplify_try.try_identity.SimplifyLocals.after.mir
|
|
||||||
// EMIT_MIR simplify_try.try_identity.DestinationPropagation.diff
|
|
||||||
|
|
||||||
|
|
||||||
fn into_result<T, E>(r: Result<T, E>) -> Result<T, E> {
|
|
||||||
r
|
|
||||||
}
|
|
||||||
|
|
||||||
fn from_error<T, E>(e: E) -> Result<T, E> {
|
|
||||||
Err(e)
|
|
||||||
}
|
|
||||||
|
|
||||||
// This was written to the `?` from `try_trait`, but `try_trait_v2` uses a different structure,
|
|
||||||
// so the relevant desugar is copied inline in order to keep the test testing the same thing.
|
|
||||||
// FIXME(#85133): while this might be useful for `r#try!`, it would be nice to have a MIR
|
|
||||||
// optimization that picks up the `?` desugaring, as `SimplifyArmIdentity` does not.
|
|
||||||
fn try_identity(x: Result<u32, i32>) -> Result<u32, i32> {
|
|
||||||
let y = match into_result(x) {
|
|
||||||
Err(e) => return from_error(From::from(e)),
|
|
||||||
Ok(v) => v,
|
|
||||||
};
|
|
||||||
Ok(y)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn main() {
|
|
||||||
let _ = try_identity(Ok(0));
|
|
||||||
}
|
|
96
src/test/mir-opt/try_identity_e2e.new.PreCodegen.after.mir
Normal file
96
src/test/mir-opt/try_identity_e2e.new.PreCodegen.after.mir
Normal file
|
@ -0,0 +1,96 @@
|
||||||
|
// MIR for `new` after PreCodegen
|
||||||
|
|
||||||
|
fn new(_1: Result<T, E>) -> Result<T, E> {
|
||||||
|
debug x => _1; // in scope 0 at $DIR/try_identity_e2e.rs:+0:14: +0:15
|
||||||
|
let mut _0: std::result::Result<T, E>; // return place in scope 0 at $DIR/try_identity_e2e.rs:+0:34: +0:46
|
||||||
|
let mut _2: T; // in scope 0 at $DIR/try_identity_e2e.rs:+2:9: +10:10
|
||||||
|
let mut _3: std::ops::ControlFlow<E, T>; // in scope 0 at $DIR/try_identity_e2e.rs:+2:15: +7:10
|
||||||
|
let mut _4: isize; // in scope 0 at $DIR/try_identity_e2e.rs:+4:17: +4:22
|
||||||
|
let _5: T; // in scope 0 at $DIR/try_identity_e2e.rs:+4:20: +4:21
|
||||||
|
let mut _6: T; // in scope 0 at $DIR/try_identity_e2e.rs:+4:48: +4:49
|
||||||
|
let _7: E; // in scope 0 at $DIR/try_identity_e2e.rs:+5:21: +5:22
|
||||||
|
let mut _8: E; // in scope 0 at $DIR/try_identity_e2e.rs:+5:46: +5:47
|
||||||
|
let mut _9: isize; // in scope 0 at $DIR/try_identity_e2e.rs:+8:13: +8:37
|
||||||
|
let _10: T; // in scope 0 at $DIR/try_identity_e2e.rs:+8:35: +8:36
|
||||||
|
let _11: E; // in scope 0 at $DIR/try_identity_e2e.rs:+9:32: +9:33
|
||||||
|
let mut _12: E; // in scope 0 at $DIR/try_identity_e2e.rs:+9:49: +9:50
|
||||||
|
scope 1 {
|
||||||
|
debug v => _5; // in scope 1 at $DIR/try_identity_e2e.rs:+4:20: +4:21
|
||||||
|
}
|
||||||
|
scope 2 {
|
||||||
|
debug e => _7; // in scope 2 at $DIR/try_identity_e2e.rs:+5:21: +5:22
|
||||||
|
}
|
||||||
|
scope 3 {
|
||||||
|
debug v => _10; // in scope 3 at $DIR/try_identity_e2e.rs:+8:35: +8:36
|
||||||
|
}
|
||||||
|
scope 4 {
|
||||||
|
debug e => _11; // in scope 4 at $DIR/try_identity_e2e.rs:+9:32: +9:33
|
||||||
|
}
|
||||||
|
|
||||||
|
bb0: {
|
||||||
|
StorageLive(_2); // scope 0 at $DIR/try_identity_e2e.rs:+2:9: +10:10
|
||||||
|
StorageLive(_3); // scope 0 at $DIR/try_identity_e2e.rs:+2:15: +7:10
|
||||||
|
_4 = discriminant(_1); // scope 0 at $DIR/try_identity_e2e.rs:+3:19: +3:20
|
||||||
|
switchInt(move _4) -> [0_isize: bb2, 1_isize: bb1, otherwise: bb4]; // scope 0 at $DIR/try_identity_e2e.rs:+3:13: +3:20
|
||||||
|
}
|
||||||
|
|
||||||
|
bb1: {
|
||||||
|
StorageLive(_7); // scope 0 at $DIR/try_identity_e2e.rs:+5:21: +5:22
|
||||||
|
_7 = move ((_1 as Err).0: E); // scope 0 at $DIR/try_identity_e2e.rs:+5:21: +5:22
|
||||||
|
StorageLive(_8); // scope 2 at $DIR/try_identity_e2e.rs:+5:46: +5:47
|
||||||
|
_8 = move _7; // scope 2 at $DIR/try_identity_e2e.rs:+5:46: +5:47
|
||||||
|
Deinit(_3); // scope 2 at $DIR/try_identity_e2e.rs:+5:27: +5:48
|
||||||
|
((_3 as Break).0: E) = move _8; // scope 2 at $DIR/try_identity_e2e.rs:+5:27: +5:48
|
||||||
|
discriminant(_3) = 1; // scope 2 at $DIR/try_identity_e2e.rs:+5:27: +5:48
|
||||||
|
StorageDead(_8); // scope 2 at $DIR/try_identity_e2e.rs:+5:47: +5:48
|
||||||
|
StorageDead(_7); // scope 0 at $DIR/try_identity_e2e.rs:+5:47: +5:48
|
||||||
|
_9 = discriminant(_3); // scope 0 at $DIR/try_identity_e2e.rs:+2:15: +7:10
|
||||||
|
switchInt(move _9) -> [0_isize: bb5, 1_isize: bb3, otherwise: bb4]; // scope 0 at $DIR/try_identity_e2e.rs:+2:9: +7:10
|
||||||
|
}
|
||||||
|
|
||||||
|
bb2: {
|
||||||
|
StorageLive(_5); // scope 0 at $DIR/try_identity_e2e.rs:+4:20: +4:21
|
||||||
|
_5 = move ((_1 as Ok).0: T); // scope 0 at $DIR/try_identity_e2e.rs:+4:20: +4:21
|
||||||
|
StorageLive(_6); // scope 1 at $DIR/try_identity_e2e.rs:+4:48: +4:49
|
||||||
|
_6 = move _5; // scope 1 at $DIR/try_identity_e2e.rs:+4:48: +4:49
|
||||||
|
Deinit(_3); // scope 1 at $DIR/try_identity_e2e.rs:+4:26: +4:50
|
||||||
|
((_3 as Continue).0: T) = move _6; // scope 1 at $DIR/try_identity_e2e.rs:+4:26: +4:50
|
||||||
|
discriminant(_3) = 0; // scope 1 at $DIR/try_identity_e2e.rs:+4:26: +4:50
|
||||||
|
StorageDead(_6); // scope 1 at $DIR/try_identity_e2e.rs:+4:49: +4:50
|
||||||
|
StorageDead(_5); // scope 0 at $DIR/try_identity_e2e.rs:+4:49: +4:50
|
||||||
|
_9 = discriminant(_3); // scope 0 at $DIR/try_identity_e2e.rs:+2:15: +7:10
|
||||||
|
switchInt(move _9) -> [0_isize: bb5, 1_isize: bb3, otherwise: bb4]; // scope 0 at $DIR/try_identity_e2e.rs:+2:9: +7:10
|
||||||
|
}
|
||||||
|
|
||||||
|
bb3: {
|
||||||
|
StorageLive(_11); // scope 0 at $DIR/try_identity_e2e.rs:+9:32: +9:33
|
||||||
|
_11 = move ((_3 as Break).0: E); // scope 0 at $DIR/try_identity_e2e.rs:+9:32: +9:33
|
||||||
|
StorageLive(_12); // scope 4 at $DIR/try_identity_e2e.rs:+9:49: +9:50
|
||||||
|
_12 = move _11; // scope 4 at $DIR/try_identity_e2e.rs:+9:49: +9:50
|
||||||
|
Deinit(_0); // scope 4 at $DIR/try_identity_e2e.rs:+9:45: +9:51
|
||||||
|
((_0 as Err).0: E) = move _12; // scope 4 at $DIR/try_identity_e2e.rs:+9:45: +9:51
|
||||||
|
discriminant(_0) = 1; // scope 4 at $DIR/try_identity_e2e.rs:+9:45: +9:51
|
||||||
|
StorageDead(_12); // scope 4 at $DIR/try_identity_e2e.rs:+9:50: +9:51
|
||||||
|
StorageDead(_11); // scope 0 at $DIR/try_identity_e2e.rs:+9:50: +9:51
|
||||||
|
StorageDead(_2); // scope 0 at $DIR/try_identity_e2e.rs:+11:5: +11:6
|
||||||
|
StorageDead(_3); // scope 0 at $DIR/try_identity_e2e.rs:+12:1: +12:2
|
||||||
|
return; // scope 0 at $DIR/try_identity_e2e.rs:+12:1: +12:2
|
||||||
|
}
|
||||||
|
|
||||||
|
bb4: {
|
||||||
|
unreachable; // scope 0 at $DIR/try_identity_e2e.rs:+2:15: +7:10
|
||||||
|
}
|
||||||
|
|
||||||
|
bb5: {
|
||||||
|
StorageLive(_10); // scope 0 at $DIR/try_identity_e2e.rs:+8:35: +8:36
|
||||||
|
_10 = move ((_3 as Continue).0: T); // scope 0 at $DIR/try_identity_e2e.rs:+8:35: +8:36
|
||||||
|
_2 = move _10; // scope 3 at $DIR/try_identity_e2e.rs:+8:41: +8:42
|
||||||
|
StorageDead(_10); // scope 0 at $DIR/try_identity_e2e.rs:+8:41: +8:42
|
||||||
|
Deinit(_0); // scope 0 at $DIR/try_identity_e2e.rs:+1:5: +11:6
|
||||||
|
((_0 as Ok).0: T) = move _2; // scope 0 at $DIR/try_identity_e2e.rs:+1:5: +11:6
|
||||||
|
discriminant(_0) = 0; // scope 0 at $DIR/try_identity_e2e.rs:+1:5: +11:6
|
||||||
|
StorageDead(_2); // scope 0 at $DIR/try_identity_e2e.rs:+11:5: +11:6
|
||||||
|
StorageDead(_3); // scope 0 at $DIR/try_identity_e2e.rs:+12:1: +12:2
|
||||||
|
return; // scope 0 at $DIR/try_identity_e2e.rs:+12:1: +12:2
|
||||||
|
}
|
||||||
|
}
|
53
src/test/mir-opt/try_identity_e2e.old.PreCodegen.after.mir
Normal file
53
src/test/mir-opt/try_identity_e2e.old.PreCodegen.after.mir
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
// MIR for `old` after PreCodegen
|
||||||
|
|
||||||
|
fn old(_1: Result<T, E>) -> Result<T, E> {
|
||||||
|
debug x => _1; // in scope 0 at $DIR/try_identity_e2e.rs:+0:14: +0:15
|
||||||
|
let mut _0: std::result::Result<T, E>; // return place in scope 0 at $DIR/try_identity_e2e.rs:+0:34: +0:46
|
||||||
|
let mut _2: T; // in scope 0 at $DIR/try_identity_e2e.rs:+2:9: +5:10
|
||||||
|
let mut _3: isize; // in scope 0 at $DIR/try_identity_e2e.rs:+3:13: +3:18
|
||||||
|
let _4: T; // in scope 0 at $DIR/try_identity_e2e.rs:+3:16: +3:17
|
||||||
|
let _5: E; // in scope 0 at $DIR/try_identity_e2e.rs:+4:17: +4:18
|
||||||
|
let mut _6: E; // in scope 0 at $DIR/try_identity_e2e.rs:+4:34: +4:35
|
||||||
|
scope 1 {
|
||||||
|
debug v => _4; // in scope 1 at $DIR/try_identity_e2e.rs:+3:16: +3:17
|
||||||
|
}
|
||||||
|
scope 2 {
|
||||||
|
debug e => _5; // in scope 2 at $DIR/try_identity_e2e.rs:+4:17: +4:18
|
||||||
|
}
|
||||||
|
|
||||||
|
bb0: {
|
||||||
|
StorageLive(_2); // scope 0 at $DIR/try_identity_e2e.rs:+2:9: +5:10
|
||||||
|
_3 = discriminant(_1); // scope 0 at $DIR/try_identity_e2e.rs:+2:15: +2:16
|
||||||
|
switchInt(move _3) -> [0_isize: bb3, 1_isize: bb1, otherwise: bb2]; // scope 0 at $DIR/try_identity_e2e.rs:+2:9: +2:16
|
||||||
|
}
|
||||||
|
|
||||||
|
bb1: {
|
||||||
|
StorageLive(_5); // scope 0 at $DIR/try_identity_e2e.rs:+4:17: +4:18
|
||||||
|
_5 = move ((_1 as Err).0: E); // scope 0 at $DIR/try_identity_e2e.rs:+4:17: +4:18
|
||||||
|
StorageLive(_6); // scope 2 at $DIR/try_identity_e2e.rs:+4:34: +4:35
|
||||||
|
_6 = move _5; // scope 2 at $DIR/try_identity_e2e.rs:+4:34: +4:35
|
||||||
|
Deinit(_0); // scope 2 at $DIR/try_identity_e2e.rs:+4:30: +4:36
|
||||||
|
((_0 as Err).0: E) = move _6; // scope 2 at $DIR/try_identity_e2e.rs:+4:30: +4:36
|
||||||
|
discriminant(_0) = 1; // scope 2 at $DIR/try_identity_e2e.rs:+4:30: +4:36
|
||||||
|
StorageDead(_6); // scope 2 at $DIR/try_identity_e2e.rs:+4:35: +4:36
|
||||||
|
StorageDead(_5); // scope 0 at $DIR/try_identity_e2e.rs:+4:35: +4:36
|
||||||
|
StorageDead(_2); // scope 0 at $DIR/try_identity_e2e.rs:+6:5: +6:6
|
||||||
|
return; // scope 0 at $DIR/try_identity_e2e.rs:+7:1: +7:2
|
||||||
|
}
|
||||||
|
|
||||||
|
bb2: {
|
||||||
|
unreachable; // scope 0 at $DIR/try_identity_e2e.rs:+2:15: +2:16
|
||||||
|
}
|
||||||
|
|
||||||
|
bb3: {
|
||||||
|
StorageLive(_4); // scope 0 at $DIR/try_identity_e2e.rs:+3:16: +3:17
|
||||||
|
_4 = move ((_1 as Ok).0: T); // scope 0 at $DIR/try_identity_e2e.rs:+3:16: +3:17
|
||||||
|
_2 = move _4; // scope 1 at $DIR/try_identity_e2e.rs:+3:22: +3:23
|
||||||
|
StorageDead(_4); // scope 0 at $DIR/try_identity_e2e.rs:+3:22: +3:23
|
||||||
|
Deinit(_0); // scope 0 at $DIR/try_identity_e2e.rs:+1:5: +6:6
|
||||||
|
((_0 as Ok).0: T) = move _2; // scope 0 at $DIR/try_identity_e2e.rs:+1:5: +6:6
|
||||||
|
discriminant(_0) = 0; // scope 0 at $DIR/try_identity_e2e.rs:+1:5: +6:6
|
||||||
|
StorageDead(_2); // scope 0 at $DIR/try_identity_e2e.rs:+6:5: +6:6
|
||||||
|
return; // scope 0 at $DIR/try_identity_e2e.rs:+7:1: +7:2
|
||||||
|
}
|
||||||
|
}
|
34
src/test/mir-opt/try_identity_e2e.rs
Normal file
34
src/test/mir-opt/try_identity_e2e.rs
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
// Track the status of MIR optimizations simplifying `Ok(res?)` for both the old and new desugarings
|
||||||
|
// of that syntax.
|
||||||
|
|
||||||
|
use std::ops::ControlFlow;
|
||||||
|
|
||||||
|
// EMIT_MIR try_identity_e2e.new.PreCodegen.after.mir
|
||||||
|
fn new<T, E>(x: Result<T, E>) -> Result<T, E> {
|
||||||
|
Ok(
|
||||||
|
match {
|
||||||
|
match x {
|
||||||
|
Ok(v) => ControlFlow::Continue(v),
|
||||||
|
Err(e) => ControlFlow::Break(e),
|
||||||
|
}
|
||||||
|
} {
|
||||||
|
ControlFlow::Continue(v) => v,
|
||||||
|
ControlFlow::Break(e) => return Err(e),
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// EMIT_MIR try_identity_e2e.old.PreCodegen.after.mir
|
||||||
|
fn old<T, E>(x: Result<T, E>) -> Result<T, E> {
|
||||||
|
Ok(
|
||||||
|
match x {
|
||||||
|
Ok(v) => v,
|
||||||
|
Err(e) => return Err(e),
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let _ = new::<(), ()>(Ok(()));
|
||||||
|
let _ = old::<(), ()>(Ok(()));
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue