Join GitHub today
GitHub is home to over 50 million developers working together to host and review code, manage projects, and build software together.
Sign upGitHub is where the world builds software
Millions of developers and companies build, ship, and maintain their software on GitHub — the largest and most advanced development platform in the world.
Optimize seen Predicate filtering. #50932
Conversation
This speeds up a few rustc-perf benchmark runs, most notably ones involving 'coercions', the best by 2%.
|
r? @eddyb (rust_highfive has picked a reviewer for you, use r? to override) |
| // | ||
| // This code is hot enough that it's worth avoiding the allocation | ||
| // required for the FxHashSet when possible. Special-casing lengths 0, | ||
| // 1 and 2 covers roughly 75--80% of the cases. |
eddyb
May 21, 2018
Member
What about using sort + dedup? That would avoid the allocation, and also quickly exit on small numbers of elements.
What about using sort + dedup? That would avoid the allocation, and also quickly exit on small numbers of elements.
ishitatsuyuki
May 21, 2018
Contributor
That changes the order, which may break the behavior.
Also, deriving Ord is a pain.
That changes the order, which may break the behavior.
Also, deriving Ord is a pain.
nnethercote
May 21, 2018
Author
Contributor
And Predicate is a large type, so moving the values around might be moderately expensive.
And Predicate is a large type, so moving the values around might be moderately expensive.
eddyb
May 22, 2018
•
Member
Oh, I see, the set is used with retain. But you need to clone & move the values into a set anyway. If you want to avoid the cost of data movement, the set could be created using references into the original Vec instead. Except that doesn't work because of the retain...
Oh, I see, the set is used with retain. But you need to clone & move the values into a set anyway. If you want to avoid the cost of data movement, the set could be created using references into the original Vec instead. Except that doesn't work because of the retain...
|
@bors r+ |
|
|
Optimize seen Predicate filtering. This speeds up a few rustc-perf benchmark runs, most notably ones involving 'coercions', the best by 2%.
Rollup of 15 pull requests Successful merges: - #50846 (Add E0665) - #50849 (CheckLoopVisitor: also visit closure arguments) - #50863 (Make `[T]::len` and `str::len` const fn) - #50875 (rustdoc: use "short form" doc(cfg) printing even when combined with other conditionals) - #50913 (Fix typo in cell.rs) - #50914 (Issue #50636: Improve error diagnostic with missing commas after struct fields.) - #50931 (Inline `try_get`.) - #50932 (Optimize seen Predicate filtering.) - #50945 (Stabilize feature from_ref) - #50946 (rustc: Fix procedural macros generating lifetime tokens) - #50947 (rustdoc: set tab width in rust source blocks) - #50952 (Add the 2018 edition of the book to doc.rust-lang.org) - #50958 (Micro-optimization on PR#50697) - #50961 (Fix FileCheck finding with MSVC) - #50963 (Right-size the `VecDeque` in `coerce_unsized`.) Failed merges:
This speeds up a few rustc-perf benchmark runs, most notably ones
involving 'coercions', the best by 2%.