Merged
Conversation
Specialize Iterator::try_fold and DoubleEndedIterator::try_rfold to improve code generation in all internal iteration scenarios. This changes brings the performance of internal iteration with RangeInclusive on par with the performance of iteration with Range: - Single conditional jump in hot loop, - Unrolling and vectorization, - And even Closed Form substitution. Unfortunately, it only applies to internal iteration. Despite various attempts at stream-lining the implementation of next and next_back, LLVM has stubbornly refused to optimize external iteration appropriately, leaving me with a choice between: - The current implementation, for which Closed Form substitution is performed, but which uses 2 conditional jumps in the hot loop when optimization fail. - An implementation using a "is_done" boolean, which uses 1 conditional jump in the hot loop when optimization fail, allowing unrolling and vectorization, but for which Closed Form substitution fails. In the absence of any conclusive evidence as to which usecase matters most, and with no assurance that the lack of Closed Form substitution is not indicative of other optimizations being foiled, there is no way to pick one implementation over the other, and thus I defer to the statu quo as far as next and next_back are concerned.
Co-Authored-By: Aaronepower <Aaronepower@users.noreply.github.com>
Co-Authored-By: Aaronepower <Aaronepower@users.noreply.github.com>
Co-Authored-By: Aaronepower <Aaronepower@users.noreply.github.com>
Co-Authored-By: Aaronepower <Aaronepower@users.noreply.github.com>
Co-Authored-By: Aaronepower <Aaronepower@users.noreply.github.com>
Co-Authored-By: Aaronepower <Aaronepower@users.noreply.github.com>
… the move was partial
It is currently a method of `Token`, but it only is valid to call if `self` is a `Token::Interpolated`. This commit eliminates the possibility of misuse by changing it to an associated function that takes a `Nonterminal`, which also simplifies the call sites. This requires splitting out a new function, `nonterminal_to_string`.
It's present within `Token::Interpolated` as an optimization, so that if a nonterminal is converted to a `TokenStream` multiple times, the first-computed value is saved and reused. But in practice it's not needed. `interpolated_to_tokenstream()` is a cold function: it's only called a few dozen times while compiling rustc itself, and a few hundred times across the entire `rustc-perf` suite. Furthermore, when it is called, it is almost always the first conversion, so no benefit is gained from it. So this commit removes `LazyTokenStream`, along with the now-unnecessary `Token::interpolated()`. As well as a significant simplification, the removal speeds things up slightly, mostly due to not having to `drop` the `LazyTokenStream` instances.
The current code (expensively) clones the value within an `Rc`. This commit changes things so that the `Rc` itself is (cheaply) cloned instead, avoid some allocations. This requires converting a few `Rc` instances to `Lrc`.
These are probably leftovers from recent `TokenStream` simplifications.
…-obk Optimise vec![false; N] to zero-alloc Nowadays booleans have a well-defined representation, so there is no reason not to optimise their allocation.
…anishearth Don't generate minification variables if minification disabled If the minification is disabled, there is no sense having those variables. r? @QuietMisdreavus
…r=nikomatsakis Update tests to account for cross-platform testing and miri. Fix rust-lang#23926
Do not underflow after resetting unmatched braces count Fix rust-lang#58638. r? @oli-obk
Add expected/provided byte alignments to validation error message Fixes rust-lang#58617
…n, r=petrochenkov Reduce Miri-related Code Repetition `like (n << amt) >> amt` This Pull Request fixes a part of [rust-lang#49937](rust-lang#49937).
Contributor
Author
|
@bors r+ p=16 |
Collaborator
|
📌 Commit a36d1b9 has been approved by |
Collaborator
|
⌛ Testing commit a36d1b9 with merge 103db7fe60d53b9a1556ee502480f75ab21f544e... |
Collaborator
|
💔 Test failed - checks-travis |
Contributor
|
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 |
Member
Collaborator
bors
added a commit
that referenced
this pull request
Feb 23, 2019
Rollup of 16 pull requests Successful merges: - #58100 (Transition librustdoc to Rust 2018) - #58122 (RangeInclusive internal iteration performance improvement.) - #58199 (Add better error message for partial move) - #58227 (Updated RELEASES.md for 1.33.0) - #58353 (Check the Self-type of inherent associated constants) - #58453 (SGX target: fix panic = abort) - #58476 (Remove `LazyTokenStream`.) - #58526 (Special suggestion for illegal unicode curly quote pairs) - #58595 (Turn duration consts into associated consts) - #58609 (Allow Self::Module to be mutated.) - #58628 (Optimise vec![false; N] to zero-alloc) - #58643 (Don't generate minification variables if minification disabled) - #58648 (Update tests to account for cross-platform testing and miri.) - #58654 (Do not underflow after resetting unmatched braces count) - #58658 (Add expected/provided byte alignments to validation error message) - #58667 (Reduce Miri-related Code Repetition `like (n << amt) >> amt`) Failed merges: r? @ghost
Collaborator
|
☀️ Test successful - checks-travis, status-appveyor |
Collaborator
|
☀️ Test successful - checks-travis, status-appveyor |
This was referenced Feb 23, 2019
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Successful merges:
LazyTokenStream. #58476 (RemoveLazyTokenStream.)like (n << amt) >> amt#58667 (Reduce Miri-related Code Repetitionlike (n << amt) >> amt)Failed merges:
r? @ghost