0e8107bfc7
* [Debug] Error logging in DetectIterMap * [Affine] Allowed PrimExpr argument to NormalizeIterMapToExpr This allows it to be used for any expression containing an `IterMapExpr`, not just expressions whose top-level node is an `IterMapExpr`. * [Affine] Implemented DetectPaddedIterMap The existing DetectIterMap tries to rewrite index expression as a linear combination of split/fused iterators, where the new iterators cover the exact same indices as the original expression. DetectPaddedIterMap relaxes this condition, allowing the new iterators to cover a superset of indices that the initial index expression covered. It uses the minimum amount of padding necessary to represent these transformations, and also a predicate that identifies any padding that has been added. This is a utility function to be used for layout transformations of buffers, in cases where the pre-transformation shape of the buffer does not evenly fit into the post-transformation shape. * [IndexMap] Implemented IndexMap::NonSurjectiveInverse Allow non-surjective transformations, with DetectIterMap used to determine the minimum padding to insert. Returns the inverse function, along with a predicate that identifies padding indices. The predicate is in terms of the transformed variables. * [IndexMap] Exposed methods to python - `IndexMap::Inverse` exposed as `IndexMap.inverse` - `IndexMap::MapShape` exposed as `IndexMap.map_shape` - `IndexMap::NonSurjectiveInverse` exposed as `IndexMap.non_surjective_inverse` * [IndexMap] Extracted _assert_equal_index_map into class method In preparation for adding additional tests for the IndexMap class, which will require this functionality. * [IndexMap] Added unit tests for new behavior * Re-enabled divisibility check in CheckMapping Initially disabled as dynamic shapes resulted in padded lengths whose divisiblity couldn't be proven. Re-enabled along with a simplification rule to resolve it. * Fixed breakage in compute_at primitive * Corrected typos/examples in docstring