[Mlir-commits] [mlir] f6a756f - [mlir][linalg] fix segmentation fault in isContractionBody function (#108703)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Thu Sep 26 18:44:01 PDT 2024
Author: xiaohui1.xu
Date: 2024-09-27T09:43:57+08:00
New Revision: f6a756f35a4d0719a96b4e214905369d565d87da
URL: https://github.com/llvm/llvm-project/commit/f6a756f35a4d0719a96b4e214905369d565d87da
DIFF: https://github.com/llvm/llvm-project/commit/f6a756f35a4d0719a96b4e214905369d565d87da.diff
LOG: [mlir][linalg] fix segmentation fault in isContractionBody function (#108703)
Fix Segmentation Fault in function.
`getDefiningOp()` may return `nullptr` pointer.
Added:
Modified:
mlir/lib/Dialect/Linalg/IR/LinalgInterfaces.cpp
mlir/test/Dialect/Linalg/match-ops-interpreter.mlir
Removed:
################################################################################
diff --git a/mlir/lib/Dialect/Linalg/IR/LinalgInterfaces.cpp b/mlir/lib/Dialect/Linalg/IR/LinalgInterfaces.cpp
index 0c48a5aeb26a26..0b5191664a9e2f 100644
--- a/mlir/lib/Dialect/Linalg/IR/LinalgInterfaces.cpp
+++ b/mlir/lib/Dialect/Linalg/IR/LinalgInterfaces.cpp
@@ -222,7 +222,7 @@ bool mlir::linalg::detail::isContractionBody(
Value contributed = getSourceSkipUnary(
isa<BlockArgument>(reductionLHS) ? reductionRHS : reductionLHS);
Operation *elementwiseOp = contributed.getDefiningOp();
- if (elementwiseOp->getNumResults() != 1 ||
+ if (!elementwiseOp || elementwiseOp->getNumResults() != 1 ||
elementwiseOp->getNumOperands() != 2) {
errs << "expected elementwise op to be binary";
return false;
diff --git a/mlir/test/Dialect/Linalg/match-ops-interpreter.mlir b/mlir/test/Dialect/Linalg/match-ops-interpreter.mlir
index 4bfed475d44f60..bfe7a07cb38a50 100644
--- a/mlir/test/Dialect/Linalg/match-ops-interpreter.mlir
+++ b/mlir/test/Dialect/Linalg/match-ops-interpreter.mlir
@@ -996,6 +996,21 @@ module attributes { transform.target_tag = "start_here" } {
} -> tensor<40x10x50x15xf32>
return %result : tensor<40x10x50x15xf32>
}
+
+ func.func @generic_min(%arg0: tensor<1x7x4xf32>, %arg1: tensor<4xf32>, %arg2: tensor<1x1x4xf32>) {
+ linalg.generic {
+ indexing_maps = [affine_map<(d0, d1, d2, d3) -> (d0, d1 * 2 + d3 * 2, d2)>,
+ affine_map<(d0, d1, d2, d3) -> (d3)>,
+ affine_map<(d0, d1, d2, d3) -> (d0, d1, d2)>],
+ iterator_types = ["parallel", "parallel", "parallel", "reduction"]}
+ ins(%arg0, %arg1 : tensor<1x7x4xf32>, tensor<4xf32>)
+ outs(%arg2 : tensor<1x1x4xf32>) {
+ ^bb0(%in: f32, %in_1: f32, %out: f32):
+ %5 = arith.minimumf %out, %in : f32
+ linalg.yield %5 : f32
+ } -> tensor<1x1x4xf32>
+ return
+ }
}
// -----
More information about the Mlir-commits
mailing list