mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-25 16:24:46 +00:00
Reorder early post-inlining passes.
This commit is contained in:
parent
b8c207435c
commit
a8c4d43cb1
@ -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,
|
||||||
|
@ -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);
|
||||||
|
@ -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);
|
||||||
|
@ -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);
|
||||||
|
@ -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);
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user