pub trait MirPass<'tcx> {
    fn run_pass(&self, tcx: TyCtxt<'tcx>, body: &mut Body<'tcx>);

    fn name(&self) -> Cow<'_, str> { ... }
    fn is_enabled(&self, _sess: &Session) -> bool { ... }
    fn phase_change(&self) -> Option<MirPhase> { ... }
    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

Provided Methods

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

If this pass causes the MIR to enter a new phase, return that phase.

Implementors

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

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

impl<'tcx> MirPass<'tcx> for SanityCheck

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

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

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

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

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

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

impl<'tcx> MirPass<'tcx> for ConstDebugInfo

impl<'tcx> MirPass<'tcx> for ConstGoto

impl<'tcx> MirPass<'tcx> for ConstProp

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

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

impl<'tcx> MirPass<'tcx> for Deaggregator

impl<'tcx> MirPass<'tcx> for DeduplicateBlocks

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

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

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

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

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

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

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

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

impl<'tcx> MirPass<'tcx> for InstCombine

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

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

impl<'tcx> MirPass<'tcx> for PhaseChange

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

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

impl<'tcx> MirPass<'tcx> for NormalizeArrayLen

impl<'tcx> MirPass<'tcx> for RenameReturnPlace

impl<'tcx> MirPass<'tcx> for RemoveFalseEdges

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

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

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

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

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

impl<'tcx> MirPass<'tcx> for RevealAll

impl<'tcx> MirPass<'tcx> for SeparateConstSwitch

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

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

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

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

impl<'tcx> MirPass<'tcx> for SimplifyArmIdentity

impl<'tcx> MirPass<'tcx> for SimplifyBranchSame

impl<'tcx> MirPass<'tcx> for UninhabitedEnumBranching