-
Notifications
You must be signed in to change notification settings - Fork 13.8k
dump_mir
cleanups
#145421
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
dump_mir
cleanups
#145421
Conversation
2d72f18
to
ac16ad5
Compare
Some changes occurred in compiler/rustc_codegen_cranelift cc @bjorn3 Some changes occurred to MIR optimizations cc @rust-lang/wg-mir-opt |
It's been almost two weeks, let's try a different reviewer. r? @davidtwco |
@bors r+ rollup Apologies for the delay in getting to this |
…avidtwco `dump_mir` cleanups I found this code hard to read, so I cleaned it up. Details in individual commits. r? `@davidtwco`
…avidtwco `dump_mir` cleanups I found this code hard to read, so I cleaned it up. Details in individual commits. r? ``@davidtwco``
@bors r- Seems to have bitrotted against 7b13a50, #146020 (comment) |
It has a single call site.
The code is more readable without it.
The dynamic dispatch cost doesn't matter for MIR dumping, which is perf-insensitive. And it's necessary for the next commit, which will store some `extra_data` closures in a struct.
This commit exists purely to simplify reviewing: these functions will become methods in the next commit. This commit indents them so that the next commit is more readable.
MIR dumping is a mess. There are lots of functions and entry points, e.g. `dump_mir`, `dump_mir_with_options`, `dump_polonius_mir`, `dump_mir_to_writer`. Also, it's crucial that `create_dump_file` is never called without `dump_enabled` first being checked, but there is no mechanism for ensuring this and it's hard to tell if it is satisfied on all paths. (`dump_enabled` is checked twice on some paths, however!) This commit introduces `MirWriter`, which controls the MIR writing, and encapsulates the `extra_data` closure and `options`. Two existing functions are now methods of this type. It sets reasonable defaults, allowing the removal of many `|_, _| Ok(())` closures. The commit also introduces `MirDumper`, which is layered on top of `MirWriter`, and which manages the creation of the dump files, encapsulating pass names, disambiguators, etc. Four existing functions are now methods of this type. - `MirDumper::new` will only succeed if dumps are enabled, and will return `None` otherwise, which makes it impossible to dump when you shouldn't. - It also sets reasonable defaults for various things like disambiguators, which means you no longer need to specify them in many cases. When they do need to be specified, it's now done via setter methods. - It avoids some repetition. E.g. `dump_nll_mir` previously specifed the pass name `"nll"` four times and the disambiguator `&0` three times; now it specifies them just once, to put them in the `MirDumper`. - For Polonius, the `extra_data` closure can now be specified earlier, which avoids having to pass some arguments through some functions.
ac16ad5
to
5ce3797
Compare
This PR was rebased onto a different master commit. Here's a range-diff highlighting what actually changed. Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers. |
Fixed. @bors r=davidtwco |
…avidtwco `dump_mir` cleanups I found this code hard to read, so I cleaned it up. Details in individual commits. r? `@davidtwco`
Rollup of 6 pull requests Successful merges: - #145421 (`dump_mir` cleanups) - #145968 (Add `Bound::copied`) - #146004 (resolve: Refactor `struct ExternPreludeEntry`) - #146042 (Detect negative literal inferred to unsigned integer) - #146046 (Suggest method name with maybe ty mismatch) - #146051 (Change std f32 test to pass under Miri) r? `@ghost` `@rustbot` modify labels: rollup
Rollup merge of #145421 - nnethercote:dump_mir-cleanups, r=davidtwco `dump_mir` cleanups I found this code hard to read, so I cleaned it up. Details in individual commits. r? ``@davidtwco``
I found this code hard to read, so I cleaned it up. Details in individual commits.
r? @davidtwco