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

    <tr>
        <th>Summary</th>
        <td>
            Missed optimization (unnecessary sext): y >= x should imply y - x >= 0
        </td>
    </tr>

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

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

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

<pre>
    Test code

```c
#include <stdint.h>
extern void subroutine(uint64_t x);

void func1(int32_t a, int32_t b) {
   if (a > b)
      return;
   subroutine(b - a);
}

void func2(int32_t a, int32_t b) {
   if (a > b)
      return;
 subroutine((uint64_t)(int32_t)(b - a));
}

void func3(int32_t a, int32_t b) {
   if (a > b)
      return;
   subroutine((uint64_t)(uint32_t)(b - a));
}

uint64_t func4(int32_t a, int32_t b) {
   if (a > b)
 return 0;
   return (b - a);
}

uint64_t func5(int32_t a, int32_t b) {
 if (a > b)
      return 0;
   return (uint64_t)(int32_t)(b - a);
}

uint64_t func6(int32_t a, int32_t b) {
   if (a > b)
      return 0;
   return (uint64_t)(uint32_t)(b - a);
}
```

Actual result (x86-64 clang 20.1.0 with `-Os` option): `func1`, `func2`, `func4` and `func5` made unnecessary sign extensions (`movsxd` instruction). (https://godbolt.org/z/s3zvnET5e)

Expected result: `func1`, `func2` and `func3` compile to same code. `func4`, `func5` and `func6` compile to same code.

After the `(a > b)` conditional, Clang should be able to know that `(a <= b)`, which in turn implies `(0 <= b - a)`. In other words, `(b - a)` would be always nonnegative.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJy0VU2P4zYM_TXyhYghy98HH7KzCdBD0cveF7LFxGplKbCkxJlfX8h2Us-0sx0UWyBAQEl875GPkrm18qwRG5J_IfnXiHvXm7E5TBdlRhxpHbVG3JtvaB10RiCh-_Ar6PLrQsBSqTvlBQJJX6wTUru4J-mB0D1ODkcNVyMFWN-OxjupkbDKS-2K7LuDibCapF8W3PncyesuIayS2qXsuwNO2As8gpawGkgZzgOAPAFhFQeSHuadZRUARnR-1AsuwFvqFnYB88Fafn3HzX4m9xvmTd0h4UmzBE9dH0tL_8e2_E2c_6S6p5VBYfbfFS7igD7lrQsfW_aGOf8M87905h_JP2PZD3QVP8WzTyj7wK-ttMe1XWTuO-e5ghGtVy7gTVWxKzLoFNdnYDROYgo36XogBd39ZklBwVycNHrG3Yfl5bIWNBS2huxtmIU0rsUjzkM8cIHgtcYOreXjHcIrBOG10FYabYMaUtDBXO0kQoLU1o2-W8njsN87d7Ek3RN2JOx4NqI1ysVmPBN2fCXsaNPXqz58y3HpJqH7w3TBzqFYS_5xCVvNaYg7M1ykQnAGLB9wfg7jbZUbgPwdQPEhwGrFyeEIrkeYcbZzMCdqIUPpXAWOl9kf2xuvBLQIvF1A_9DmBq7nbgPyQtKvD5yQe-tl14PUMM-QHC5Kol3P0-f5x-wUNIZfNBjX4wg3Mwq71rgdsILC7SlF3fjdgjZa45k7ecU4Ek0q6rTmETZJmVVlUidFHfVNLsqsoOJU0hPrsjwtsxMV7FSVdVml9ISRbBhlOc3TJKmTmtVx1XV1LbKiSjjlZS5IRnHgUsVKXYfgfCSt9dgkGWNVGineorLzl40xjTeYdwlj4UM3NiFp1_qzJRlV0jr7F4yTTmHzq7QWxTzyg3zlwYD51m3HFie3XoZ7sCx0b3pYE7p7hzvsYHrs0ciPqnk3udL1vo07MxB2DBLWv91lNL9j5wg7zsItYce1smvD_gwAAP__-w83aQ">