<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/114505>114505</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [RISCV] vmsge_vx intrinsics with a large immediate should do vmsgt(x,imm-1)
        </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 following two functions have identical behavior:

```c
#include<riscv_vector.h>
vbool32_t vmsgeu(vuint32m1_t op1, size_t vl) {
    return __riscv_vmsgeu_vx_u32m1_b32(op1, 100, vl);
}
vbool32_t vmsgtu(vuint32m1_t op1, size_t vl) {
    return __riscv_vmsgtu_vx_u32m1_b32(op1, 99, vl);
}
```
but clang generates different code for them, less efficient for the vmsgeu case:
```asm
vmsgeu:
        li      a1, 100
        vsetvli zero, a0, e32, m1, ta, ma
        vmsltu.vx       v8, v8, a1
 vmnot.m v0, v8
        ret

vmsgtu:
        li      a1, 99
 vsetvli zero, a0, e32, m1, ta, ma
        vmsgtu.vx       v0, v8, a1
 ret
```
https://riscv.godbolt.org/z/63rTTanMY

Additionally, for a dynamic value known to not be the minimum value for the given integer type, it would presumably be better to decrement it in the GPRs than doing the mask negation, e.g. https://riscv.godbolt.org/z/14qPd643P (esp. if the decrement can be hoisted out of a loop).
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJysVE2P2zYQ_TX0ZbACRUle66BD4q2LHgos0kWBngxKHEls-OGSI3m9v76gLGfjIg0KNIYhipjh45v3RiNj1INDbFj1kVVPGznR6EOj3qS2ctN6dWleRoTeG-PP2g1AZw_95DrS3kUY5YygFTrSnTTQ4ihn7QMrPjD-xPjtueXXf7fuRaFdZyaFrNgHHbv5OGNHPmQjK3665syt96YQR4LZxgEnJnbzpB0VwuZHAn_KmdhD1G-YUgwTNbDHj9ezAAABaQoOjscVfwE5zq_HaUFoC8HEbkXJOU_LgsKKFYQ9Pn2LCf0IJvRvTOr6O0S-yHjdthNBZ6QbYECHQRJGULrvMaAj6LxKtgWgEW0CNRgjYN_rTqf4GlrVhU5GfHftdpGMdtXg6sEtAdaf0ddVfpHxLjxHpNloeMPgU4JcZMZU8B7scobk8i7_cdBGQ1M2v972u0WW5SnzNXe2zlNmYeZr8A4iIH3dgqt13y-grm_Q_4P4cEecf4P4O7V7Q0eiU0wUxYGJw9It2eBV6w1lPgxMHN6YOGyL8PIi3a9_fF3eB6V0-iKlMZd0V3JXgro4aXUHszQTwmfnzw7Ig_MELS7uW-20neyaceuJQc_oQDvCAQPQ5YQJUxOc_WQUnALGycrWXBJMi0Qpy4PCLqBNzaUJtFugfn7-FIFG6UD5ZXykS2X8DA4HmRgvwmZDBv-t-rz861lty-IZmNhhPGWg-wX0_fJOusRr9DoSKvATge9BgvH-xESdbVRTqLqo5Qab_LHgZcG3Zb0Zm0rWuM13bSuwqnZ93fJS9FxuFe94nm_LjW4EF2We85wXOS_rrGq3mBdVwetc7rZdy0qOVmqTGTPbxHqjY5ywyfOy4tXGyBZNXEatEA7PsESZEGnyhiYdeminIbKSGx0pvsOQJrPM6E-__Lb_nVVP1-_2OL8mm4J2UXcRzprGVKgMA4K2FpWWhBDHxTblr-3JxO6Vib229iFnot5MwTT34g-axqnNOm-ZOCQO6_JwCv5P7IiJw8I8JkOupc2N-DsAAP__LZPpEw">