[Mlir-commits] [mlir] e29609a - [mlir][Vector] Add interleave(splat, splat) -> wide splat fold (#215255)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Tue Aug 11 01:25:15 PDT 2026
Author: Bryth
Date: 2026-08-11T10:25:10+02:00
New Revision: e29609a344a7488bcdbcb77443ce137f5e5a00e4
URL: https://github.com/llvm/llvm-project/commit/e29609a344a7488bcdbcb77443ce137f5e5a00e4
DIFF: https://github.com/llvm/llvm-project/commit/e29609a344a7488bcdbcb77443ce137f5e5a00e4.diff
LOG: [mlir][Vector] Add interleave(splat, splat) -> wide splat fold (#215255)
Added:
Modified:
mlir/include/mlir/Dialect/Vector/IR/VectorOps.td
mlir/lib/Dialect/Vector/IR/VectorOps.cpp
mlir/test/Dialect/Vector/canonicalize.mlir
Removed:
################################################################################
diff --git a/mlir/include/mlir/Dialect/Vector/IR/VectorOps.td b/mlir/include/mlir/Dialect/Vector/IR/VectorOps.td
index 24fdb4f0bb258..5f701cfcbd1b7 100644
--- a/mlir/include/mlir/Dialect/Vector/IR/VectorOps.td
+++ b/mlir/include/mlir/Dialect/Vector/IR/VectorOps.td
@@ -585,6 +585,7 @@ def Vector_InterleaveOp :
}
}];
let hasCanonicalizer = 1;
+ let hasFolder = 1;
}
class ResultIsHalfSourceVectorType<string result> : TypesMatchWith<
diff --git a/mlir/lib/Dialect/Vector/IR/VectorOps.cpp b/mlir/lib/Dialect/Vector/IR/VectorOps.cpp
index 35e93ef81516d..7dbe1847f077d 100644
--- a/mlir/lib/Dialect/Vector/IR/VectorOps.cpp
+++ b/mlir/lib/Dialect/Vector/IR/VectorOps.cpp
@@ -8493,6 +8493,15 @@ void InterleaveOp::getCanonicalizationPatterns(RewritePatternSet &results,
results.add<InterleaveDeinterleaveFolder>(context);
}
+OpFoldResult InterleaveOp::fold(FoldAdaptor adaptor) {
+ // interleave(splat(x), splat(x)) -> widened splat(x)
+ auto splat = dyn_cast_if_present<SplatElementsAttr>(adaptor.getLhs());
+ if (!splat || adaptor.getLhs() != adaptor.getRhs())
+ return {};
+ return SplatElementsAttr::get(getResultVectorType(),
+ splat.getSplatValue<Attribute>());
+}
+
std::optional<SmallVector<int64_t, 4>> InterleaveOp::getShapeForUnroll() {
return llvm::to_vector<4>(getResultVectorType().getShape());
}
diff --git a/mlir/test/Dialect/Vector/canonicalize.mlir b/mlir/test/Dialect/Vector/canonicalize.mlir
index bb1729cd7c3bc..20ce397f10b22 100644
--- a/mlir/test/Dialect/Vector/canonicalize.mlir
+++ b/mlir/test/Dialect/Vector/canonicalize.mlir
@@ -4453,3 +4453,14 @@ func.func @interleave_deinterleave_fold(%arg0: vector<4xf32>) -> vector<4xf32> {
%result = vector.interleave %even, %odd : vector<2xf32> -> vector<4xf32>
return %result : vector<4xf32>
}
+
+// -----
+
+// CHECK-LABEL: @interleave_splat
+// CHECK: %[[C:.*]] = arith.constant dense<0.000000e+00> : vector<[4]xf32>
+// CHECK: return %[[C]]
+func.func @interleave_splat() -> vector<[4]xf32> {
+ %cst = arith.constant dense<0.0> : vector<[2]xf32>
+ %0 = vector.interleave %cst, %cst : vector<[2]xf32> -> vector<[4]xf32>
+ return %0 : vector<[4]xf32>
+}
More information about the Mlir-commits
mailing list