[MLIR] Fold away divs and mods in affine ops with operand info
authorUday Bondhugula <uday@polymagelabs.com>
Fri, 10 Feb 2023 08:05:04 +0000 (13:35 +0530)
committerUday Bondhugula <uday@polymagelabs.com>
Fri, 10 Feb 2023 08:09:56 +0000 (13:39 +0530)
commit687f78210d07fe7f7741273bbaaf8c18864b6191
tree875f10120ef7295238cbbe7e563a699667870d73
parentdd380f9243dec95744a43ff73723e85ad77abbdb
[MLIR] Fold away divs and mods in affine ops with operand info

Fold away divs and mods in affine maps exploiting operand info during
canonicalization. This simplifies affine map applications such as the ones
below:

```
// Simple ones.
affine.for %i = 0 to 32 {
  affine.load %A[%i floordiv 32]
  affine.load %A[%i mod 32]
  affine.load %A[2 * %i floordiv 64]
  affine.load %A[(%i mod 16) floordiv 16]
  ...
}

// Others.
 affine.for %i = -8 to 32 {
   // Will be simplified %A[0].
   affine.store %cst, %A[2 + (%i - 96) floordiv 64] : memref<64xf32>
}
```

Reviewed By: springerm

Differential Revision: https://reviews.llvm.org/D143456
mlir/lib/Dialect/Affine/IR/AffineOps.cpp
mlir/test/Dialect/Affine/canonicalize.mlir