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

    <tr>
        <th>Summary</th>
        <td>
            Simplification Comparison (Clang15 vs Clang16)
        </td>
    </tr>

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

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

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

<pre>
    Consider the following two functions:
```cpp
#define I (-__INT_MAX__ - 1)

int foo(int x, int y)
{
  return ((x & I) ^ I) == ((~y & I) ^ I);
}

int bar(int x, int y)
{
  return (x ^ y) < 0;
}
```

Clang15 can simplify `foo` to `bar`, but Clang16 (and trunk) cannot.
https://godbolt.org/z/P3fMee9q3

Clang15
```asm
foo(int, int):                               # @foo(int, int)
        mov     eax, edi
        xor     eax, esi
        shr     eax, 31
 ret
bar(int, int):                               # @bar(int, int)
 mov     eax, edi
        xor     eax, esi
        shr     eax, 31
 ret
```

Clang16 (and trunk)
```asm
foo(int, int): # @foo(int, int)
        not     edi
 and     edi, -2147483648
        and     esi, -2147483648
        xor eax, eax
        cmp     edi, esi
        sete    al
 ret
bar(int, int):                               # @bar(int, int)
 mov     eax, edi
        xor     eax, esi
        shr     eax, 31
 ret
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzcVU2P4jgQ_TWViwVyyvk85EDDIvWhVyvtHvaGnMQBTyc2YzsNzGF--8hJoBsataZHmstYCBeuj_d4ZZW5tXKrhCggfoB4FfDe7bQpnmfcGH2wQanrU7HUyspaGOJ2gjS6bfVBqi1xB02aXlVOamWBLYCugC4goeOn2u-nE2S1aKQS5JEAZrPN5vHv_zZPi_83GzIjIWA-xQ3fUjnSaA2YeesIuCTeOL2GpQ-jQYgRrjfKFwXMjgQwIY-AOYH4r8lgK2CrKeD76X0EsIdz1dUti5KbT7I4DnVPI_KS0DvVz-q8BVu2XG3DmFRcESu7fSubE4GEehkSSpz2PzybhHoiZe_ImJJ4UK5q4kyvnj1sxZXSbj7W3Tm3HxqDa8D1Vtelbt1cmy3g-hvg-h_WPAmRf2V3yNzQ5bYbTy6tmSQZNFyQjxcgIxDRe7mThuPq9MuwCz4oLmp57T9qc-W3N367u_KzcHIb4Ubr0tJfYH8vdyz_22l_cGveXYFPNu5nW6O0Gzle_pwHPZ_gkswwjNIoY0mUXWde4uzHcV6ls0L8eO2ruv1brPcKCicGrPZP63hQF6zOWc4DUYRJHkURRpgHu4KLlJY1D3kTpyypopSFcRTGcR7mqYgEDWSBFBnNwzCMMKXpPKmzGtMsDuM0bERaQURFx2U7b9uXzo-FQFrbiyKJ8yQLWl6K1g7vAqISBzI4AdE_E6bwObOy31qIaCuts69VnHStKP4dB5msuH8fyFJ3e26k1cOgPE-8F3ueZIB50Ju2uJlZ0u36cl7pDnDtAaZttjf6i6gc4HqgZQHXA-0fAQAA__9pZslO">