[release/5.0] Fix logic to test bits in a constant vector (Vector256) #48613
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.
Issue: #47385
Fix in master: #47385
Customer Impact
If a user tries to create a
Vector256viaCreateoverload and the first half of its arguments are zeros and the second part is, let's say, all "1" (or any other constant) - a special optimization will always optimize thatCreatetoVector256<T>.Zero. A simple example:prints:
but is expected to print:
Same for -1 and AllBitSets, and same for Vector64 on arm64.
Where
Ttype is pretty much any type Vectors support.Testing
This PR adds a regression test.
Risk
Low. This impacts only rare specific cases with hardware intrinsics.
Regression
Yes, the optimization
Vector256(0,0,0...0) to Vector256<>.Zerowas introduced in 5.0