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

    <tr>
        <th>Summary</th>
        <td>
            [ConstraintElimination] Missed optimization: fold `max(Ext(b), Ext(a) + 1)` to `Ext(b)` if `a s< b`
        </td>
    </tr>

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

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

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

<pre>
    Alive2 proof: https://alive2.llvm.org/ce/z/A8dtGp

### Motivating example 
Similar to #75155
```llvm
define i64 @src(i32 %a, i32 %b){
entry:
  %cmp = icmp slt i32 %a, %b
  br i1 %cmp, label %then, label %else

then:
  %sa = sext i32 %a to i64
  %sb = sext i32 %b to i64
  %add = add i64 %sa, 1
  %smax = call i64 @llvm.smax.i64(i64 %sb, i64 %add)
  call void @dummy()
  ret i64 %smax

else:
  ret i64 0
}
```

can be folded to:
```llvm
define i64 @tgt(i32 %a, i32 %b){
entry:
  %cmp = icmp slt i32 %a, %b
  br i1 %cmp, label %then, label %else

then:
  %sb = sext i32 %b to i64
  call void @dummy()
  ret i64 %sb

else:
  ret i64 0
}
```

And for the unsigned version, we missed it too.
AFAIK, ConstraintElimination folds `ZExt(a) < ZExt(b)` to `true` if `a u< b`, so I tag ConstraintElimination here.

### Real-world motivation

This snippet of IR is derived from [redis/src/db.c@xreadGetKeys](https://github.com/redis/redis/blob/6df42df2917622cfe791b0f563fa82053965820f/src/db.c#L2554) (after O3 pipeline).
The example above is a reduced version. If you're interested in the original suboptimal IR and optimal IR, see also:https://godbolt.org/z/Kz4M6WPxn

**Let me know if you can confirm that it's an optimization opportunity, thanks.**
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzUVV-P2zYM_zTKC9HApmPHfshDLmmKQ3vY0A3YsDfJohOtsmRIci65Tz9ISe6ctlsxYC8DjDg0_0j8kfyRe6_2hmjFygdWbmd8DAfrVr9vDueZsPK8Wmt1JITBWduxYg2HEAbPijXDHcMdT9q51sd-bt2e4a4lhrsXhrt1LcOHgWVblq2vv1hcHniyQR15UGYPdOL9oAkuJr-oXmnuIFhgWCzLvCyvvlV2eeJRl0-SOmUIVLUAtsi8axnWqkBgWHKGG7j-Fwwbtny4-JAJ7hxvnySI-rYfgBVbUPGP1wGmMZL_1VY4UPnVI-o0F6SjHA5k7j6Q9jRNPBncHep5OtPT6e28mLSqFlMr8Y2V-NaKS5nM4juBEcPH--TTUD0_JauWa33DLJUtauYxItY3b5HguwhcygjgNVLyPlolo7sc-_7MsJ7oHYXXO_T8NAUhgfIGws0yu9ost18VeurbcgOCoLNakoRgX-P8sC3CPvyf2uLHBf83FRD_Ff5rI6GzDsKBYDSJMSQcyXllU4rPBL3yniSoAMHa-dVtt378GPUba3xwXJnwXqteGR6UNamcHliV_fH-FKvEGTbAig1c5VSiKktkUGXBjRQl1UWJwxgtRbwobsBbeITA939z0oEczb9PRZ-J63fP1mkJ_ZWVrJma_npQHrxRw0ABbAePn0F5kOTUkSR0zvbAygdHUnmGu0RDOynmLVtkJ0dcfqDwkc6elVuG9T177lU4jGLe2p7h7hbh9hbaCoa7SnYLlB02-bJCbDtaNrnIurIqOl5jVhZNVdaYdfdnY_EJy3KRAMWad4Ec_FTAoAbSyhDDZn7Ljl4pmAt7pJgcB0dybN9qPIfHDs52ZLh0BMoEcuRDLLdJPWGd2ivDNfhR2CGonuuIEzcS3sRUJyLg2scB_goKK4XV4bpE4v74-LJ4qn77-WTu6xafTxSgJ_hi7HNsh7MdITJEa02nXA_hwAOowHDpgZvLDdTLpRPsMFgXRqPCOd4nHLj54ueXsDO5KmRTNHxGq3yZ1UXV5HUxO6y6DNs6q0tsmmVZChJduWiaLpfLqmtb0c3UCjNcZJg3eV02i2Ke8UZi1RZZm5U5z5AtMuq50q-bcqa8H2lVIy7zWWIIn1YwoqFnSEqGGDeyW0Wfd2Lc-0jZygf_FiWooNPu_m7fs3ILT5e5nIIQ13icvThHkaSxnswbbmA6jfgA-d0Y3o_mbRj9bRhno9Orf-jyxNOX17vB2T-pDQx3Kd_Y9AmPvwIAAP__hyl5TQ">