[llvm] Allow folding icmp eq (add X, C2), C when there is more than one-use when we can compute the range (PR #144566)

Craig Topper via llvm-commits llvm-commits at lists.llvm.org
Wed Jun 18 17:40:34 PDT 2025


topperc wrote:

> > > @topperc this is having too many side effects. I think we should do what I originally did for now and then I will invest working on a proper fix because this is not going to be easily done in one PR
> > 
> > 
> > Ok. Is there a known workload that benefits from this?
> 
> Plenty. Let me ask @dtcxzyw

X86/RISCV/ARM/AArch64 all generates the same code for these two IR functions. Do I need a larger test case to show improved code generation?

```
define i32 @add_check_zero(i32 %num) {                                           
  %add = add i32 %num, 1
  %cmp = icmp eq i32 %add, 0
  %cond = select i1 %cmp, i32 -1, i32 %add
  ret i32 %cond
}
                                                                                 
define i32 @add_check_zero_opt(i32 %num) {
  %a = call i32 @llvm.uadd.sat.i32(i32 %num, i32 1)
  ret i32 %a
}
```


https://github.com/llvm/llvm-project/pull/144566


More information about the llvm-commits mailing list