[llvm] [InstCombine] Add cast support in simplifyUsingControlFlow (PR #142263)

Yingwei Zheng via llvm-commits llvm-commits at lists.llvm.org
Sun Jun 1 08:06:19 PDT 2025


https://github.com/dtcxzyw requested changes to this pull request.

Miscompilation reproducer: https://alive2.llvm.org/ce/z/jEQKTt
```
define i32 @src(i32 %0, i32 %1) {
entry:
  %tobool265.not.i.i.i330.i = icmp eq i32 %0, 0
  br i1 %tobool265.not.i.i.i330.i, label %if.else351.i.i.i356.i, label %cleanup748.i.i.i.i

if.else351.i.i.i356.i:                            ; preds = %entry
  %tobool380.not.not.i.i.i357.i = icmp eq i32 %1, 0
  br i1 %tobool380.not.not.i.i.i357.i, label %cleanup748.loopexit.i.i.i.i, label %cleanup748.i.i.i.i

cleanup748.loopexit.i.i.i.i:                      ; preds = %if.else351.i.i.i356.i
  br label %cleanup748.i.i.i.i

cleanup748.i.i.i.i:                               ; preds = %cleanup748.loopexit.i.i.i.i, %if.else351.i.i.i356.i, %entry
  %2 = phi i32 [ 1, %cleanup748.loopexit.i.i.i.i ], [ 0, %entry ], [ -1, %if.else351.i.i.i356.i ]
  ret i32 %2
}

define i32 @tgt(i32 %0, i32 %1) {
entry:
  %tobool265.not.i.i.i330.i = icmp eq i32 %0, 0
  br i1 %tobool265.not.i.i.i330.i, label %if.else351.i.i.i356.i, label %cleanup748.i.i.i.i

if.else351.i.i.i356.i:                            ; preds = %entry
  %tobool380.not.not.i.i.i357.i = icmp eq i32 %1, 0
  br i1 %tobool380.not.not.i.i.i357.i, label %cleanup748.loopexit.i.i.i.i, label %cleanup748.i.i.i.i

cleanup748.loopexit.i.i.i.i:                      ; preds = %if.else351.i.i.i356.i
  br label %cleanup748.i.i.i.i

cleanup748.i.i.i.i:                               ; preds = %cleanup748.loopexit.i.i.i.i, %if.else351.i.i.i356.i, %entry
  %2 = sext i1 %tobool265.not.i.i.i330.i to i32
  ret i32 %2
}
```

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


More information about the llvm-commits mailing list