MirPass

Trait MirPass 

Source
pub(crate) trait MirPass<'tcx> {
    // Required methods
    fn run_pass(&self, tcx: TyCtxt<'tcx>, body: &mut Body<'tcx>);
    fn is_required(&self) -> bool;

    // Provided methods
    fn name(&self) -> &'static str { ... }
    fn profiler_name(&self) -> &'static str { ... }
    fn is_enabled(&self, _sess: &Session) -> bool { ... }
    fn can_be_overridden(&self) -> bool { ... }
    fn is_mir_dump_enabled(&self) -> bool { ... }
}
Expand description

A streamlined trait that you can implement to create a pass; the pass will be named after the type, and it will consist of a main loop that goes over each available MIR and applies run_pass.

Required Methods§

Source

fn run_pass(&self, tcx: TyCtxt<'tcx>, body: &mut Body<'tcx>)

Source

fn is_required(&self) -> bool

Returns true if this pass must be run (i.e. it is required for soundness). For passes which are strictly optimizations, this should return false. If this is false, #[optimize(none)] will disable the pass.

Provided Methods§

Source

fn name(&self) -> &'static str

Source

fn profiler_name(&self) -> &'static str

Source

fn is_enabled(&self, _sess: &Session) -> bool

Returns true if this pass is enabled with the current combination of compiler flags.

Source

fn can_be_overridden(&self) -> bool

Returns true if this pass can be overridden by -Zenable-mir-passes. This should be true for basically every pass other than those that are necessary for correctness.

Source

fn is_mir_dump_enabled(&self) -> bool

Implementors§

Source§

impl MirPass<'_> for UnreachablePropagation

Source§

impl<'tcx> MirPass<'tcx> for AddCallGuards

Source§

impl<'tcx> MirPass<'tcx> for DeadStoreElimination

Source§

impl<'tcx> MirPass<'tcx> for InstSimplify

Source§

impl<'tcx> MirPass<'tcx> for SimplifyCfg

Source§

impl<'tcx> MirPass<'tcx> for SimplifyLocals

Source§

impl<'tcx> MirPass<'tcx> for SimplifyConstCondition

A pass that replaces a branch with a goto when its condition is known.

Source§

impl<'tcx> MirPass<'tcx> for AbortUnwindingCalls

Source§

impl<'tcx> MirPass<'tcx> for AddMovesForPackedDrops

Source§

impl<'tcx> MirPass<'tcx> for AddRetag

Source§

impl<'tcx> MirPass<'tcx> for Subtyper

Source§

impl<'tcx> MirPass<'tcx> for CheckAlignment

Source§

impl<'tcx> MirPass<'tcx> for CheckEnums

Source§

impl<'tcx> MirPass<'tcx> for CheckNull

Source§

impl<'tcx> MirPass<'tcx> for CleanupPostBorrowck

Source§

impl<'tcx> MirPass<'tcx> for CopyProp

Source§

impl<'tcx> MirPass<'tcx> for StateTransform

Source§

impl<'tcx> MirPass<'tcx> for InstrumentCoverage

Source§

impl<'tcx> MirPass<'tcx> for CtfeLimit

Source§

impl<'tcx> MirPass<'tcx> for DataflowConstProp

Source§

impl<'tcx> MirPass<'tcx> for Derefer

Source§

impl<'tcx> MirPass<'tcx> for DestinationPropagation

Source§

impl<'tcx> MirPass<'tcx> for Marker

Source§

impl<'tcx> MirPass<'tcx> for EarlyOtherwiseBranch

Source§

impl<'tcx> MirPass<'tcx> for ElaborateBoxDerefs

Source§

impl<'tcx> MirPass<'tcx> for ElaborateDrops

Source§

impl<'tcx> MirPass<'tcx> for EraseDerefTemps

Source§

impl<'tcx> MirPass<'tcx> for GVN

Source§

impl<'tcx> MirPass<'tcx> for ImpossiblePredicates

Source§

impl<'tcx> MirPass<'tcx> for ForceInline

Source§

impl<'tcx> MirPass<'tcx> for Inline

Source§

impl<'tcx> MirPass<'tcx> for JumpThreading

Source§

impl<'tcx> MirPass<'tcx> for EnumSizeOpt

Source§

impl<'tcx> MirPass<'tcx> for LowerIntrinsics

Source§

impl<'tcx> MirPass<'tcx> for LowerSliceLenCalls

Source§

impl<'tcx> MirPass<'tcx> for MatchBranchSimplification

Source§

impl<'tcx> MirPass<'tcx> for MentionedItems

Source§

impl<'tcx> MirPass<'tcx> for MultipleReturnTerminators

Source§

impl<'tcx> MirPass<'tcx> for PostAnalysisNormalize

Source§

impl<'tcx> MirPass<'tcx> for ReorderBasicBlocks

Source§

impl<'tcx> MirPass<'tcx> for ReorderLocals

Source§

impl<'tcx> MirPass<'tcx> for PromoteTemps<'tcx>

Source§

impl<'tcx> MirPass<'tcx> for ReferencePropagation

Source§

impl<'tcx> MirPass<'tcx> for RemoveNoopLandingPads

Source§

impl<'tcx> MirPass<'tcx> for RemovePlaceMention

Source§

impl<'tcx> MirPass<'tcx> for RemoveStorageMarkers

Source§

impl<'tcx> MirPass<'tcx> for RemoveUninitDrops

Source§

impl<'tcx> MirPass<'tcx> for RemoveUnneededDrops

Source§

impl<'tcx> MirPass<'tcx> for RemoveZsts

Source§

impl<'tcx> MirPass<'tcx> for SimplifyComparisonIntegral

Source§

impl<'tcx> MirPass<'tcx> for SingleUseConsts

Source§

impl<'tcx> MirPass<'tcx> for ScalarReplacementOfAggregates

Source§

impl<'tcx> MirPass<'tcx> for StripDebugInfo

Source§

impl<'tcx> MirPass<'tcx> for UnreachableEnumBranching

Source§

impl<'tcx> MirPass<'tcx> for Validator

Source§

impl<'tcx, T> MirPass<'tcx> for Lint<T>
where T: MirLint<'tcx>,

Source§

impl<'tcx, T> MirPass<'tcx> for WithMinOptLevel<T>
where T: MirPass<'tcx>,