<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/139445>139445</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[AArch64] ASIMD load/store can be used instead of SVE load/store
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
k-arrows
</td>
</tr>
</table>
<pre>
Consider the following testcase:
https://godbolt.org/z/hnx1hE5dY
```cpp
#include <arm_sve.h>
// W = 1
svfloat32_t foo1(float32_t *x) {
svbool_t pg = svwhilelt_b32(0, 1);
return svld1_f32(pg, x);
}
void bar1(float32_t *x, svfloat32_t data) {
svbool_t pg = svwhilelt_b32(0, 1);
svst1_f32(pg, x, data);
}
// W = 2
svfloat32_t foo2(float32_t *x) {
svbool_t pg = svwhilelt_b32(0, 2);
return svld1_f32(pg, x);
}
void bar2(float32_t *x, svfloat32_t data) {
svbool_t pg = svwhilelt_b32(0, 2);
svst1_f32(pg, x, data);
}
// W = 4
svfloat32_t foo4(float32_t *x) {
svbool_t pg = svwhilelt_b32(0, 4);
return svld1_f32(pg, x);
}
void bar4(float32_t *x, svfloat32_t data) {
svbool_t pg = svwhilelt_b32(0, 4);
svst1_f32(pg, x, data);
}
```
GCC avoids the predicates for these functions.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyslE1vo0gQhn9NcSnFgmrA9oEDscNqD3uKtKs9WU13Y3qmTVtdDc7Mrx9BksnkQ6NREoTER1cVD4_glcz2OBhTQXENxT6RY-x9qL5eyRD8hZPW62_Vzg9stQkYe4Odd85f7HDEaDgqyQZEDWndx3jm-ZQaoObodetdXPlwBGq-AzX9cJf1N4X-H9IayvR-V-fzfEnCDsqN2iCInQynA09m1YO4mRfTh5H4H4LYYwZpzVPnvIyCDhE77zOgzdMNoPoOaIuwvoa0RkTkqfXeHSKej8sIni69dcbFQysIaJMC7TAD2oJ4bAkmjmFAnpzODt1SdT7OZXc_y2C9v8ebvNXYyvAWxg5_ZdUyyo-h8cTxFdDucfALsGfe6LU3-p23PyKjD0t7i-FTpD1He7-3_LW3_DO-t_zD6t7C-BR1-XvVPf7W95x_7XYoZ1heguMcjLZKRsPY-SVL2GA3DipaP_Aq0ZXQW7GViamydV5uS8o2IumrPMuEVFqU2Xpb6rTrciOUEJ1qtSzXuUpsRSkVaZHNW0lite46vVHrrCw3pixUB3lqTtK6lXPTaY6kxDKPpsrENs-LxMnWOF4SkGgwF1xWgWgOxFDNTVfteGTIU2c58tOYaKNborOug-rLHIo91rd__7NH56UGajj6YFDJAVuDIxuNduBopEbf4e2_N8_qkjG46kWM2tiP7Ur5E1AzP_bhcHUO_otREahZYBmoeXibqaIfAQAA___9arRH">