[Clang] Freeze padded vectors before storing. (#164821) #11721
Merged
+79
−28
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.
Currently Clang usually leaves padding bits uninitialized, which means they are undef at the moment.
When expanding stores of vector types to include padding, the padding lanes will be poison, hence the padding bits will be poison.
This interacts badly with coercion of arguments and return values, where 3 x float vectors will be loaded as i128 integer; poisoning the padding bits will make the whole value poison.
Not sure if there's a better way, but I think we have a number of places that currently rely on the padding being undef, not poison.
PR: llvm#164821
rdar://162655662
(cherry-picked from 5378584)