<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/142221>142221</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            LLVM doesn't know that psrad xmm,xmm ignores the high part of rhs
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          Alcaro
      </td>
    </tr>
</table>

<pre>
    ```c++
#include <immintrin.h>

__m128i a(__m128i __ix, __m128i __iy) {
        return _mm_sra_epi32(__ix, _mm_unpacklo_epi32(__iy, _mm_setzero_si128()));
}
__m128i b(__m128i __ix, __m128i __iy) {
        return _mm_sra_epi32(__ix, __iy);
}

__m128i c(__m128i __ix, __m128i __iy) {
        return _mm_sra_epi32(__ix, _mm_unpackhi_epi32(__iy, _mm_setzero_si128()));
}
__m128i d(__m128i __ix, __m128i __iy) {
        return _mm_sra_epi32(__ix, _mm_unpackhi_epi32(__iy, __iy));
}
```
Expected:
```
a(long long vector[2], long long vector[2]):
        psrad   xmm0, xmm1
        ret

b(long long vector[2], long long vector[2]):
        psrad   xmm0, xmm1
 ret

c(long long vector[2], long long vector[2]):
        pshufd  xmm1, xmm1, 250
        psrad   xmm0, xmm1
        ret

d(long long vector[2], long long vector[2]):
        pshufd  xmm1, xmm1, 250
        psrad   xmm0, xmm1
        ret
```
Actual:
```
a(long long vector[2], long long vector[2]):
        xorps   xmm2, xmm2
        movss   xmm2, xmm1
 psrad   xmm0, xmm2
        ret

b(long long vector[2], long long vector[2]):
        psrad   xmm0, xmm1
        ret

c(long long vector[2], long long vector[2]):
        pxor    xmm2, xmm2
 punpckhdq       xmm1, xmm2
        psrad   xmm0, xmm1
        ret

d(long long vector[2], long long vector[2]):
        pshufd  xmm1, xmm1, 250
 psrad   xmm0, xmm1
 ret
```
https://godbolt.org/z/1j5nWoW6q

Originally found in libstdc++ std::experimental::simd https://godbolt.org/z/d5Gdnsqch (they should probably add corresponding fixes to their header)

(See also #141475, though that one's about the shift instructions' lhs/ret, not rhs)
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzMVk2P2zYQ_TXUZRBDGlmWddDB6417SdFDgeZoUCQtMssPLUlt5Pz6gpLdGEaKAO1uu8bAX08z7_Hx6YOGoHorREuqB1I9ZnSM0vl2pxn1LuscP7dkky_FCD6kyncES2WZHrkAUu6VMcpGr-xKkvJjgvPd8WgK3CqgBLfX78ejmgju4eb3mWADpJ5n5o0XcfQWjsYcg6dHMagS5_5LnzHH0Q6UPWl3C56vYBDxm_DuGFSBW5KquVQ5M9SPN8q611S2HH9Lc8PE3sQDqf69B_w_U3Yx6M6ja7JIvvs4DYJFwUm5u0NShLSzPcxvL4JF50n1gKR6TKP_FmqWUXB5DcFTDgCTMXnqm4wpbmAv4rJr3dvS_cXDXotHjicOy_wrD-4Bq_wfLJ6_P1E3SdixOFL9ZgmZnB_CogcvevAGNu4l3MGz3B8sA_-HYN3TvVa-JufhB6YMox3Yk-TPV_O-bzW-2-D95KS8iZSMcQhpNh4IHnrHO6fjyvme4OEbwUPxpbKf3efN8yL_N696ZanWZzi50XJQFrTqQuSXmyaEOF_ayp2YBuGVETYuUS53QRkOPyPk1S_chmcmgeA2SnGGIN2oOQzedbTTZ6CcA3PeizA4y5Xt4aQmESA6iFIoD1JQLnzybNZMcPu7EEB1cECwLNbFuq6SK1G6sZcQJY3grCBYB6CdG2OaA0GqUwRlQ_Qji8rZQLAGLQPBQ_IR92BdBJ_-aDLelrwpG5qJtqjX2826LPI6ky2tcXNiHBlrGi5ExUWe82q9aYpis9kgz1SLOVZ5VeaIRbGuVzXvMC_otslZ3jR1Tta5MFTpldYvJhmVqRBG0RZrRCwyTTuhw_xYg2jFV5hRgik2mW9T04du7ANZ51qFGL6PiSpq0X769MevwJ0IlmAd4cm6r4sjS4YmYwjuJ2NA9db5ZLMUIFUvYaA-gjslB7LR6_ZuZ1WUY7dizhA8JM7Lx4fBuy-CRYKHWWmy87KUlxb_DAAA___02dVq">