More affine expr simplifications for floordiv and mod
authorUday Bondhugula <uday@polymagelabs.com>
Tue, 10 Dec 2019 23:49:07 +0000 (15:49 -0800)
committerA. Unique TensorFlower <gardener@tensorflow.org>
Wed, 11 Dec 2019 00:00:53 +0000 (16:00 -0800)
commit36a415bcc543553891af6809c5256e6e2469357d
tree320ecbe773853b8474cfa57a2e6c119b33e82960
parentd1213ae51d2e321680a4c62c32358e3e07ff3f66
More affine expr simplifications for floordiv and mod

Add one more simplification for floordiv and mod affine expressions.
Examples:
 (2*d0 + 1) floordiv 2 is simplified to d0
 (8*d0 + 4*d1 + d2) floordiv 4 simplified to 4*d0 + d1 + d2 floordiv 4.
 etc.

 Similarly, (4*d1 + 1) mod 2 is simplified to 1,
            (2*d0 + 8*d1) mod 8 simplified to 2*d0 mod 8.

Change getLargestKnownDivisor to return int64_t to be consistent and
to avoid casting at call sites (since the return value is used in expressions
of int64_t/index type).

Signed-off-by: Uday Bondhugula <uday@polymagelabs.com>
Closes tensorflow/mlir#202

COPYBARA_INTEGRATE_REVIEW=https://github.com/tensorflow/mlir/pull/202 from bondhugula:affine b13fcb2f1c00a39ca5434613a02408e085a80e77
PiperOrigin-RevId: 284866710
mlir/include/mlir/IR/AffineExpr.h
mlir/lib/IR/AffineExpr.cpp
mlir/test/IR/affine-map.mlir
mlir/test/Transforms/Vectorize/compose_maps.mlir
mlir/test/Transforms/unroll.mlir