<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/144266>144266</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[X86] Delaying widening results in an unnecessary `vpmovsxwd` copy
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
dzaima
</td>
</tr>
</table>
<pre>
This C code:
```c
__m256i iter(int16_t* src1p) {
__m256i ten = _mm256_set1_epi32(10);
__m256i wload = _mm256_cvtepi16_epi32(_mm_loadu_si128((void*)src1p));
__m256i mask = _mm256_cmpgt_epi32(wload, ten);
return _mm256_add_epi32(wload, mask);
}
```
compiled with `-O3 -march=haswell`, results in:
```asm
iter:
vmovdqu xmm0, xmmword ptr [rdi]
vpmovsxwd ymm1, xmm0
vpcmpgtw xmm0, xmm0, xmmword ptr [rip + .LCPI0_0]
vpmovsxwd ymm0, xmm0
vpaddd ymm0, ymm0, ymm1
ret
```
but it could be
```asm
iter:
vpmovsxwd ymm0, xmmword ptr [rdi]
vpbroadcastd ymm1, dword ptr [rip + .LCPI0_0]
vpcmpgtd ymm1, ymm0, ymm1
vpaddd ymm0, ymm1, ymm0
ret
```
avoiding having two `vpmovsxwd`s, and allowing the one that's left to have the memory operand inline.
https://godbolt.org/z/Ezrf9YbYn
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyUlE-PqzYUxT_NzeZqItuEfwsWzKSRKlVqF130rZDBTnBrY2obmMynr0yTTF5eNNKLkBx07znn-geYe69Og5QVpK-Q7jd8Cr11lfjgyvBNa8W5-rNXHt-ws0JCUgOpISP_Xx2QumkMSzOFKkgHrFBDoFkTgNXoXUdHYCVC_gqkRkS8Ngc5ICR7bEy8b7wMtJGjShiwghJgJSSPkkVbLu5F3RzkqGh2EzbGNLFparyirID1mq0SwGpg5XWcp-6G-3--MzfjKdyc12xgb3Hu7-ROhskNVxEX4kdJdL5pIN_f8wNSd9aMSkuBiwo9QkZefk_wxXDX9ZDse-4XqXVsZW_opJ908KiGh-fAvQFSr09gLeDlNxs7i38nfDdmNXg3ZrFO4BgcQvrqhII0DoTzaOzs3xdxEZ6NoRcBufcbVy7L9f7O96m_GhHYK25_e_vjV9KQS9jN7IdM8jSTCyE-y3crvWtzMjyQbaeAKmBnJy2wlV_y-mKW58Buw7XOctFxH8Q9N_EzGFam1-SbxeM-n3D47PuKA4-fgBpO2PM5LmGx8T27bRky4qMRHwRyre2yNvUS7SAx9DwAyz1qeQwYbDSRa9VIY90Z7ShdVKpBq0FuYzap-xBGH9GyA7DDyYrW6rC17gTs8AHs8MuHO5bf2m8DkHojqkSUSck3sqJ5SgghBaGbvqK8FEmZ52lWlC1t8_Z4JMUuT_NMlLJsxUZVjLCUZDSlKSOEbhNBE8mL3bFjxa5oOeyINFzprdazifEb5f0kK7rbsSzbaN5K7deDj7FBLrhWgbF4Droqil7a6eRhR7TywX_aBBX0emL-VWSQ7nEvNT9HbIsScoh_Pj9V5ANOwyA76T1350f02NnxvJmcrh6gqdBP7bazBtghBl-Wl9HZv2UXgB3WcT2ww2U_c8X-CwAA__-p-Loi">