| Issue |
76585
|
| Summary |
[InstCombine] Missed optimization for `(x * z) % (y * z) == 0` => `x % y == 0`
|
| Labels |
llvm:instcombine,
missed-optimization
|
| Assignees |
|
| Reporter |
Kmeakin
|
`(x * z) % (y * z) == 0` => `x % y == 0` when the multiplications/modulus do not overflow:
[alive](https://alive2.llvm.org/ce/z/ylAxft)
```llvm
define dso_local i1 @src1(i8 noundef %0, i8 noundef %1, i8 noundef %2) {
%4 = mul nuw i8 %2, %0
%5 = mul nuw i8 %2, %1
%6 = urem i8 %4, %5
%7 = icmp eq i8 %6, 0
ret i1 %7
}
define dso_local i1 @tgt1(i8 noundef %0, i8 noundef %1, i8 noundef %2) {
%4 = urem i8 %0, %1
%5 = icmp eq i8 %4, 0
ret i1 %5
}
define dso_local i1 @src2(i8 noundef %0, i8 noundef %1, i8 noundef %2) {
%4 = icmp ne i8 %1, -1
tail call void @llvm.assume(i1 %4)
%5 = mul nsw i8 %2, %0
%6 = mul nsw i8 %2, %1
%7 = srem i8 %5, %6
%8 = icmp eq i8 %7, 0
ret i1 %8
}
define dso_local i1 @tgt2(i8 noundef %0, i8 noundef %1, i8 noundef %2) {
%4 = srem i8 %0, %1
%5 = icmp eq i8 %4, 0
ret i1 %5
}
declare void @llvm.assume(i1 noundef)
```
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs