273 lines
6.2 KiB
Diff
273 lines
6.2 KiB
Diff
- // MIR for `complicated_match` after SimplifyCfg-initial
|
|
+ // MIR for `complicated_match` after ElaborateDrops
|
|
|
|
fn complicated_match(_1: bool, _2: (bool, bool, String)) -> i32 {
|
|
debug cond => _1;
|
|
debug items => _2;
|
|
let mut _0: i32;
|
|
let mut _3: &bool;
|
|
let mut _4: &bool;
|
|
let _5: bool;
|
|
let _6: &bool;
|
|
let _7: std::string::String;
|
|
let _8: &std::string::String;
|
|
let mut _9: bool;
|
|
let mut _10: bool;
|
|
let mut _11: !;
|
|
let mut _12: bool;
|
|
let mut _13: bool;
|
|
let mut _14: !;
|
|
let _15: bool;
|
|
let _16: std::string::String;
|
|
scope 1 {
|
|
debug a => _5;
|
|
debug a => _6;
|
|
debug s => _7;
|
|
debug s => _8;
|
|
}
|
|
scope 2 {
|
|
debug b => _15;
|
|
debug t => _16;
|
|
}
|
|
|
|
bb0: {
|
|
PlaceMention(_2);
|
|
- switchInt((_2.0: bool)) -> [0: bb6, otherwise: bb1];
|
|
+ switchInt((_2.0: bool)) -> [0: bb5, otherwise: bb1];
|
|
}
|
|
|
|
bb1: {
|
|
- switchInt((_2.1: bool)) -> [0: bb5, otherwise: bb2];
|
|
+ switchInt((_2.1: bool)) -> [0: bb10, otherwise: bb2];
|
|
}
|
|
|
|
bb2: {
|
|
- switchInt((_2.0: bool)) -> [0: bb4, otherwise: bb3];
|
|
+ switchInt((_2.0: bool)) -> [0: bb3, otherwise: bb17];
|
|
}
|
|
|
|
bb3: {
|
|
- falseEdge -> [real: bb20, imaginary: bb4];
|
|
- }
|
|
-
|
|
- bb4: {
|
|
StorageLive(_15);
|
|
_15 = (_2.1: bool);
|
|
StorageLive(_16);
|
|
_16 = move (_2.2: std::string::String);
|
|
- goto -> bb19;
|
|
+ goto -> bb16;
|
|
}
|
|
|
|
- bb5: {
|
|
- falseEdge -> [real: bb13, imaginary: bb3];
|
|
- }
|
|
-
|
|
- bb6: {
|
|
- falseEdge -> [real: bb8, imaginary: bb5];
|
|
- }
|
|
-
|
|
- bb7: {
|
|
+ bb4: {
|
|
_0 = const 1_i32;
|
|
- drop(_7) -> [return: bb18, unwind: bb25];
|
|
+ drop(_7) -> [return: bb15, unwind: bb22];
|
|
}
|
|
|
|
- bb8: {
|
|
+ bb5: {
|
|
StorageLive(_6);
|
|
_6 = &(_2.1: bool);
|
|
StorageLive(_8);
|
|
_8 = &(_2.2: std::string::String);
|
|
- _3 = &fake (_2.0: bool);
|
|
- _4 = &fake (_2.1: bool);
|
|
StorageLive(_9);
|
|
StorageLive(_10);
|
|
_10 = _1;
|
|
- switchInt(move _10) -> [0: bb10, otherwise: bb9];
|
|
+ switchInt(move _10) -> [0: bb7, otherwise: bb6];
|
|
}
|
|
|
|
- bb9: {
|
|
+ bb6: {
|
|
_0 = const 3_i32;
|
|
StorageDead(_10);
|
|
StorageDead(_9);
|
|
- goto -> bb23;
|
|
+ goto -> bb20;
|
|
}
|
|
|
|
- bb10: {
|
|
+ bb7: {
|
|
_9 = (*_6);
|
|
- switchInt(move _9) -> [0: bb12, otherwise: bb11];
|
|
+ switchInt(move _9) -> [0: bb9, otherwise: bb8];
|
|
}
|
|
|
|
- bb11: {
|
|
+ bb8: {
|
|
StorageDead(_10);
|
|
StorageDead(_9);
|
|
- FakeRead(ForMatchGuard, _3);
|
|
- FakeRead(ForMatchGuard, _4);
|
|
- FakeRead(ForGuardBinding, _6);
|
|
- FakeRead(ForGuardBinding, _8);
|
|
StorageLive(_5);
|
|
_5 = (_2.1: bool);
|
|
StorageLive(_7);
|
|
_7 = move (_2.2: std::string::String);
|
|
- goto -> bb7;
|
|
+ goto -> bb4;
|
|
}
|
|
|
|
- bb12: {
|
|
+ bb9: {
|
|
StorageDead(_10);
|
|
StorageDead(_9);
|
|
StorageDead(_8);
|
|
StorageDead(_6);
|
|
- falseEdge -> [real: bb1, imaginary: bb5];
|
|
+ goto -> bb1;
|
|
}
|
|
|
|
- bb13: {
|
|
+ bb10: {
|
|
StorageLive(_6);
|
|
_6 = &(_2.0: bool);
|
|
StorageLive(_8);
|
|
_8 = &(_2.2: std::string::String);
|
|
- _3 = &fake (_2.0: bool);
|
|
- _4 = &fake (_2.1: bool);
|
|
StorageLive(_12);
|
|
StorageLive(_13);
|
|
_13 = _1;
|
|
- switchInt(move _13) -> [0: bb15, otherwise: bb14];
|
|
+ switchInt(move _13) -> [0: bb12, otherwise: bb11];
|
|
}
|
|
|
|
- bb14: {
|
|
+ bb11: {
|
|
_0 = const 3_i32;
|
|
StorageDead(_13);
|
|
StorageDead(_12);
|
|
- goto -> bb23;
|
|
+ goto -> bb20;
|
|
}
|
|
|
|
- bb15: {
|
|
+ bb12: {
|
|
_12 = (*_6);
|
|
- switchInt(move _12) -> [0: bb17, otherwise: bb16];
|
|
+ switchInt(move _12) -> [0: bb14, otherwise: bb13];
|
|
}
|
|
|
|
- bb16: {
|
|
+ bb13: {
|
|
StorageDead(_13);
|
|
StorageDead(_12);
|
|
- FakeRead(ForMatchGuard, _3);
|
|
- FakeRead(ForMatchGuard, _4);
|
|
- FakeRead(ForGuardBinding, _6);
|
|
- FakeRead(ForGuardBinding, _8);
|
|
StorageLive(_5);
|
|
_5 = (_2.0: bool);
|
|
StorageLive(_7);
|
|
_7 = move (_2.2: std::string::String);
|
|
- goto -> bb7;
|
|
+ goto -> bb4;
|
|
}
|
|
|
|
- bb17: {
|
|
+ bb14: {
|
|
StorageDead(_13);
|
|
StorageDead(_12);
|
|
StorageDead(_8);
|
|
StorageDead(_6);
|
|
- falseEdge -> [real: bb2, imaginary: bb3];
|
|
+ goto -> bb2;
|
|
}
|
|
|
|
- bb18: {
|
|
+ bb15: {
|
|
StorageDead(_7);
|
|
StorageDead(_5);
|
|
StorageDead(_8);
|
|
StorageDead(_6);
|
|
- goto -> bb22;
|
|
+ goto -> bb19;
|
|
}
|
|
|
|
- bb19: {
|
|
+ bb16: {
|
|
_0 = const 2_i32;
|
|
- drop(_16) -> [return: bb21, unwind: bb25];
|
|
+ drop(_16) -> [return: bb18, unwind: bb22];
|
|
}
|
|
|
|
- bb20: {
|
|
+ bb17: {
|
|
StorageLive(_15);
|
|
_15 = (_2.1: bool);
|
|
StorageLive(_16);
|
|
_16 = move (_2.2: std::string::String);
|
|
- goto -> bb19;
|
|
+ goto -> bb16;
|
|
}
|
|
|
|
- bb21: {
|
|
+ bb18: {
|
|
StorageDead(_16);
|
|
StorageDead(_15);
|
|
- goto -> bb22;
|
|
+ goto -> bb19;
|
|
}
|
|
|
|
- bb22: {
|
|
- drop(_2) -> [return: bb24, unwind: bb26];
|
|
+ bb19: {
|
|
+ goto -> bb26;
|
|
}
|
|
|
|
- bb23: {
|
|
+ bb20: {
|
|
StorageDead(_8);
|
|
StorageDead(_6);
|
|
- drop(_2) -> [return: bb24, unwind: bb26];
|
|
+ drop(_2) -> [return: bb21, unwind: bb23];
|
|
}
|
|
|
|
- bb24: {
|
|
+ bb21: {
|
|
return;
|
|
}
|
|
|
|
- bb25 (cleanup): {
|
|
- drop(_2) -> [return: bb26, unwind terminate(cleanup)];
|
|
+ bb22 (cleanup): {
|
|
+ goto -> bb27;
|
|
}
|
|
|
|
- bb26 (cleanup): {
|
|
+ bb23 (cleanup): {
|
|
resume;
|
|
+ }
|
|
+
|
|
+ bb24: {
|
|
+ goto -> bb21;
|
|
+ }
|
|
+
|
|
+ bb25 (cleanup): {
|
|
+ goto -> bb23;
|
|
+ }
|
|
+
|
|
+ bb26: {
|
|
+ goto -> bb24;
|
|
+ }
|
|
+
|
|
+ bb27 (cleanup): {
|
|
+ goto -> bb23;
|
|
}
|
|
}
|
|
|