1
Fork 0

Consistently merge simplifiable or-patterns

This commit is contained in:
Nadrieril 2024-03-05 21:52:40 +01:00
parent 08d7379961
commit d1d9aa3108
2 changed files with 13 additions and 20 deletions

View file

@ -1293,8 +1293,7 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
// At least one of the candidates has been split into subcandidates. // At least one of the candidates has been split into subcandidates.
// We need to change the candidate list to include those. // We need to change the candidate list to include those.
let mut new_candidates = Vec::new(); let mut new_candidates = Vec::new();
for candidate in candidates.iter_mut() {
for candidate in candidates {
candidate.visit_leaves(|leaf_candidate| new_candidates.push(leaf_candidate)); candidate.visit_leaves(|leaf_candidate| new_candidates.push(leaf_candidate));
} }
self.match_simplified_candidates( self.match_simplified_candidates(
@ -1304,6 +1303,10 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
otherwise_block, otherwise_block,
&mut *new_candidates, &mut *new_candidates,
); );
for candidate in candidates {
self.merge_trivial_subcandidates(candidate);
}
} else { } else {
self.match_simplified_candidates( self.match_simplified_candidates(
span, span,

View file

@ -26,18 +26,20 @@
_3 = _1; _3 = _1;
_2 = move _3 as [u32; 4] (Transmute); _2 = move _3 as [u32; 4] (Transmute);
StorageDead(_3); StorageDead(_3);
switchInt(_2[0 of 4]) -> [0: bb1, otherwise: bb6]; switchInt(_2[0 of 4]) -> [0: bb1, otherwise: bb4];
} }
bb1: { bb1: {
switchInt(_2[1 of 4]) -> [0: bb2, otherwise: bb6]; switchInt(_2[1 of 4]) -> [0: bb2, otherwise: bb4];
} }
bb2: { bb2: {
switchInt(_2[2 of 4]) -> [0: bb4, 4294901760: bb5, otherwise: bb6]; switchInt(_2[2 of 4]) -> [0: bb3, 4294901760: bb3, otherwise: bb4];
} }
bb3: { bb3: {
StorageLive(_4);
_4 = _2[3 of 4];
StorageLive(_5); StorageLive(_5);
StorageLive(_6); StorageLive(_6);
_6 = _4; _6 = _4;
@ -46,27 +48,15 @@
_0 = Option::<[u8; 4]>::Some(move _5); _0 = Option::<[u8; 4]>::Some(move _5);
StorageDead(_5); StorageDead(_5);
StorageDead(_4); StorageDead(_4);
goto -> bb7; goto -> bb5;
} }
bb4: { bb4: {
StorageLive(_4); _0 = Option::<[u8; 4]>::None;
_4 = _2[3 of 4]; goto -> bb5;
goto -> bb3;
} }
bb5: { bb5: {
StorageLive(_4);
_4 = _2[3 of 4];
goto -> bb3;
}
bb6: {
_0 = Option::<[u8; 4]>::None;
goto -> bb7;
}
bb7: {
StorageDead(_2); StorageDead(_2);
return; return;
} }