<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/125189>125189</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[X86] Failure to recognise hidden <2 x i64> ashr
</td>
</tr>
<tr>
<th>Labels</th>
<td>
backend:X86,
missed-optimization
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
RKSimon
</td>
</tr>
</table>
<pre>
Prior to AVX512, we were missing ASHR for i64 vectors, resulting in hacks like this:
```c
__m128i sra63(__m128i x) {
return _mm_srai_epi32(_mm_shuffle_epi32(x,_MM_SHUFFLE(3,3,1,1)),31);
}
```
```ll
define <2 x i64> @sra63(<2 x i64> %x) {
entry:
%0 = bitcast <2 x i64> %x to <4 x i32>
%1 = ashr <4 x i32> %0, <i32 0, i32 31, i32 0, i32 31>
%2 = shufflevector <4 x i32> %1, <4 x i32> poison, <4 x i32> <i32 1, i32 1, i32 3, i32 3>
%3 = bitcast <4 x i32> %2 to <2 x i64>
ret <2 x i64> %3
}
```
which makes it incredibly difficult for other optimizaions to recognise whats going on - it'd be very useful if the middle end could convert these patterns back to a <2 x i64> ashr
```ll
define <2 x i64> @sra63(<2 x i64> %x) {
entry:
%0 = ashr <2 x i64> %x, <i64 63, i64 63>
ret <2 x i64> %0
}
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJy8VE1v4zYQ_TXUZZBAJPVhH3TwOhEWaBcoNmixN4OSRtY0FGmQlJP01xeU7NhJfF5Asp-H5HucN-NR3tPeIFYs_8byh0RNYbCu-vnHE43WJI3t3qq_HFkHwcLmn185F0xs4QXhBR3CSN6T2cPm6ftP6K0DKjI4Yhus83GfQz_pEHeQgUG1zx40PSOEgTyTG5ZuWJEuT8vSzW43crEi8E4VkonV-fcrE2tg5TeWbgAAHIbJGdiN4847RTs8kBRxewwMU99rfI-9MrHd_fixe_r-d13_-cjESjKxjS9f3vX8bOUMZZRg5cP1xa6x1izddNiTQWByK-A1ZszkI7AsPd_604LIr66PJri3JXOISykw-QANhVb58JlS5K_Rdia3WYxKweTj-SCfDyo_uI_rM2m0nsktSQEzjiAmuKDr0IVQzIQn-5YSfmXmJ-ar6MGSt-Zr_KT_rvoO5AVc1OVnHz7qipMPF3fmgw5veCZvlvBloHaAUT2jBwpApnXYUaPfoKO-p3bSYW5gGwZ0YA-BRvpPkTU-Sjts7d6QR3gZVPCwt7GnrYE7oMBE2UGDcET3BpPHftJAPYQh_j-6TiOg6aC1k46f5oguxEWPcFAhoDMeGtU-Rx31KZ1Y39_Qf-c2-nJsaaMig2Kp2oIW92-an341P-kq2a3lWiVY8VKuJC_ylCdDVcpe5u06E1nBiz4t0463RdPxdZmX2PAmoUqkIk-55Ok64xm_b7HAPMOGZ63My56zLMVRkb7X-jjeW7dPyPsJKy5yvlonWjWo_TzahIgWo-mY3PxaFUzEMcaEiAMMu7tzvQPFVhZxEroqkt41096zLNXkg7_IBAp6npmRK3-AWpGeHH5slYG6Ds2NiiaT09UQwmGegaJmot5TGKbmvrUjE3WUOX3dHZz9F9vARD2n5pmoT9kdK_F_AAAA__8_ZZwq">