[Mlir-commits] [mlir] [MLIR][Vector] Add canonicalization for interleave/deinterleave chain (PR #196979)
Artem Kroviakov
llvmlistbot at llvm.org
Wed May 13 03:18:02 PDT 2026
================
@@ -8346,6 +8346,46 @@ Value mlir::vector::selectPassthru(OpBuilder &builder, Value mask,
// InterleaveOp
//===----------------------------------------------------------------------===//
+namespace {
+
+/// This canonicalization folds the following round-trip identity:
+/// interleave(deinterleave(x).even, deinterleave(x).odd) -> x
+struct InterleaveDeinterleaveFolder : public OpRewritePattern<InterleaveOp> {
+ using Base::Base;
+
+ LogicalResult matchAndRewrite(InterleaveOp interleaveOp,
+ PatternRewriter &rewriter) const override {
+ auto lhsDefOp = interleaveOp.getLhs().getDefiningOp<DeinterleaveOp>();
+ auto rhsDefOp = interleaveOp.getRhs().getDefiningOp<DeinterleaveOp>();
+ if (!lhsDefOp || !rhsDefOp)
+ return rewriter.notifyMatchFailure(
+ interleaveOp,
+ "expected both operands to be defined by a deinterleave op");
+ if (lhsDefOp != rhsDefOp)
----------------
akroviakov wrote:
Done
https://github.com/llvm/llvm-project/pull/196979
More information about the Mlir-commits
mailing list