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