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>
}
Would exprs with rhs = 0 not already be rejected by the verifier?