[llvm] [InstCombine] Fix fail to fold (A >> C1) Pred C2 if shr is used multple times #83430 (PR #83563)

via llvm-commits llvm-commits at lists.llvm.org
Fri Apr 19 23:55:18 PDT 2024


SahilPatidar wrote:

@dtcxzyw in first iteration:
```IR
IC: Visiting:   %switch.i = icmp ult i1 %cmp4.i, true
IC: Old =   %switch.i = icmp ult i1 %cmp4.i, true
    New =   <badref> = xor i1 %cmp4.i, true
ADD:   %switch.i = xor i1 %cmp4.i, true
IC: ERASE   %1 = icmp ult i1 %cmp4.i, true
ADD DEFERRED:   %cmp4.i = icmp sgt i64 %shr, 348731
ADD DEFERRED:   %switch.i = xor i1 %cmp4.i, true
ADD:   %cmp4.i = icmp sgt i64 %shr, 348731
IC: Visiting:   %cmp4.i = icmp sgt i64 %shr, 348731
```
second:
```IR
IC: Visiting:   %switch.i = xor i1 %cmp4.i, true
IC: Replacing   %switch.i = xor i1 %cmp4.i, true
    with   %cmp4.i = icmp sle i64 %shr, 348731
ADD:   %switch.i = xor i1 %cmp4.i, true
IC: Mod =   %switch.i = xor i1 %cmp4.i, true
    New =   %switch.i = xor i1 %cmp4.i, true
IC: ERASE   %switch.i = xor i1 %cmp4.i, true
ADD DEFERRED:   %cmp4.i = icmp sle i64 %shr, 348731
ADD DEFERRED:   %spec.select.i = select i1 %cmp4.i, i64 %shr, i64 348731
ADD:   %cmp4.i = icmp sle i64 %shr, 348731
IC: Visiting:   %cmp4.i = icmp sle i64 %shr, 348731
IC: Old =   %cmp4.i = icmp sle i64 %shr, 348731
    New =   <badref> = icmp slt i64 %shr, 348732
ADD:   %cmp4.i = icmp slt i64 %shr, 348732
IC: ERASE   %1 = icmp sle i64 %shr, 348731
ADD DEFERRED:   %shr = ashr i64 %mul, 4
ADD:   %shr = ashr i64 %mul, 4
IC: Visiting:   %shr = ashr i64 %mul, 4
IC: Visiting:   %cmp4.i = icmp slt i64 %shr, 348732
```
third:
```IR
IC: Old =   %cmp4.i = icmp slt i64 %shr, 348732
    New =   <badref> = icmp slt i64 %mul, 5579712
ADD:   %cmp4.i = icmp slt i64 %mul, 5579712
IC: ERASE   %1 = icmp slt i64 %shr, 348732
ADD DEFERRED:   %shr = ashr i64 %mul, 4
ADD DEFERRED:   %spec.select.i = select i1 %cmp4.i, i64 %shr, i64 348731
ADD:   %shr = ashr i64 %mul, 4
IC: Visiting:   %shr = ashr i64 %mul, 4
IC: Visiting:   %cmp4.i = icmp slt i64 %mul, 5579712
IC: Visiting:   %spec.select.i = select i1 %cmp4.i, i64 %shr, i64 348731
IC: Visiting:   ret i64 %spec.select.i
```


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


More information about the llvm-commits mailing list