Reorder early post-inlining passes.

This commit is contained in:
Camille GILLOT 2024-01-07 00:30:08 +00:00
parent b8c207435c
commit a8c4d43cb1
9 changed files with 27 additions and 44 deletions

View File

@ -565,17 +565,28 @@ fn run_optimization_passes<'tcx>(tcx: TyCtxt<'tcx>, body: &mut Body<'tcx>) {
body, body,
&[ &[
&check_alignment::CheckAlignment, &check_alignment::CheckAlignment,
&lower_slice_len::LowerSliceLenCalls, // has to be done before inlining, otherwise actual call will be almost always inlined. Also simple, so can just do first // Before inlining: trim down MIR with passes to reduce inlining work.
// Has to be done before inlining, otherwise actual call will be almost always inlined.
// Also simple, so can just do first
&lower_slice_len::LowerSliceLenCalls,
// Perform inlining, which may add a lot of code.
&inline::Inline, &inline::Inline,
// Substitutions during inlining may introduce switch on enums with uninhabited branches. // Code from other crates may have storage markers, so this needs to happen after inlining.
&remove_storage_markers::RemoveStorageMarkers,
// Inlining and substitution may introduce ZST and useless drops.
&remove_zsts::RemoveZsts,
&remove_unneeded_drops::RemoveUnneededDrops,
// Type substitution may create uninhabited enums.
&uninhabited_enum_branching::UninhabitedEnumBranching, &uninhabited_enum_branching::UninhabitedEnumBranching,
&unreachable_prop::UnreachablePropagation, &unreachable_prop::UnreachablePropagation,
&o1(simplify::SimplifyCfg::AfterUninhabitedEnumBranching), &o1(simplify::SimplifyCfg::AfterUninhabitedEnumBranching),
&remove_storage_markers::RemoveStorageMarkers, // Inlining may have introduced a lot of redundant code and a large move pattern.
&remove_zsts::RemoveZsts, // Now, we need to shrink the generated MIR.
&normalize_array_len::NormalizeArrayLen, // has to run after `slice::len` lowering
// Has to run after `slice::len` lowering
&normalize_array_len::NormalizeArrayLen,
&const_goto::ConstGoto, &const_goto::ConstGoto,
&remove_unneeded_drops::RemoveUnneededDrops,
&ref_prop::ReferencePropagation, &ref_prop::ReferencePropagation,
&sroa::ScalarReplacementOfAggregates, &sroa::ScalarReplacementOfAggregates,
&match_branches::MatchBranchSimplification, &match_branches::MatchBranchSimplification,

View File

@ -61,7 +61,6 @@
+ StorageDead(_10); + StorageDead(_10);
+ StorageDead(_11); + StorageDead(_11);
+ nop; + nop;
nop;
StorageDead(_8); StorageDead(_8);
StorageDead(_3); StorageDead(_3);
StorageDead(_1); StorageDead(_1);

View File

@ -61,7 +61,6 @@
+ StorageDead(_10); + StorageDead(_10);
+ StorageDead(_11); + StorageDead(_11);
+ nop; + nop;
nop;
StorageDead(_8); StorageDead(_8);
StorageDead(_3); StorageDead(_3);
StorageDead(_1); StorageDead(_1);

View File

@ -61,7 +61,6 @@
+ StorageDead(_10); + StorageDead(_10);
+ StorageDead(_11); + StorageDead(_11);
+ nop; + nop;
nop;
StorageDead(_8); StorageDead(_8);
StorageDead(_3); StorageDead(_3);
StorageDead(_1); StorageDead(_1);

View File

@ -61,7 +61,6 @@
+ StorageDead(_10); + StorageDead(_10);
+ StorageDead(_11); + StorageDead(_11);
+ nop; + nop;
nop;
StorageDead(_8); StorageDead(_8);
StorageDead(_3); StorageDead(_3);
StorageDead(_1); StorageDead(_1);

View File

@ -6,8 +6,8 @@
let _1: (); let _1: ();
bb0: { bb0: {
- switchInt(const false) -> [0: bb3, otherwise: bb1]; - switchInt(const false) -> [0: bb2, otherwise: bb1];
+ goto -> bb3; + goto -> bb2;
} }
bb1: { bb1: {
@ -15,14 +15,6 @@
} }
bb2: { bb2: {
goto -> bb4;
}
bb3: {
goto -> bb4;
}
bb4: {
return; return;
} }
} }

View File

@ -6,8 +6,8 @@
let _1: (); let _1: ();
bb0: { bb0: {
- switchInt(const false) -> [0: bb3, otherwise: bb1]; - switchInt(const false) -> [0: bb2, otherwise: bb1];
+ goto -> bb3; + goto -> bb2;
} }
bb1: { bb1: {
@ -15,14 +15,6 @@
} }
bb2: { bb2: {
goto -> bb4;
}
bb3: {
goto -> bb4;
}
bb4: {
return; return;
} }
} }

View File

@ -11,19 +11,15 @@
bb0: { bb0: {
_2 = const false; _2 = const false;
- switchInt(_2) -> [0: bb1, otherwise: bb2]; - switchInt(_2) -> [0: bb2, otherwise: bb1];
+ switchInt(const false) -> [0: bb1, otherwise: bb2]; + switchInt(const false) -> [0: bb2, otherwise: bb1];
} }
bb1: { bb1: {
goto -> bb3; _0 = noop() -> [return: bb2, unwind unreachable];
} }
bb2: { bb2: {
_0 = noop() -> [return: bb3, unwind unreachable];
}
bb3: {
return; return;
} }
} }

View File

@ -11,19 +11,15 @@
bb0: { bb0: {
_2 = const false; _2 = const false;
- switchInt(_2) -> [0: bb1, otherwise: bb2]; - switchInt(_2) -> [0: bb2, otherwise: bb1];
+ switchInt(const false) -> [0: bb1, otherwise: bb2]; + switchInt(const false) -> [0: bb2, otherwise: bb1];
} }
bb1: { bb1: {
goto -> bb3; _0 = noop() -> [return: bb2, unwind continue];
} }
bb2: { bb2: {
_0 = noop() -> [return: bb3, unwind continue];
}
bb3: {
return; return;
} }
} }