<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">