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

    <tr>
        <th>Summary</th>
        <td>
            Machines lacking AND-NOT should transform `(a & x) | (~a & y)` -> `(a & (x ^ y)) ^ y`
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          Validark
      </td>
    </tr>
</table>

<pre>
    Machines lacking an AND-NOT instruction should transform `select` into `select2`. [Godbolt link](https://godbolt.org/z/8oaGqqzbn)

```c
#include <stdint.h>

uint64_t select(uint64_t a, uint64_t x, uint64_t y) {
 return (a & x) | (~a & y);
}

uint64_t select2(uint64_t a, uint64_t x, uint64_t y) {
    return (a & (x ^ y)) ^ y;
}
```

RISC-V emit:
```asm
select:                                 # @select
 and     a1, a1, a0
        not     a0, a0
        and     a0, a0, a2
        or      a0, a0, a1
        ret
select2: # @select2
        xor     a1, a1, a2
        and     a0, a0, a1
        xor     a0, a0, a2
        ret
```


</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJycVE1v2zAM_TX0RUigUJY_Dj60SVPssA7Yhl4H2dZirYrUSvLW9rDfPsh20rppu2FCoJjkI_Wojye8VzsjZQX8HPgmEX3orKuuhVatcDdJbduH6qNoOmWkJ1o0N8rsiDDk7GqzuPr0lSjjg-uboKwhvrO9bklwwvjv1u0JZNRLLZsAGSXKBPvkQcjokgA_v7RtbXUgWpkb4BvAogvh1gM7A9wCbndjfGndDnD7CLgtrLi8u3usDWAJdAP0bJozOv6ayUamTKP7VhJgax9aZcKyA3bxPKlXJmTpt0AmolgcPQJwTY7W_cx6ACwJ5OdjEeJk6J0hgIUggFkEx_A6en6PrpgBbEqAfPMOCfxPFoScEAEs7gnwi3H5iB6-T3kc9u45rc8fvqwX10TuVYjHMQcKvx8908axYf13ByAjkB6uxMhZmHaIiVXsbJrpU0NxGBtGDH0teqxwiMYZ5xjryClmNcc4GZ43hLGjGeMXNe-nojPm-A_cVm_UeYf_kdur55S0FWtLVopEVquclowVnLOkq3DVMJFnJa9pi03KqeC5LLlgTS5y3haJqpBiShlFSlecsyWvaSazukjTgtVYI6RU7oXSS61_7uMbTJT3vawKlrE80aKW2g_agWjkLzIEATFKiatizqLudx5SqpUP_qlKUEHLU2E5qMprSvLXx5VRsgB2McO-cf8zmvROVy-URoWur5eN3QNuI9Ppb3Hr7I9BG7ZDfz5qUOz_TwAAAP__1fZn1A">