Issue |
143658
|
Summary |
Missed optimization: InstCombine is blocked by other uses
|
Labels |
new issue
|
Assignees |
|
Reporter |
GINN-Imp
|
The following reduced IR is derived from https://github.com/Kitware/CMake/blob/bbaa25bca7ef2a969c034a0c3c5cd47a6037b56f/Utilities/cmcurl/lib/ftp.c#L1386
Godbolt: https://godbolt.org/z/1ojq9Ynd4
alive2 proof: https://alive2.llvm.org/ce/z/VWCrxT
missed optimization: `tail call void @use(i64 %3)` --> `tail call void @use(i64 0)`
InstCombine can optimize as expected when `%3` is not used in block `common.ret`.
```llvm
declare void @use(i64)
define i64 @ftp_state_list(i64 %0, i64 %1) local_unnamed_addr {
%3 = sub i64 %0, %1
%4 = icmp eq i64 %0, %1
br i1 %4, label %5, label %common.ret
common.ret: ; preds = %2, %5
ret i64 %3
5: ; preds = %2
tail call void @use(i64 %3)
br label %common.ret
}
```
expected:
```llvm
define i64 @tgt(i64 %0, i64 %1) local_unnamed_addr {
%3 = sub i64 %0, %1
%4 = icmp eq i64 %0, %1
br i1 %4, label %5, label %common.ret
common.ret: ; preds = %2, %5
ret i64 %3
5: ; preds = %2
tail call void @use(i64 0)
br label %common.ret
}
```
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs