<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">