[Mlir-commits] [mlir] [mlir][linalg] Guard pack tensor semantics (PR #206011)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Fri Jun 26 02:17:22 PDT 2026
https://github.com/mygitljf created https://github.com/llvm/llvm-project/pull/206011
Added a guard so the structured pack transform reports a normal tiling failure when the target has already been bufferized, instead of reaching a tensor-only path and asserting.
Fixes #205744
>From 47f4f594bff25219d217576f0a3b1cc14b91db37 Mon Sep 17 00:00:00 2001
From: mygitljf <2410316423 at qq.com>
Date: Fri, 26 Jun 2026 17:15:51 +0000
Subject: [PATCH] [mlir][linalg] Guard pack tensor semantics
---
.../Dialect/Linalg/Transforms/Transforms.cpp | 4 ++++
.../Linalg/transform-op-pack-bufferized.mlir | 17 +++++++++++++++++
2 files changed, 21 insertions(+)
create mode 100644 mlir/test/Dialect/Linalg/transform-op-pack-bufferized.mlir
diff --git a/mlir/lib/Dialect/Linalg/Transforms/Transforms.cpp b/mlir/lib/Dialect/Linalg/Transforms/Transforms.cpp
index f2d491ac442e6..0b6d067d13a16 100644
--- a/mlir/lib/Dialect/Linalg/Transforms/Transforms.cpp
+++ b/mlir/lib/Dialect/Linalg/Transforms/Transforms.cpp
@@ -484,6 +484,10 @@ FailureOr<PackResult> linalg::pack(RewriterBase &rewriter,
return rewriter.notifyMatchFailure(linalgOp,
"incorrect number of pack sizes");
}
+ if (!linalgOp.hasPureTensorSemantics()) {
+ return rewriter.notifyMatchFailure(
+ linalgOp, "expects LinalgOp with pure tensor semantics");
+ }
Location loc = linalgOp->getLoc();
SmallVector<AffineMap> indexingMaps = linalgOp.getIndexingMapsArray();
diff --git a/mlir/test/Dialect/Linalg/transform-op-pack-bufferized.mlir b/mlir/test/Dialect/Linalg/transform-op-pack-bufferized.mlir
new file mode 100644
index 0000000000000..071ae8f35f97f
--- /dev/null
+++ b/mlir/test/Dialect/Linalg/transform-op-pack-bufferized.mlir
@@ -0,0 +1,17 @@
+// RUN: mlir-opt -sparsification-and-bufferization -transform-interpreter -split-input-file -verify-diagnostics -allow-unregistered-dialect %s
+
+module attributes {gpu.data_layout = "chunked", impl.libfunc.name = "test.matmul"} {
+ func.func @matmul(%arg0: tensor<?x?xf32>, %arg1: tensor<?x?xf32>, %arg2: tensor<?x?xf32>) -> tensor<?x?xf32> {
+ %0 = linalg.matmul ins(%arg0, %arg1 : tensor<?x?xf32>, tensor<?x?xf32>) outs(%arg2 : tensor<?x?xf32>) -> tensor<?x?xf32>
+ return %0 : tensor<?x?xf32>
+ }
+
+ module attributes {transform.with_named_sequence} {
+ transform.named_sequence @__transform_main(%arg0: !transform.any_op {transform.readonly}) {
+ %0 = transform.structured.match ops{["linalg.matmul"]} in %arg0 : (!transform.any_op) -> !transform.any_op
+ // expected-error @below {{data tiling failed}}
+ %1 = transform.structured.pack %0 packed_sizes = [2, 3, 4] : (!transform.any_op) -> !transform.op<"linalg.generic">
+ transform.yield
+ }
+ }
+}
More information about the Mlir-commits
mailing list