<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/59526>59526</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Sub-optimal codegen from _mm256_movemask_ps
</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<immintrin.h>
extern char mask[];
char f(__m256i a, __m256i b) {
__m256i c = _mm256_cmpeq_epi32(a, b);
c = _mm256_and_si256(c, _mm256_loadu_si256((void*)mask));
return _mm256_movemask_ps((__m256i)c)!=0;
}
```
generates the quite excessive assembly
```asm
f: # @f
vpcmpeqd ymm0, ymm0, ymm1
mov rax, qword ptr [rip + mask@GOTPCREL]
vpxor xmm1, xmm1, xmm1
vpcmpgtd ymm1, ymm1, ymmword ptr [rax]
vpand ymm0, ymm0, ymm1
vextracti128 xmm1, ymm0, 1
vpackssdw xmm0, xmm0, xmm1
vpmovmskb eax, xmm0
test eax, eax
setne al
vzeroupper
ret
```
(https://godbolt.org/z/914xc1Wbf)
while using `_mm256_movemask_epi8` instead of `_mm256_movemask_ps` results in the expected result - https://godbolt.org/z/1rj4ajzoo.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyMVE1v4zgM_TX0hWhg0x-JDz60zWQvC-xid4A9BrLExGoty5Xk1O2vX9hOM01QoCMEIUi-Rz4xCoX3-tgxV5A_QL6NxBAa6yr1LrQRUW3VW_WzYZRWMcRbiO-hiJePPPuU6k62g2JIH7UxugtOd6sG0h8LgMfArkPZCIdG-OelEaQPS3qOH4A2-72hvNAogB7xw6mBSoT1GYuIl4xESLe4N5O3l6bnlz33OiWgzVxhYl6aXKNFp_ZeU14AbeTcbYm3VqjhkgHanKxWQPdA5SycyquaiOg4DK774Bt74gm47_3CP2sFKuVMTiDdxpcCsN7ejHRxj9yxE4E9hobxZdCBkUfJ3usTo_CeTd2-3VCFN0vkAOks7fsDlCJk8eHXdaZz6udhqg__zZh4mtEnm1wzjD3N1olxAry8WqewDw4hf3C6R6CH5YfP4j_--vn34z8__pwewE3X0TpEHKfq9HhtF-Qs7Bg-C0sughZ71VmMX3QRnfqtO514DE7IoBPa4CddH4xbeC_ks_fqdQLGZ-HxzQUuWGNPxj_XZ5-Xsc2EK2BgHz4BJnOV9xw6RkTR3jR4Z2eHvmd3jjsOXz40oE0TQu8hvQfaAe2OVtW2DSvrjkC7d6BdmWSjTP6rD9P7XUjz92ujW8bB6-6IUMS3fwDu9QaKGHXnAwuF9vAVqvcTxrEf2uBRd_N757FnGVid43iH32lM3FMmnt6tXUWqSlWZliLiKinWSZwV5TqLmqpI1jKr1SYtSSh5KOI8r9OiyEit1_k65UhXFBMllGRJmVGerWKVp-VBirxkWRaJhCxmI3S7atuTmZpH2vuBq7zMqYhaUXPr5x1K1PErzkkgmlaqqybOXT0cPWRxq33wv6oEHVqu_h3qO9sHbUQ7r9ojd3hw1nyxWaLBtdXNSHRohnolrQHaTZXP5q539ollANrNejzQbtb7fwAAAP__cje1ug">