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