Micro Optimization: Elide overflow checking in Data.bytes #1550
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.
This is a tiny optimization in conversion from
Data
to aRawSpan
that elides unnecessary overflow checks when performing arithmetic on the bounds/offsets of the bytes pointer. Given the constraints that theRange
type guarantees (lowerBound <= upperBound
) and the constraint that allData
indices are non-negative, we can avoid performing overflow checking on these operations since the possible inputs can never overflow. Runtime-wise the other parts of this conversion (copying the representation, switching over the cases, etc.) outweigh these overflow checks. However, I did find that removing these checks resulted in a 15% reduction in code size in the caller and as we remove the other heavy pieces these will become more prominent. As we heavily promote usingSpan
s in API this conversion will become much more common and I think is worthy of a micro optimization like this to ensure our best performance.