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

    <tr>
        <th>Summary</th>
        <td>
            Missing optimization for swapping `sub` and `zext`
        </td>
    </tr>

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

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

    <tr>
      <th>Reporter</th>
      <td>
          lukas-code
      </td>
    </tr>
</table>

<pre>
    I tried this code: [(Godbolt link)](https://alive2.llvm.org/ce/z/Czg_kT)
```llvm
define i1 @src(i8 %x) {
  %1 = sub nuw i8 255, %x
  %2 = zext i8 %1 to i16

  %3 = zext i8 %x to i16
  %4 = add nuw nsw i16 %2, %3
  %5 = icmp ult i16 %4, 256
  ret i1 %5
}

define i1 @src2(i8 %x) {
  %1 = zext i8 %x to i16
  %2 = sub nuw i16 255, %1

  %3 = zext i8 %x to i16
  %4 = add nuw nsw i16 %2, %3
  %5 = icmp ult i16 %4, 256
  ret i1 %5
}

define i1 @tgt(i8 %x) {
  ret i1 true
}
```

I expected to see this happen: Both `src` and `src2` are optimized to `tgt`.

Instead, this happens: Only `src2` is optimized.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzUlEFv6ygQxz_N-IIawdgQfPChbeRVD6u97H0FNrXZEmMZ3Kb59E_YSeNUeu-dn2TJAn785z-jGVQIthuMqYA_AT9kao69nyo3v6nw0PjWZNq3n9ULiZM1LYm9DSRtQ_5I0hWUf_lWexeJs8MbYAn8ACj7GMcA-SNgDVgrZ98N7px7P-781AHWjQGsz4D187n77-3fdI8egD6CoOuX2HWrNa92MMQyAgUNUwMorSSA_ARYEtg_rRhJW4xAfiBh1mSYP4iVBDkHfF7pG4YLdjanSFYpRqInlomLiRuZfydPd-TCFAuj2nYJOoSPdL6EuYTONzBfYNscRzK7eCWLRCL_Up1MXBJO9ldL-8PW2_ea4O-L8usc8L5wTGwqx_7IqsQu_rQoF6E4zea70LX_trovxJxG08TU_54EY9Yx6NU4miENwpOPPQGxdKegRA3tZYXLcjLEj9Ee7XlVALG4E3R3F2UI0ag25byRT0NE_hnc51bRhpvgLmurvC3zUmWmYmJP5b4sZJH1FedaiEaXuqBaSlEaWupWS7FnNBesNJmtkCIyZIiMMSx2yBVvpJZUMcOVbKCg5qis-5rczIYwm4qXhcTMKW1cuD4cU5WgBz13AQrqbIjhdi3a6Ez1tw3BDt3Vu4rWD-TVTyR8qHFMJynHWW9qmHoMBM3myVX3b0pnYz_rXeOPgPXyWqy_h3Hy_5smAtaL2QBYL35_BAAA__-rzln1">