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

Reply via email to