[Mlir-commits] [mlir] 53b46bb - [mlir][tosa] Fix crash on attempt to fold int_div by zero (#128682)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Tue Feb 25 09:27:06 PST 2025
Author: Luke Hutton
Date: 2025-02-25T09:27:03-08:00
New Revision: 53b46bb09474bd22fd097411f9eb4596424116ee
URL: https://github.com/llvm/llvm-project/commit/53b46bb09474bd22fd097411f9eb4596424116ee
DIFF: https://github.com/llvm/llvm-project/commit/53b46bb09474bd22fd097411f9eb4596424116ee.diff
LOG: [mlir][tosa] Fix crash on attempt to fold int_div by zero (#128682)
Fixes #118268.
Signed-off-by: Luke Hutton <luke.hutton at arm.com>
Added:
Modified:
mlir/lib/Dialect/Tosa/IR/TosaCanonicalizations.cpp
mlir/test/Dialect/Tosa/canonicalize.mlir
Removed:
################################################################################
diff --git a/mlir/lib/Dialect/Tosa/IR/TosaCanonicalizations.cpp b/mlir/lib/Dialect/Tosa/IR/TosaCanonicalizations.cpp
index 9bfc2aae1d6a5..b9bdc1c7101ab 100644
--- a/mlir/lib/Dialect/Tosa/IR/TosaCanonicalizations.cpp
+++ b/mlir/lib/Dialect/Tosa/IR/TosaCanonicalizations.cpp
@@ -680,10 +680,11 @@ OpFoldResult IntDivOp::fold(FoldAdaptor adaptor) {
return getInput1();
}
- if (rhsAttr && lhsAttr && rhsAttr.isSplat() && lhsAttr.isSplat()) {
- if (llvm::isa<IntegerType>(resultETy)) {
- APInt l = lhsAttr.getSplatValue<APInt>();
- APInt r = rhsAttr.getSplatValue<APInt>();
+ if (rhsAttr && lhsAttr && rhsAttr.isSplat() && lhsAttr.isSplat() &&
+ llvm::isa<IntegerType>(resultETy)) {
+ APInt l = lhsAttr.getSplatValue<APInt>();
+ APInt r = rhsAttr.getSplatValue<APInt>();
+ if (!r.isZero()) {
APInt result = l.sdiv(r);
return DenseElementsAttr::get(resultTy, result);
}
diff --git a/mlir/test/Dialect/Tosa/canonicalize.mlir b/mlir/test/Dialect/Tosa/canonicalize.mlir
index 0e177a076ee7a..c08517b33b0f9 100644
--- a/mlir/test/Dialect/Tosa/canonicalize.mlir
+++ b/mlir/test/Dialect/Tosa/canonicalize.mlir
@@ -1012,3 +1012,14 @@ func.func nested @do_not_fold_reciprocal_int() -> tensor<3x600x1200xi32> {
%2 = "tosa.reciprocal"(%1): (tensor<3x600x1200xi32>) -> tensor<3x600x1200xi32>
return %2 : tensor<3x600x1200xi32>
}
+
+// -----
+
+// CHECK-LABEL: @do_not_fold_int_div_division_by_0
+func.func @do_not_fold_int_div_division_by_0() -> tensor<1x24x2xi32> {
+ // CHECK: tosa.int_div
+ %1 = "tosa.const"() <{value = dense<0> : tensor<1x24x2xi32>}> : () -> tensor<1x24x2xi32>
+ %4 = "tosa.const"() <{value = dense<20> : tensor<1x24x2xi32>}> : () -> tensor<1x24x2xi32>
+ %16 = tosa.int_div %4, %1 : (tensor<1x24x2xi32>, tensor<1x24x2xi32>) -> tensor<1x24x2xi32>
+ return %16 : tensor<1x24x2xi32>
+}
More information about the Mlir-commits
mailing list