This pass adds validation calls (AcquireValid, ReleaseValid) where appropriate. It has to be run really early, before transformations like inlining, because introducing these calls adds UB -- so, conceptually, this pass is actually part of MIR building, and only after this pass we think of the program has having the normal MIR semantics.
Check the bodies of
This module provides a pass to replacing the following statements with
Propagates constants for early reporting of statically known assertion failures
Trivial copy propagation pass.
This pass just dumps MIR at a specified point.
This is the implementation of the pass which transforms generators into state machines.
Inlining pass for MIR functions
Performs various peephole optimizations.
This pass removes the unwind branch of all the terminators when the no-landing-pads option is specified.
A pass that promotes borrows of constant rvalues.
A number of passes which remove various redundancies in the CFG.
A pass that simplifies branches when their condition is known.
The general point of the optimizations provided here is to simplify something like:
A pass that eliminates branches on uninhabited enum variants.
A pass that propagates the unreachable terminator of a block to its predecessors when all of their successors are unreachable. This is achieved through a post-order traversal of the blocks.
Validates the MIR to ensure that invariants are upheld.
Where a specific
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
Generates a default name for the pass based on the name of the
Make MIR ready for const evaluation. This is run on all MIR, not just on consts!
Finds the full set of
After this series of passes, no lifetime analysis based on borrowing can be done.