-
Notifications
You must be signed in to change notification settings - Fork 13.5k
Update MaybeUninitializedPlaces
and MaybeInitializedPlaces
for otherwise
#142707
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
base: master
Are you sure you want to change the base?
Conversation
rustbot has assigned @petrochenkov. Use |
This comment has been minimized.
This comment has been minimized.
r? compiler |
hm. |
This comment has been minimized.
This comment has been minimized.
Update `MaybeUninitializedPlaces` and `MaybeInitializedPlaces` for `otherwise` <!-- homu-ignore:start --> <!-- If this PR is related to an unstable feature or an otherwise tracked effort, please link to the relevant tracking issue here. If you don't know of a related tracking issue or there are none, feel free to ignore this. This PR will get automatically assigned to a reviewer. In case you would like a specific user to review your work, you can assign it to them by using r? <reviewer name> --> <!-- homu-ignore:end --> This allows `ElaborateDrops` to remove drops when a `match` wildcard arm covers multiple no-Drop enum variants. It modifies dataflow analysis to update the `MaybeUninitializedPlaces` and `MaybeInitializedPlaces` data for a block reached through an `otherwise` edge. This appears to fix #142705, but I don't know for sure if it's actually correct (are there cases where this would be wrong and break things?). I also haven't tested that it actually improves compile times, or machine code output outside of the examples in the issue.
This comment has been minimized.
This comment has been minimized.
8d837ad
to
10e1a9d
Compare
Finished benchmarking commit (e3d7e41): comparison URL. Overall result: ❌✅ regressions and improvements - please read the text belowBenchmarking this pull request means it may be perf-sensitive – we'll automatically label it not fit for rolling up. You can override this, but we strongly advise not to, due to possible changes in compiler perf. Next Steps: If you can justify the regressions found in this try perf run, please do so in sufficient writing along with @bors rollup=never Instruction countOur most reliable metric. Used to determine the overall result above. However, even this metric can be noisy.
Max RSS (memory usage)Results (primary -0.2%, secondary 2.8%)A less reliable metric. May be of interest, but not used to determine the overall result above.
CyclesResults (primary 0.9%, secondary -5.0%)A less reliable metric. May be of interest, but not used to determine the overall result above.
Binary sizeResults (primary -0.1%, secondary -0.1%)A less reliable metric. May be of interest, but not used to determine the overall result above.
Bootstrap: 691.904s -> 692.572s (0.10%) |
Hmm that's unfortunate. It might help to avoid paying the cost of the extra clone and checks when it won't make a difference, like in the trivial What's more concerning is runtime benchmarks being worse. There are only two, and I don't know how noisy they are, but 8% wall time increase for css-parse-fb is pretty bad. There are also some compile time benchmarks whose graphs show significant increases in wall time spent in LLVM. Does this just not play well with later optimizations? |
Some changes occurred to MIR optimizations cc @rust-lang/wg-mir-opt |
The last commit makes it so that there's an option in the |
the runtime benchmarks are unfortunately very noisy |
move_data: &MoveData<'tcx>, | ||
enum_place: mir::Place<'tcx>, | ||
active_variant: VariantIdx, | ||
mut handle_inactive_variant: impl FnMut(MovePathIndex), | ||
mut handle_active_variant: Option<impl FnMut(MovePathIndex)>, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I wonder if it will be better, perf-wise to make this not take an option but just use a no-op for callers that do not want to handle it.
this part of MIR is a little above my level of confidence for review, so r? compiler |
This allows
ElaborateDrops
to remove drops when amatch
wildcard arm covers multiple no-Drop enum variants. It modifies dataflow analysis to update theMaybeUninitializedPlaces
andMaybeInitializedPlaces
data for a block reached through anotherwise
edge.This appears to fix #142705, but I don't know for sure if it's actually correct (are there cases where this would be wrong and break things?). I also haven't tested that it actually improves compile times, or machine code output outside of the examples in the issue.