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

    <tr>
        <th>Summary</th>
        <td>
            [InstCombine] missed reducing/canonicalizing add overflow patterns
        </td>
    </tr>

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

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

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

<pre>
    Forking this off from the multiplication examples in issue #59217 -
These are all equivalent, but we don't transform them:

```ir
define i64 @src(i32 %a, i32 %b) {
  %a8 = zext i32 %a to i64
  %b8 = zext i32 %b to i64
  %m8 = add nuw nsw i64 %b8, %a8
  %hi64 = lshr i64 %m8, 32
  ret i64 %hi64
}

define i64 @tgt(i32 %a, i32 %b) {
  %nota = xor i32 %a, -1
  %ov = icmp ult i32 %nota, %b
  %r = zext i1 %ov to i64
  ret i64 %r
}

declare {i32, i1} @llvm.uadd.with.overflow.i32(i32, i32)

define i64 @tgt2(i32 %a, i32 %b) {
  %s = call {i32, i1} @llvm.uadd.with.overflow.i32(i32 %a, i32 %b)
  %ov = extractvalue {i32, i1} %s, 1
  %r = zext i1 %ov to i64
  ret i64 %r
}
```

https://alive2.llvm.org/ce/z/DX2YCM
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJytVE1v3CAQ_TX4MsrKxh9rH3xIslqph956aI8YY5sWwxbwbppf34Fdt46SVlFVyV_Am-G9Z2Y60_9oj8Z-k3oEP0kHZhhgsGbGkYB5UV6elOTMS6NBPLH5pIQDqUE6twggNC8bmu3hjqQHkt5_moQTwCzeSoH4vsgzU0J7Qh-hWzxcBPRGE7r34C3TbjA27jST_P6a4fas0usl7XWiF4PUAmRVAClSZzmhtcwpEihZSH777ghtgOwfrkEQl2sg-QGexZNfUQy8Cak2qO41qnuNmq8o1veglwtod7kyCvGBRdxug5_iKkYoN9kVOkdoTlecFX5dmn5tR_aHrR8v5fvRv1u-Np5FCk_GwjbkLtugzDliJJ9PgP98BYbgm65ug7Ybr7Jb-EuvNprsHwRxFY4JksW9ooQMIUGdUud5t6DHu4v0086chR2Uuewirl7R4dX81SL6bo9c1MPDkf0XPm_t8NpbdMsy7rEeljdkI4kwyv6by2sBbS2avD-5UGn0iBdT8izoLsozdsQZLvDxjPfhM_3y-DERbVZVTZU3TVEkfZv3Td6wxEuvREvKhw_a-Uczd2g7KQ8wY0sQPZLqF47tJORj2mhsHko-h_4SymZ1D07Me2G1Sxar2pfERrR56XbczDgI9G6vu5M1XwXHs3-M3QcdO2L3yWkytSnLSs5FymvOy7oq6rrMqrzum7KscXpIFOuEcoE2ck1kS1NKs4zWGS0ppTvKClRX13XVpLwqevzvYmZS_bInsW3k0C2jC4dCOu9-LzLn5KiFWPOzxU_GthbrB1XKcfJJpNxGvj8BQLCHCg">