[mlir][Linalg] Reimplement and extend getStridesAndOffset
authorNicolas Vasilache <ntv@google.com>
Thu, 2 Jan 2020 20:25:21 +0000 (15:25 -0500)
committerNicolas Vasilache <ntv@google.com>
Mon, 6 Jan 2020 14:41:38 +0000 (09:41 -0500)
commitd67c4cc2eb4ddc450c886598b934c111e721ab0c
tree3f4c0712f32c86f6e99e32898c69b53fc94bd45b
parentd45aafa2fbcf66f3dafdc7c5e0a0ce3709914cbc
[mlir][Linalg] Reimplement and extend getStridesAndOffset

Summary: This diff reimplements getStridesAndOffset in a significantly simpler way by operating on the AffineExpr and calling into simplifyAffineExpr instead of rolling its own saturating arithmetic.

As a consequence it becomes quite simple to extend the behavior of getStridesAndOffset to encompass more cases by manipulating the AffineExpr more directly.
The divisions are still filtered out and continue to yield fully dynamic strides.
Simplifying the divisions is left for a later time if compelling use cases arise.

Relevant tests are added.

Reviewers: ftynse

Subscribers: mehdi_amini, rriddle, jpienaar, burmako, shauheen, antiagainst, arpith-jacob, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D72098
mlir/lib/IR/StandardTypes.cpp
mlir/test/AffineOps/memref-stride-calculation.mlir