<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/61104>61104</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Suboptimal codegen from _mm256_movemask_ps and if
</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>
The code
```C
#include<stdint.h>
#include<stdbool.h>
#include<immintrin.h>
uint8_t f(__m256i a, __m256i b, __m256i c, __m256i d, bool o) {
__m256i r = _mm256_cmpeq_epi32(a, b);
if (o) r|= _mm256_cmpeq_epi32(a, c);
r|= d;
return _mm256_movemask_ps((__m256) r);
}
```
generates a lot more x86-64 assembly than should be necessary (`-march=haswell`):
```asm
f: # @f
vpcmpeqd ymm1, ymm0, ymm1
vextracti128 xmm4, ymm1, 1
vpackssdw xmm1, xmm1, xmm4
test edi, edi
jne .LBB0_1
vpxor xmm0, xmm0, xmm0
jmp .LBB0_3
.LBB0_1:
vpcmpeqd ymm0, ymm0, ymm2
vextracti128 xmm2, ymm0, 1
vpackssdw xmm0, xmm0, xmm2
.LBB0_3: # %entry
vpor xmm0, xmm0, xmm1
vextracti128 xmm1, ymm3, 1
vpackssdw xmm1, xmm3, xmm1
vpor xmm0, xmm0, xmm1
vpacksswb xmm0, xmm0, xmm0
vpmovmskb eax, xmm0
vzeroupper
ret
```
https://godbolt.org/z/baG435jEv
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyMVUGTsjgQ_TXhkhordBDhwGFGP_eyt927FUgjmUkImwRH59dvAeowrrpfyrKr0_1ed14DEd6rfYtYkOUbWW4i0YfGukJ-CWVEVFp5Kv5ukFZWImEbwl5Jyqbf-uwDV22le4mEr32Qqg2LhvBf96OltfpRWBmj2uBUO08Y_3vVhmwXaE0g2-0MLFNFBYE1vTjl3KnmjhycoSq1BHJKVm8TJb1mOEr4hu7M4O0q0-E_O-wUBwLZWKMkkBN-hamaEshGMkdW6-fY6if2ApDzPQy9ay8cxh7QCP-x6zyB7HrcqdqMi6w2N-OY3D226ERATwXVNlBjHdJjlr6kCRXeoyn1iYZGtNQ3tteSlkhbrNB74U7DwUjKXoxwVUP4phH-E7UeyIfSrzcVhTfTTk34K_2tRYBTkrD6cvhpHbpROnnxT8bEg3onY9jZxjcIPAYnqqBiyOjRmOSaBmt6m9uJ6sN7-Xn2j-e0mU1-IgL6QFGqITqYH8H3Fke7-PPtje3-U-to3VSDnbm_7ZT5broZnk-7F7KLxk-UYTfKwBNlpk5gjngozp2WYd4c_40hj-OFJbbBnc51Dt0oyD36ZzOdzelkDJ93_mSe_AHz__dwJv0sv0kfDfBKauzB-I8LAsXxJvHwhc72XYfuJ9JhuPvuNiF0fngEYEtgu7eytDosrNsT2H4R2Jbij4Qv338dIllwmfNcRFjE6WqV5sOKmkLm2SoukxXUecoFVEIkXNRlVkuZYCKTSBXAgDPO4jhPUp4veJYiYLxiDJHFWU0ShkYovdD6YIbakfK-xyKNY5ZEWpSo_XhVALT4SccgARhuDlcMmJey33uSMK188N8sQQWNxV99abugjNDjhbLHltbOmjsfPypaSVUd9U4XN7qo0PTlorKGwHbgP5uXztl3rAKB7diVJ7Adu_43AAD__-uO5_M">