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

    <tr>
        <th>Summary</th>
        <td>
            [InstSimplify] (a ^ b) ? (~a) ^ b : a ^ (~b)
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
      </td>
    </tr>

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

    <tr>
      <th>Reporter</th>
      <td>
          k-arrows
      </td>
    </tr>
</table>

<pre>
    Test code:
```c
int foo(int a, int b)
{
    return (a ^ b) ? (~a) ^ b : a ^ (~b) ;
}

```

Clang 15.0.0 (and Gcc trunk)
```asm
foo(int, int):                               # @foo(int, int)
        mov     eax, edi
        xor     eax, esi
        not eax
        ret
```

Clang 16.0.0 (and Clang trunk)
```asm
foo(int, int):                               # @foo(int, int)
        mov     ecx, edi
        xor     ecx, esi
        cmp edi, esi
        not     ecx
        mov     eax, -1
 cmovne  eax, ecx
 ret
```

https://godbolt.org/z/qdhKnj3af
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMVM2O2yAQfprxBcXCgB374EOyqauqx_YFMJCYXWxSwOluD332CttJNqttVuqpKBLD9xOGTxpz7_VhUKqGfAv5LuFj6Kyrn1bcOfvTJ62VL_V35QMSViqgG8A7wBso8PwT81kPAe2tBVLGigN5QLFogVSLYb2dC4QQciqMbkBASo4g_zTJENAmIr_5dIgoArpBsyISi2p7_sPdUtw29Bp8MHw4oCxPcYqn2waJPguBghuHp2trZyv3_YxcXrK8I0rp1PmdBYQiYPg97-XhcfX2NO2KP0eJkvqWf7buhvdv-MGGibsBnQof51C8zmHG_o8kxAdJiPeTEP1xMv0tpbP3XvyrbKFFb0-DusZ-8d2Ptgvh6ONYkAZIc7CytSak1h2ANL-AND9k93V4pHyfyJrKilY8UXVWlHlZZJRkSVdXkrK2UqylQq0xwRVVRFZZqSjfi7woE10TTCguMMMFK1mWlntMpWLlmmDFsMyAYdVzbVJjTn28O9Hej6ouaIZZYnirjD_Pt6ujaNWOBw8MG-2Dv9qCDmb6EnwZfPim-6PR-xfId_8yqcnoTP0mHR26sU2F7YE08dJlWx2dfVQiAGmmxj2QZur9TwAAAP__kcszxw">