[Mlir-commits] [mlir] ef8819e - [mlir] Extend `tile_using_for` verifier to fix a crash (#98366)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Fri Jul 12 00:05:10 PDT 2024
Author: Felix Schneider
Date: 2024-07-12T09:05:06+02:00
New Revision: ef8819e2567e81d8583756187ab5dcf06911fa69
URL: https://github.com/llvm/llvm-project/commit/ef8819e2567e81d8583756187ab5dcf06911fa69
DIFF: https://github.com/llvm/llvm-project/commit/ef8819e2567e81d8583756187ab5dcf06911fa69.diff
LOG: [mlir] Extend `tile_using_for` verifier to fix a crash (#98366)
This patch adds a check for the correct number of `loops` results of the
`transform.structured.tile_using_for` Op to the verifier, fixing a
crash.
Fix https://github.com/llvm/llvm-project/issues/98008
Added:
Modified:
mlir/lib/Dialect/Linalg/TransformOps/LinalgTransformOps.cpp
mlir/test/Dialect/Linalg/transform-op-tile.mlir
Removed:
################################################################################
diff --git a/mlir/lib/Dialect/Linalg/TransformOps/LinalgTransformOps.cpp b/mlir/lib/Dialect/Linalg/TransformOps/LinalgTransformOps.cpp
index bffe7a4e7d62c..b611347b8de2e 100644
--- a/mlir/lib/Dialect/Linalg/TransformOps/LinalgTransformOps.cpp
+++ b/mlir/lib/Dialect/Linalg/TransformOps/LinalgTransformOps.cpp
@@ -2888,8 +2888,14 @@ void transform::TileUsingForOp::build(
LogicalResult transform::TileUsingForOp::verify() {
if (getMixedSizes().size() != getScalableSizes().size())
return emitOpError("expected same number of sizes (")
- << getMixedSizes().size() << ") and scalable sizes ()"
+ << getMixedSizes().size() << ") and scalable sizes ("
<< getScalableSizes().size() << ")";
+ ArrayRef<int64_t> staticSizes = getStaticSizes();
+ unsigned numExpectedLoops = staticSizes.size() - llvm::count(staticSizes, 0);
+ if (getLoops().size() != numExpectedLoops)
+ return emitOpError("expected number of loops to tile (")
+ << numExpectedLoops << ") to match number of `loops` results ("
+ << getLoops().size() << ")";
return success();
}
diff --git a/mlir/test/Dialect/Linalg/transform-op-tile.mlir b/mlir/test/Dialect/Linalg/transform-op-tile.mlir
index d244670f73754..955ea6b0ebbbd 100644
--- a/mlir/test/Dialect/Linalg/transform-op-tile.mlir
+++ b/mlir/test/Dialect/Linalg/transform-op-tile.mlir
@@ -253,3 +253,23 @@ module attributes {transform.with_named_sequence} {
transform.yield
}
}
+
+// -----
+
+module attributes {transform.with_named_sequence} {
+ transform.named_sequence @__transform_main(%arg1: !transform.any_op {transform.readonly}) {
+ %0 = transform.structured.match ops{["linalg.matmul"]} in %arg1 : (!transform.any_op) -> !transform.any_op
+ // expected-error @below {{op expected number of loops to tile (3) to match number of `loops` results (1)}}
+ %1, %loops = transform.structured.tile_using_for %0 tile_sizes [4, 4, 4] : (!transform.any_op) -> (!transform.any_op, !transform.any_op)
+ transform.yield
+ }
+}
+
+func.func @tile_linalg_matmul(
+ %arg0: tensor<128x128xf32>, %arg1: tensor<128x128xf32>, %arg2: tensor<128x128xf32>)
+ -> tensor<128x128xf32> {
+ %0 = linalg.matmul ins(%arg0, %arg1: tensor<128x128xf32>, tensor<128x128xf32>)
+ outs(%arg2: tensor<128x128xf32>)
+ -> tensor<128x128xf32>
+ return %0 : tensor<128x128xf32>
+}
More information about the Mlir-commits
mailing list