[Mlir-commits] [mlir] [mlir][Vector] Add interleave(splat, splat) -> wide splat fold (PR #215255)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Mon Aug 10 05:00:32 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-mlir-vector
Author: Bryth (matteo-rm)
<details>
<summary>Changes</summary>
---
Full diff: https://github.com/llvm/llvm-project/pull/215255.diff
3 Files Affected:
- (modified) mlir/include/mlir/Dialect/Vector/IR/VectorOps.td (+1)
- (modified) mlir/lib/Dialect/Vector/IR/VectorOps.cpp (+9)
- (modified) mlir/test/Dialect/Vector/canonicalize.mlir (+11)
``````````diff
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 9322c11d401d9..3bb9d79934af9 100644
--- a/mlir/lib/Dialect/Vector/IR/VectorOps.cpp
+++ b/mlir/lib/Dialect/Vector/IR/VectorOps.cpp
@@ -8489,6 +8489,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 ed4c908c6e5f2..99a4165b7cb32 100644
--- a/mlir/test/Dialect/Vector/canonicalize.mlir
+++ b/mlir/test/Dialect/Vector/canonicalize.mlir
@@ -4422,3 +4422,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>
+}
``````````
</details>
https://github.com/llvm/llvm-project/pull/215255
More information about the Mlir-commits
mailing list