-
Notifications
You must be signed in to change notification settings - Fork 13.9k
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?