Uh oh!
There was an error while loading. Please reload this page.
Prepare MutVisitors to handle interned projections - #65197
Conversation
rust-highfive
commented
Oct 8, 2019
r? @estebank (rust_highfive has picked a reviewer for you, use r? to override) |
Centril
commented
Oct 8, 2019
r? @oli-obk |
oli-obk
left a comment
There was a problem hiding this comment.
I think we should try to reuse the existing visit_local more instead of duplicating its logic (even if the code is super tiny). You could always clone the elem and mutate it by calling self.visit_local. Or create a LocalMutVisitor trait that internally uses MutVisitor and does the vec->mutate->collect->into_boxed_slice dance
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
ec5e77f to
021a77bComparerust-highfive
commented
Oct 8, 2019
The job Click to expand the log.I'm a bot! I can only do what humans tell me to, so if this was not helpful or you have suggestions for improvements, please ping or otherwise contact |
6b9316b to
04e491aCompareUh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
04e491a to
cdf33d9Comparespastorino
commented
Oct 11, 2019
@oli-obk@nikomatsakis I've fixed the things we have discussed and I've decided to split this PR in the let's not mutate projection and the interning part so we can make progress. I don't see a reason why this would regress performance, anyway just asking bots to run perf on this PR. So the main discussion is if we want this macro or something like the following design proposed by @nikomatsakis ... traitPlaceVisitor:MirVisitor{// no MutVisitor equivalentfnvisit_projection(...);}impl<'tcx>MirVisitor<'tcx>forPromoter<'_,'tcx>{delegate_super_place!(self);// macro creates:fnsuper_place(self){for each projection{ self.visit_projection(...);}}}impl<'a,'tcx>PlaceVisitor<'tcx>forPromoter<'a,'tcx>{}If I remember correctly Niko said that this was going to be worser than my solution but I don't remember why. @bors try @rust-timer queue |
rust-timer
commented
Oct 11, 2019
Awaiting bors try build completion |
bors
commented
Oct 11, 2019
Prepare `MutVisitor`s to handle interned projections The following are all the files where mir's `MutVisitor` is implemented. The `-` there stands for no changes, `visit_place` wasn't making any change on `Place`s. `x` stands for this file was changed to make `visit_place` do whatever it was doing with the base but avoid modifying the projection, instead just create a new one and assign to it. ``` [-] src/librustc_mir/transform/no_landing_pads.rs [x] src/librustc_mir/transform/promote_consts.rs [x] src/librustc_mir/transform/generator.rs [x] src/librustc_mir/transform/erase_regions.rs [-] src/librustc_mir/transform/instcombine.rs [x] src/librustc_mir/transform/inline.rs [x] src/librustc_mir/transform/simplify.rs [x] src/librustc_mir/util/def_use.rs [-] src/librustc_mir/transform/const_prop.rs [-] src/librustc_mir/transform/cleanup_post_borrowck.rs [x] src/librustc_mir/borrow_check/nll/renumber.rs [-] src/librustc_mir/transform/copy_prop.rs ``` There is some code repetition, just created the PR so we can start discussing it. /cc @oli-obk@nikomatsakis
bors
commented
Oct 11, 2019
☀️ Try build successful - checks-azure |
rust-timer
commented
Oct 11, 2019
Queued dc67089 with parent d4f7f97, future comparison URL. |
rust-timer
commented
Oct 12, 2019
Finished benchmarking try commit dc67089, comparison URL. |
Centril
commented
Oct 12, 2019
Perf seems like noise |
spastorino
commented
Oct 12, 2019
Yeap, this is a step before interning where perf I guess there should be some perf wins. So this is ready to merge re-review and merge. |
Uh oh!
There was an error while loading. Please reload this page.
b766eb2 to
ae806f9Compareae806f9 to
4834996Compareoli-obk
commented
Oct 18, 2019
@bors r+ |
bors
commented
Oct 18, 2019
📌 Commit 4834996 has been approved by |
…s2, r=oli-obk Prepare `MutVisitor`s to handle interned projections The following are all the files where mir's `MutVisitor` is implemented. The `-` there stands for no changes, `visit_place` wasn't making any change on `Place`s. `x` stands for this file was changed to make `visit_place` do whatever it was doing with the base but avoid modifying the projection, instead just create a new one and assign to it. ``` [-] src/librustc_mir/transform/no_landing_pads.rs [x] src/librustc_mir/transform/promote_consts.rs [x] src/librustc_mir/transform/generator.rs [x] src/librustc_mir/transform/erase_regions.rs [-] src/librustc_mir/transform/instcombine.rs [x] src/librustc_mir/transform/inline.rs [x] src/librustc_mir/transform/simplify.rs [x] src/librustc_mir/util/def_use.rs [-] src/librustc_mir/transform/const_prop.rs [-] src/librustc_mir/transform/cleanup_post_borrowck.rs [x] src/librustc_mir/borrow_check/nll/renumber.rs [-] src/librustc_mir/transform/copy_prop.rs ``` There is some code repetition, just created the PR so we can start discussing it. /cc @oli-obk@nikomatsakis
…s2, r=oli-obk Prepare `MutVisitor`s to handle interned projections The following are all the files where mir's `MutVisitor` is implemented. The `-` there stands for no changes, `visit_place` wasn't making any change on `Place`s. `x` stands for this file was changed to make `visit_place` do whatever it was doing with the base but avoid modifying the projection, instead just create a new one and assign to it. ``` [-] src/librustc_mir/transform/no_landing_pads.rs [x] src/librustc_mir/transform/promote_consts.rs [x] src/librustc_mir/transform/generator.rs [x] src/librustc_mir/transform/erase_regions.rs [-] src/librustc_mir/transform/instcombine.rs [x] src/librustc_mir/transform/inline.rs [x] src/librustc_mir/transform/simplify.rs [x] src/librustc_mir/util/def_use.rs [-] src/librustc_mir/transform/const_prop.rs [-] src/librustc_mir/transform/cleanup_post_borrowck.rs [x] src/librustc_mir/borrow_check/nll/renumber.rs [-] src/librustc_mir/transform/copy_prop.rs ``` There is some code repetition, just created the PR so we can start discussing it. /cc @oli-obk@nikomatsakis
Rollup of 17 pull requests Successful merges: - #65016 (Always inline `mem::{size_of,align_of}` in debug builds) - #65197 (Prepare `MutVisitor`s to handle interned projections) - #65201 (Disable Go and OCaml bindings when building LLVM) - #65364 (Collect occurrences of empty blocks for mismatched braces diagnostic) - #65417 (Add more coherence tests) - #65434 (Add long error explanation for E0577) - #65455 (Avoid unnecessary `TokenTree` to `TokenStream` conversions) - #65472 (Use a sharded dep node to dep node index map) - #65480 (Speed up `LexicalResolve::expansion()`) - #65496 (properly document panics in div_euclid and rem_euclid) - #65508 (add option to ping llvm ice-breakers to triagebot) - #65511 (save-analysis: Nest tables when processing impl block definitions) - #65513 (reorder fmt docs for more clarity) - #65532 (doc: make BitSet intro more short) - #65540 (show up some extra info when t!() fails) - #65549 (Fix left/right shift typo in wrapping rotate docs) - #65552 (Clarify diagnostics when using `~` as a unary op) Failed merges: - #65471 (Add long error explanation for E0578) r? @ghost
…s2, r=oli-obk Prepare `MutVisitor`s to handle interned projections The following are all the files where mir's `MutVisitor` is implemented. The `-` there stands for no changes, `visit_place` wasn't making any change on `Place`s. `x` stands for this file was changed to make `visit_place` do whatever it was doing with the base but avoid modifying the projection, instead just create a new one and assign to it. ``` [-] src/librustc_mir/transform/no_landing_pads.rs [x] src/librustc_mir/transform/promote_consts.rs [x] src/librustc_mir/transform/generator.rs [x] src/librustc_mir/transform/erase_regions.rs [-] src/librustc_mir/transform/instcombine.rs [x] src/librustc_mir/transform/inline.rs [x] src/librustc_mir/transform/simplify.rs [x] src/librustc_mir/util/def_use.rs [-] src/librustc_mir/transform/const_prop.rs [-] src/librustc_mir/transform/cleanup_post_borrowck.rs [x] src/librustc_mir/borrow_check/nll/renumber.rs [-] src/librustc_mir/transform/copy_prop.rs ``` There is some code repetition, just created the PR so we can start discussing it. /cc @oli-obk@nikomatsakis
Rollup of 19 pull requests Successful merges: - #65016 (Always inline `mem::{size_of,align_of}` in debug builds) - #65197 (Prepare `MutVisitor`s to handle interned projections) - #65201 (Disable Go and OCaml bindings when building LLVM) - #65334 (Add long error explanation for E0575) - #65364 (Collect occurrences of empty blocks for mismatched braces diagnostic) - #65455 (Avoid unnecessary `TokenTree` to `TokenStream` conversions) - #65472 (Use a sharded dep node to dep node index map) - #65480 (Speed up `LexicalResolve::expansion()`) - #65493 (Add long error explanation for E0584) - #65496 (properly document panics in div_euclid and rem_euclid) - #65498 (Plugins deprecation: don’t suggest simply removing the attribute) - #65508 (add option to ping llvm ice-breakers to triagebot) - #65511 (save-analysis: Nest tables when processing impl block definitions) - #65513 (reorder fmt docs for more clarity) - #65532 (doc: make BitSet intro more short) - #65535 (rustc: arena-allocate the slice in `ty::GenericsPredicate`, not the whole struct.) - #65540 (show up some extra info when t!() fails) - #65549 (Fix left/right shift typo in wrapping rotate docs) - #65552 (Clarify diagnostics when using `~` as a unary op) Failed merges: - #65390 (Add long error explanation for E0576) - #65434 (Add long error explanation for E0577) - #65471 (Add long error explanation for E0578) r? @ghost
bors
commented
Oct 19, 2019
☔ The latest upstream changes (presumably #65570) made this pull request unmergeable. Please resolve the merge conflicts. |
… r=oli-obk Intern place projection This should sit on top of rust-lang#65197. After that one merged, I'm gonna rebase on top of it. The important commits are the last three and there's a bunch of code repetition that I'm going to remove but for that I need to refactor some things that probably need to be added before this PR. Anyway this work helps as is because we can run perf tests :). r? @oli-obk /cc @nikomatsakis
… r=oli-obk Intern place projection This should sit on top of rust-lang#65197. After that one merged, I'm gonna rebase on top of it. The important commits are the last three and there's a bunch of code repetition that I'm going to remove but for that I need to refactor some things that probably need to be added before this PR. Anyway this work helps as is because we can run perf tests :). r? @oli-obk /cc @nikomatsakis
The following are all the files where mir's
MutVisitoris implemented. The-there stands for no changes,visit_placewasn't making any change onPlaces.xstands for this file was changed to makevisit_placedo whatever it was doing with the base but avoid modifying the projection, instead just create a new one and assign to it.There is some code repetition, just created the PR so we can start discussing it.
/cc @oli-obk@nikomatsakis