Description
The rustc_mir::transform
module defines the pipeline of analysis passes and transformations that run on the MIR after it is lowered but before it is passed to codegen. However, it's not always clear whether certain invariants apply to each stage of the pipeline. For example, some terminators (FalseEdges
, DropAndReplace
) are removed entirely and do not appear beyond a certain point and the Return
terminator, which initially appears only once in the entire MIR body may appear multiple times after the generator
transform.
Additionally, it can be hard to find the right place for new error-emitting passes like the lint in #72270 or #71824. Is there a point at which the MIR is no longer meant for analysis but only for codegen? Should these be part of a specific query? Finally, the names of the mir_*
queries have lost their meaning over time: mir_const
can probably be removed entirely, and optimized_mir
and promoted_mir
should probably be renamed to mir_optimized
and mir_promoted_fragments_optimized
respectively.
I've listed quite a few issues above, but to resolve them I think we first need to figure out who the stakeholders are. Is there anyone who "owns" the current structure and has a clear idea of how things should look?