[Mlir-commits] [mlir] [mlir][memref] Add a `ViewOp::getMixedSizes` (PR #176561)
Longsheng Mou
llvmlistbot at llvm.org
Sat Jan 17 06:49:06 PST 2026
https://github.com/CoTinker updated https://github.com/llvm/llvm-project/pull/176561
>From ccf07b87cb8d9fa613bd5d8bc0322820ae4dbce3 Mon Sep 17 00:00:00 2001
From: Longsheng Mou <longshengmou at gmail.com>
Date: Sat, 17 Jan 2026 19:58:34 +0800
Subject: [PATCH 1/2] [mlir][memref] Add a `ViewOp::getMixedSizes`
This PR adds a useful `getMixedSizes` method for memref.view.
---
mlir/include/mlir/Dialect/MemRef/IR/MemRefOps.td | 3 +++
mlir/lib/Dialect/MemRef/IR/MemRefOps.cpp | 16 ++++++++++++++++
2 files changed, 19 insertions(+)
diff --git a/mlir/include/mlir/Dialect/MemRef/IR/MemRefOps.td b/mlir/include/mlir/Dialect/MemRef/IR/MemRefOps.td
index bd96bace7994f..6f8f1481725fc 100644
--- a/mlir/include/mlir/Dialect/MemRef/IR/MemRefOps.td
+++ b/mlir/include/mlir/Dialect/MemRef/IR/MemRefOps.td
@@ -2459,6 +2459,9 @@ def MemRef_ViewOp : MemRef_Op<"view", [
/// The result of a view is always a memref.
MemRefType getType() { return ::llvm::cast<MemRefType>(getResult().getType()); }
+ // Return both static and dynamic sizes as a list of `OpFoldResult`.
+ SmallVector<OpFoldResult> getMixedSizes();
+
/// Returns the dynamic sizes for this view operation. This is redundant
/// with `sizes` but needed in template implementations. More specifically:
/// ```
diff --git a/mlir/lib/Dialect/MemRef/IR/MemRefOps.cpp b/mlir/lib/Dialect/MemRef/IR/MemRefOps.cpp
index e0f7a8b452a1d..aea2bc58dd5ee 100644
--- a/mlir/lib/Dialect/MemRef/IR/MemRefOps.cpp
+++ b/mlir/lib/Dialect/MemRef/IR/MemRefOps.cpp
@@ -3762,6 +3762,22 @@ OpFoldResult ViewOp::fold(FoldAdaptor adaptor) {
return {};
}
+SmallVector<OpFoldResult> ViewOp::getMixedSizes() {
+ SmallVector<OpFoldResult> result;
+ unsigned ctr = 0;
+ OpBuilder b(getContext());
+ MemRefType resultType = getType();
+ auto resultShape = resultType.getShape();
+ for (int64_t i = 0; i < resultType.getRank(); ++i) {
+ if (resultType.isDynamicDim(i)) {
+ result.push_back(getSizes()[ctr++]);
+ } else {
+ result.push_back(b.getIndexAttr(resultShape[i]));
+ }
+ }
+ return result;
+}
+
namespace {
struct ViewOpShapeFolder : public OpRewritePattern<ViewOp> {
>From 675136cdd0c3041bec5dcead921700e90b3bde6a Mon Sep 17 00:00:00 2001
From: Longsheng Mou <longshengmou at gmail.com>
Date: Sat, 17 Jan 2026 22:48:33 +0800
Subject: [PATCH 2/2] use Builder
---
mlir/lib/Dialect/MemRef/IR/MemRefOps.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/mlir/lib/Dialect/MemRef/IR/MemRefOps.cpp b/mlir/lib/Dialect/MemRef/IR/MemRefOps.cpp
index aea2bc58dd5ee..4c7ec2c89a13f 100644
--- a/mlir/lib/Dialect/MemRef/IR/MemRefOps.cpp
+++ b/mlir/lib/Dialect/MemRef/IR/MemRefOps.cpp
@@ -3765,7 +3765,7 @@ OpFoldResult ViewOp::fold(FoldAdaptor adaptor) {
SmallVector<OpFoldResult> ViewOp::getMixedSizes() {
SmallVector<OpFoldResult> result;
unsigned ctr = 0;
- OpBuilder b(getContext());
+ Builder b(getContext());
MemRefType resultType = getType();
auto resultShape = resultType.getShape();
for (int64_t i = 0; i < resultType.getRank(); ++i) {
More information about the Mlir-commits
mailing list