diff options
author | Jessica Paquette <jpaquette@apple.com> | 2021-01-20 17:30:17 -0800 |
---|---|---|
committer | Jessica Paquette <jpaquette@apple.com> | 2021-01-27 14:46:44 -0800 |
commit | 3d25fdc5c21f174d38ac78dd01ccaf6eec655bc0 (patch) | |
tree | 321895634c17797a989364c6c3cf83d78d4f568d /clang/lib/Frontend/CompilerInvocation.cpp | |
parent | fb12df4a8e33d759938057718273dfb434b2d9c4 (diff) | |
download | llvm-3d25fdc5c21f174d38ac78dd01ccaf6eec655bc0.zip llvm-3d25fdc5c21f174d38ac78dd01ccaf6eec655bc0.tar.gz llvm-3d25fdc5c21f174d38ac78dd01ccaf6eec655bc0.tar.bz2 |
[AArch64][GlobalISel] Allow vector store legalization into 128-bit-wide types
We are allowed to store 128-bit-wide values using the q registers on AArch64.
GlobalISel was clamping the number of elements in vector stores into 64 bits
instead.
This results in some poor codegen like below:
https://godbolt.org/z/E56dq8
```
; SDAG uses a stp + q registers in both cases here.
define void @float(<16 x float> %val, <16 x float>* %ptr) {
store <16 x float> %val, <16 x float>* %ptr
ret void
}
define void @double(<8 x double> %val, <8 x double>* %ptr) {
store <8 x double> %val, <8 x double>* %ptr
ret void
}
```
This adds similar legalization for vector stores with s8 and s16 elements.
Differential Revision: https://reviews.llvm.org/D95107
Diffstat (limited to 'clang/lib/Frontend/CompilerInvocation.cpp')
0 files changed, 0 insertions, 0 deletions