<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/139229>139229</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[AArch64] Use SVE XAR for fixed-length operations.
</td>
</tr>
<tr>
<th>Labels</th>
<td>
backend:AArch64,
missed-optimization
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
davemgreen
</td>
</tr>
</table>
<pre>
There is a Neon SHA3 v2i64 XAR operation, but not for v4i32, v8i16 and v16i8. If sve2-sha3 is available we can use the SVE instructions instead.
https://godbolt.org/z/9hdqKoWMx (G1 and F1 are already OK).
vs with scalable vectors: https://godbolt.org/z/GhazeoaWY
https://godbolt.org/z/fejTchexj
```
typedef char __attribute__ ((vector_size (16))) v16qi;
typedef unsigned short __attribute__ ((vector_size (16))) v8hi;
typedef unsigned int __attribute__ ((vector_size (16))) v4si;
typedef unsigned long long __attribute__ ((vector_size (16))) v2di;
typedef char __attribute__ ((vector_size (8))) v8qi;
typedef unsigned short __attribute__ ((vector_size (8))) v4hi;
typedef unsigned int __attribute__ ((vector_size (8))) v2si;
v2di
G1 (v2di r) {
return (r >> 39) | (r << 25);
}
v4si
G2 (v4si r) {
return (r >> 23) | (r << 9);
}
v8hi
G3 (v8hi r) {
return (r >> 5) | (r << 11);
}
v16qi
G4 (v16qi r)
{
return (r << 2) | (r >> 6);
}
v2si
G5 (v2si r) {
return (r >> 22) | (r << 10);
}
v4hi
G6 (v4hi r) {
return (r >> 7) | (r << 9);
}
v8qi
G7 (v8qi r)
{
return (r << 3) | (r >> 5);
}
```
See #137162, this is an extension to that issue.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyklVGP4jYQxz-NeRmB4nESkoc85NiFVqe2Uvfaa5-QkwzY2xBztpPb3U9fOWF7HOJUVitFINuj38z8x_JfOqf3HVHBkg8suZvJ3itji0YOdNhbom5Wmea5-KTIEmgHEn4l08HDT6WAAXUaw1_l72COZKXXpmO4gqr30BkPO2NhiLXAsDlkmqcguwYGnupsAT_vwA2Ec6ekGMGD1K2sWoKvBLXsoHcEXhE8_HkPunPe9nXI4MYFyWbBopJFpfL-6JgoGa4ZrvemqUzrF8buGa5fGK5z1Xz5aD7_8gQMsw0fS1hzkJZAtpZk8wy_fWSYB9zg4Kv2Clwtp1IGqr2xAQ__l2ej5AsZ-fnv28ra0eOnWtHT4xTO0uj0RaV_PlJDO6iVtLDdSu-trnpP221ogWE2VbV1-oXCDk8Z5tMXxP2imfhwhum7ccINOGWsfzMwUz_i6e7ttNj9iNaabj_9vJWJzQXzVuGy8zbfL9s5Ln6vaucwfBUtXNHQbVRueAgKC7Ahhi3DOQCAJd_bLpxaYOKeiXsQ-RSyet1dMbECTAJ_4i7vTvQwn6jc4EiP3S10FNfo-RV4uEpRuREjPFO3wJNrbM6vwMeLH5WbeKSH1YgfY6YE3-MnDS7wY870Ch0nXZJJ9dt0uYRPtUfXVJ-ESSfVbxJmebPokyzLSfSbVLkc6H-T-I599mKxqHygcG0FF0uejg--V9qN73oH9OSpc9p04A14JT1o53pazJpCNLnI5YwKvozTZYY85zNVCF6RkKmoc5QJJpJTk-ZpXVG6XFKV1DNdYIRJlER5lPNU8EW041mW5UmOVYSijlkc0UHqdtG2wyE8u7MxZcFFjpjPWllR60bPQ6xk_Q91DRNlWdpapTELo1sxxIN2jpq5OXp90C8ng8Ngk7YI4HnV7x2Lo1Y7776l8tq3o6G-8pI7-MNNThbcMhjjTj9RM2-p23v1zT7dYtbbtrgwD-1VXy1qc2C4DklOf_OjNY9Ue4brsTnHcH3qbyjw3wAAAP__K2lEug">