-
Notifications
You must be signed in to change notification settings - Fork 12.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Clarify stages of MIR pipeline, and make MIR lints consistent #72515
Comments
Ah I didn't know this; this should also be reflected in the docs for |
I don't think I understand what this name means. What would be the doc comment that goes with it? |
|
Why does it need to be a separate query? |
multiple Return terminators are possible @ecstatic-morse mentioned in rust-lang#72515 that multiple `Return` terminators are possible. Update the docs accordingly. Cc @rust-lang/wg-mir-opt
@oli-obk added infrastructure to MIR validation to distinguish different "stages". But we still do not have a clear place to put MIR lints, and we currently do this inconsistently. #72270 added a "MIR transform" that is just a lint; there is a |
Also Cc @rust-lang/wg-mir-opt for the stakeholders and code owner questions in the OP. |
Is this solved by #91475? |
I don't think so. We still have mir_const, mir_promoted, mir_for_ctfe, mir_drops_elaborated_and_const_checked, run_optimization_passes. For lints, the situation seems to have improved -- we now have MirLint, that can be turned into passes. On the other hand, there also still is some mention of lints during MIR building, and check_unsafety is its own special thing and not a MIR pass. |
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 theReturn
terminator, which initially appears only once in the entire MIR body may appear multiple times after thegenerator
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, andoptimized_mir
andpromoted_mir
should probably be renamed tomir_optimized
andmir_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?
The text was updated successfully, but these errors were encountered: