<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/60007>60007</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[X86] Try to use VTESTPS/VTESTPD instead of VMOVMSKPS/VMOVMSKPD for allof/noneof/anyof reductions
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
RKSimon
</td>
</tr>
</table>
<pre>
https://godbolt.org/z/jhvxvhx5o
```
#include <x86intrin.h>
bool allpos_movemask(__m128 x) {
return _mm_movemask_ps(x) == 0;
}
bool allpos_testps(__m128 x) {
return _mm_testz_ps(x, x);
}
bool noneof_cmpgt_movemask(__m128 x, __m128 y) {
__m128 cmp = _mm_cmpgt_ps(x, y);
return _mm_movemask_ps(cmp) == 0;
}
bool noneof_cmpgt_testps(__m128 x, __m128 y) {
__m128 cmp = _mm_cmpgt_ps(x, y);
return _mm_testz_ps(cmp, cmp);
}
```
Unlike PTEST, TESTPS/TESTPD performs the analysis using just the float/double element signbits - we should be trying to make use of that as well.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0VE9vuzgQ_TTDZdSI2AGSA4ffL5RLVW216UZ7iwwMwa3_IGzSpJ9-ZYL6Z1utelkpig3zZua9h8fCOXk0RDkkvyEpIjH6zg75n3c7qa2JKttc8s773gH_BawEVh5tU1nlF3Y4AitfgZVP3el86s6JhbiA-Bek8fy7PjIuTa3GhhD49rxOpfGDNIsO-O2MmP4raxUKpXrrDtqeSAv3DGx9OOglW-MZ2AYh-33FIiIO5MfB4EHrN_ihd8DWVygvgBcYA59TICu-9vHk_JTzky4B_PrWYjuBv5b_0MRYQ7Y91Lo_-u8lbXHeX740ngO17oOWicC10DuBy0cC_2lJrfsfmPKJ7zfW_H9sP1g7Ud3ilfE39n4-XH8ZJZ8JHx5vd48hLawPO2DltCmwp6G1g3boO0JhhLo46XB00hzxaXR-et8qKzywsrFjpQhJkSbjMQxGJb3DG3whdJ0dVYMVoR8uId1b1OKZcHSEtkXfCY_C4QsptYianDcbvhER5cs04ynjLMmiLidKq3W7qnnbNJtks-JNtWJpvdqkqyxJ0iqSOYsZj5dLvkxYnGSLOouXSdNmGWUizjZLWMWkhVQLpU46DGEknRspT-M4ziIlKlJuGmbGDL3gFATGwmwPeci5qcajg1WspPPuvYqXXk23wN_rFJICH4dLkBjU7d9c3c-2SuM8iSbo3t__sb_f3V3D877A1g5hxmwLrLweK2ClMBfb4kDNWHtpjYvGQf37cpG-G6tFbTWwMnCbl5t-sE9Uh680KXLAyknxPwEAAP__iRBxnw">