[mlir] Avoid folding `index.remu` and `index.rems` for 0 rhs
authorrikhuijzer <rikhuijzer@pm.me>
Wed, 31 May 2023 17:45:05 +0000 (10:45 -0700)
committerJeff Niu <jeff@modular.com>
Wed, 31 May 2023 17:45:26 +0000 (10:45 -0700)
commit2e4e218474320abf480c39d3b968a5a09477ad03
treec75f41c42923b34da2bbafb557196846560f4727
parent3332dc32580751885eef797f6657d363091f69f3
[mlir] Avoid folding `index.remu` and `index.rems` for 0 rhs

As discussed in https://github.com/llvm/llvm-project/issues/59714#issuecomment-1369518768, the folder for the remainder operations should be resillient when the rhs is 0.
The file `IndexOps.cpp` was already checking for multiple divisions by zero, so I tried to stick to the code style from those checks.

Fixes #59714.

As a side note, is it correct that remainder operations are never optimized away? I would expect that the following code

```
func.func @remu_test() -> index {
  %c3 = index.constant 2
  %c0 = index.constant 1
  %0 = index.remu %c3, %c0
  return %0 : index
}
```
would be optimized to
```
func.func @remu_test() -> index {
  return index.constant 0 : index
}
```
when called with `mlir-opt --convert-scf-to-openmp temp.mlir`, but maybe I'm misunderstanding something.

Reviewed By: Mogball

Differential Revision: https://reviews.llvm.org/D151476
mlir/lib/Dialect/Index/IR/IndexOps.cpp
mlir/test/Dialect/Index/index-canonicalize.mlir