Issue |
142674
|
Summary |
Missed Optimization: umul.with.overflow(x, C0).overflow || (prod > C1) —> x > C1 // C0
|
Labels |
new issue
|
Assignees |
|
Reporter |
Cancelll
|
```llvm
define i1 @src(i64 %0) {
%2 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %0, i64 168)
%3 = extractvalue { i64, i1 } %2, 0
%4 = extractvalue { i64, i1 } %2, 1
%5 = icmp ugt i64 %3, -16
%6 = or i1 %4, %5
ret i1 %6
}
define i1 @tgt(i64 %0) {
%2 = icmp ugt i64 %0, 109802048057794950
ret i1 %2
}
```
Alive2: https://alive2.llvm.org/ce/z/ubxNYr
A real world pattern: https://github.com/dtcxzyw/llvm-opt-benchmark/blob/a0891f2d52a309965f6aacf4eea993c8e913a614/bench/uv-rs/optimized/9pno5nkqeqshs01abwz0hzted.ll#L2049-L2053
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs