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

    <tr>
        <th>Summary</th>
        <td>
            [X86] Avoid large constants for min_signed_value check
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            backend:X86,
            missed-optimization
      </td>
    </tr>

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

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

<pre>
    https://godbolt.org/z/hhK4h1Es1
```c
bool cmp_min_signed_value_i32(uint32_t x) {
    return x == 0x80000000;
}
bool cmp_min_signed_value_i64(uint64_t x) {
    return x == 0x8000000000000000ULL;
}
```
```asm
cmp_min_signed_value_i32(unsigned int): # @cmp_min_signed_value_i32(unsigned int)
  cmpl $-2147483648, %edi # imm = 0x80000000
  sete %al
 retq
cmp_min_signed_value_i64(unsigned long): # @cmp_min_signed_value_i64(unsigned long)
  movabsq $-9223372036854775808, %rax # imm = 0x8000000000000000
  cmpq %rax, %rdi
  sete %al
 retq
```
For cases where we're testing for i32/i64 min_signed_value values, we could just negate the result and copy the overflow flag:
```asm
cmp_min_signed_value_i32:
  negl %edi
  seto %al
 retq
cmp_min_signed_value_i64:
  negq %rdi
  seto %al
 retq
```
i8/i16 might require sign-extension to avoid stalls, which might not be worth it:
```asm
cmp_min_signed_value_i8:
  movsx %dl, %edi
  negl %edi
  seto %al
  retq
cmp_min_signed_value_i16:
 movsx %di, %edi
  negl %edi
  seto %al
  retq
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJykVU2P2zYQ_TXUZeAFRVISddDBietLcmpRoDeDkmYlJhRpk5Tt5NcX-nA29TbJGhEMGxzzzZv3OCOqEHRnESuSvSPZLlFj7J2v_vzwlx6cTWrXfqn6GI-B8C1he8L2nWtrZ-KT8x1h-6-E7fv-g-jTP0JK6I7QLcnp8mmWde2cgWY4HgZtDzNbezgrM-JBc0aYHLWNnB0iXAkrgRTvFhgAgMc4egtXIHxH-A7oVdLlIXzdRordL2lysdLk4kGa2_P3x4-vGb8JvVuqMCyRn4m2SxC0jYSVhG-BMA5E0AdAq4BmOBogTGxYKgoheS4kYe-BsAxbPafVwwB3_q3YgBGnncqsEY_x9LPqFy9vhRhnu7eU__-otYbBnVUdTrOEkjHOC0Z5LjNRFJmkNy1eXX-ghd5paobjaUXcsK1-g-C789w7D40KGODSo0e4IGGFR4gYorYdPDsP87nsdS7gXjPM32Eq4ILQuNG08GkMESx2KiLEHsFjGE0EZVto3PHLHHNn9M_GXeDZqG4aukd76waBicmsXfCdevfocf8n4em1nT9KeGenlpNTaQ6D7voIHk-j9ggT3QavEW3QzkJ0oM5OtxCiMmaxr9dNv6Ksi1AjXJyPPej4sD_yOzWDO4eppbLWvIzLI9790rw0f6F7YdO_zfZNbdJWvC15qRKs0rzMSkYLKZO-yqTMs6KleSHKXImspU2WPpeiLkUqZCsSXTHKOC2ZTAuaM_lUF4oWTVEKhYynMiWC4qC0eTLmPEwv-0SHMGKVFwUtE6NqNGG-NBirVfMZbUv49h-ZE8YIe08YG3QI2G7cMepBf1VROzv9l-0SX005N_XYBSKo0SGGF5aoo5lvoylXtoPt3A1G-W6aIhuisjHMs_dq4poem8_J6M39jaVjP9ZPjRsI209E68_m6N0nbOLUl5O2QNh-lvdvAAAA__8wRRlT">