[Mlir-commits] [mlir] e1aa415 - [mlir][InferIntRangeCommon] Fix Division by Zero Crash (#151637)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Sun Aug 17 10:56:37 PDT 2025
Author: Veera
Date: 2025-08-17T10:56:34-07:00
New Revision: e1aa41522020a51a99389675d8de3d9c5910e2cf
URL: https://github.com/llvm/llvm-project/commit/e1aa41522020a51a99389675d8de3d9c5910e2cf
DIFF: https://github.com/llvm/llvm-project/commit/e1aa41522020a51a99389675d8de3d9c5910e2cf.diff
LOG: [mlir][InferIntRangeCommon] Fix Division by Zero Crash (#151637)
Fixes #131273
Adds a check to avoid division when max value of denominator is zero.
Added:
Modified:
mlir/lib/Interfaces/Utils/InferIntRangeCommon.cpp
mlir/test/Dialect/Arith/int-range-interface.mlir
Removed:
################################################################################
diff --git a/mlir/lib/Interfaces/Utils/InferIntRangeCommon.cpp b/mlir/lib/Interfaces/Utils/InferIntRangeCommon.cpp
index 2f47939df5a02..af4ea5ac1cec8 100644
--- a/mlir/lib/Interfaces/Utils/InferIntRangeCommon.cpp
+++ b/mlir/lib/Interfaces/Utils/InferIntRangeCommon.cpp
@@ -290,8 +290,7 @@ static ConstantIntRanges inferDivURange(const ConstantIntRanges &lhs,
DivisionFixupFn fixup) {
const APInt &lhsMin = lhs.umin(), &lhsMax = lhs.umax(), &rhsMin = rhs.umin(),
&rhsMax = rhs.umax();
-
- if (!rhsMin.isZero()) {
+ if (!rhsMin.isZero() && !rhsMax.isZero()) {
auto udiv = [&fixup](const APInt &a,
const APInt &b) -> std::optional<APInt> {
return fixup(a, b, a.udiv(b));
diff --git a/mlir/test/Dialect/Arith/int-range-interface.mlir b/mlir/test/Dialect/Arith/int-range-interface.mlir
index 2128d36f1a28e..130782ba9f525 100644
--- a/mlir/test/Dialect/Arith/int-range-interface.mlir
+++ b/mlir/test/Dialect/Arith/int-range-interface.mlir
@@ -224,6 +224,15 @@ func.func @ceil_divui(%arg0 : index) -> i1 {
func.return %7 : i1
}
+// CHECK-LABEL: func @ceil_divui_by_zero_issue_131273
+// CHECK-NEXT: return
+func.func @ceil_divui_by_zero_issue_131273() {
+ %0 = test.with_bounds {smax = 0 : i32, smin = -1 : i32, umax = 0 : i32, umin = -1 : i32} : i32
+ %c7_i32 = arith.constant 7 : i32
+ %1 = arith.ceildivui %c7_i32, %0 : i32
+ return
+}
+
// CHECK-LABEL: func @ceil_divsi
// CHECK: %[[ret:.*]] = arith.cmpi eq
// CHECK: return %[[ret]]
More information about the Mlir-commits
mailing list