[Mlir-commits] [mlir] 9f423a9 - [mlir][linalg] Restrict linalg.contract results (#205988)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Fri Jun 26 20:04:42 PDT 2026
Author: lianjinfeng2003
Date: 2026-06-27T05:04:37+02:00
New Revision: 9f423a973b69b2f90075e8694457f6eca173162b
URL: https://github.com/llvm/llvm-project/commit/9f423a973b69b2f90075e8694457f6eca173162b
DIFF: https://github.com/llvm/llvm-project/commit/9f423a973b69b2f90075e8694457f6eca173162b.diff
LOG: [mlir][linalg] Restrict linalg.contract results (#205988)
I tightened linalg.contract so buffer-style uses cannot produce memref
results. This keeps the op consistent with destination-style semantics
and turns the bad input into a verifier error instead of letting later
rewrites crash.
Fixes #205708
Added:
Modified:
mlir/include/mlir/Dialect/Linalg/IR/LinalgStructuredOps.td
mlir/test/Dialect/Linalg/invalid.mlir
Removed:
################################################################################
diff --git a/mlir/include/mlir/Dialect/Linalg/IR/LinalgStructuredOps.td b/mlir/include/mlir/Dialect/Linalg/IR/LinalgStructuredOps.td
index 5998f736ced34..fc5c9770d969b 100644
--- a/mlir/include/mlir/Dialect/Linalg/IR/LinalgStructuredOps.td
+++ b/mlir/include/mlir/Dialect/Linalg/IR/LinalgStructuredOps.td
@@ -881,7 +881,7 @@ def ContractOp : LinalgStructuredBase_Op<"contract", [
AffineMapArrayAttr:$indexing_maps,
DefaultValuedOptionalAttr<TypeFnAttr, "TypeFn::cast_signed">:$cast
);
- let results = (outs Variadic<AnyShaped>:$result_tensors);
+ let results = (outs Variadic<AnyRankedTensor>:$result_tensors);
// NB: The only reason this op has a region - and it get populated at op build
// time - is that currently the LinalgOp interface exposes methods that
// assume a relevant region is available to be queried at any time.
diff --git a/mlir/test/Dialect/Linalg/invalid.mlir b/mlir/test/Dialect/Linalg/invalid.mlir
index a446cfcc4eec1..c52163e244ea2 100644
--- a/mlir/test/Dialect/Linalg/invalid.mlir
+++ b/mlir/test/Dialect/Linalg/invalid.mlir
@@ -644,6 +644,21 @@ func.func @invalid_type_matmul(%arg0 : !x86.amx.tile<16x16xbf16>)
// -----
+func.func @illegal_contract_memref_with_memref_return
+ (%arg0: memref<4x8xf32>, %arg1: memref<8x6xf32>, %arg2: memref<4x6xf32>) -> memref<4x6xf32>
+{
+ // expected-error @+1 {{result #0 must be variadic of ranked tensor of any non-token type values, but got 'memref<4x6xf32>'}}
+ %0 = linalg.contract
+ indexing_maps = [affine_map<(d0, d1, d2) -> (d0, d2)>,
+ affine_map<(d0, d1, d2) -> (d2, d1)>,
+ affine_map<(d0, d1, d2) -> (d0, d1)>]
+ ins(%arg0, %arg1 : memref<4x8xf32>, memref<8x6xf32>)
+ outs(%arg2 : memref<4x6xf32>) -> memref<4x6xf32>
+ return %0 : memref<4x6xf32>
+}
+
+// -----
+
func.func @invalid_indexing_maps_placement_contraction(
%lhs: tensor<4x1xf32>, %rhs: tensor<1x64xf32>, %init: tensor<4x64xf32>) {
// expected-error @+3 {{custom op 'linalg.contract' expected 'indexing_maps' attribute}}
More information about the Mlir-commits
mailing list