[vector][mlir] Canonicalize to shape_cast where possible #140583
Draft
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Discussions suggest that we should use shape_cast as a canonical form of broadcast/transpose/extract where possible (see #138777)
For example these can all be expressed as shape casts:
This PR adds canonicalizes to convert the above 3 examples to shape_casts. It also removes patterns for
shape_cast(transpose) -> shape_cast
andtranspose(shape_cast) -> shape_cast
as these foldings are now reachable via the new canonicalization. Specifically
shape_cast(transpose) -> shape_cast(shape_cast) -> shape_cast
andtranspose(shape_cast) -> shape_cast(shape_cast) -> shape_cast
IMO the code is overall simplified by this PR. Other notes to reviewers:
static bool isOrderPreserving
unchanged, just moved closer to usage.ConvertIllegalShapeCastOpsToTransposes
#139706 (scalable vectors) so let's get that in first