[Mlir-commits] [mlir] [mlir][InferIntRangeCommon] Fix Division by Zero Crash (PR #151637)

llvmlistbot at llvm.org llvmlistbot at llvm.org
Thu Jul 31 21:01:45 PDT 2025


https://github.com/veera-sivarajan created https://github.com/llvm/llvm-project/pull/151637

Fixes #131273

Adds a check to avoid division when max value of denominator is zero.

>From 93cb08e2d936fef4763c193cf9fc6694e5293951 Mon Sep 17 00:00:00 2001
From: Veera <sveera.2001 at gmail.com>
Date: Fri, 1 Aug 2025 03:51:57 +0000
Subject: [PATCH 1/2] Add Test

---
 mlir/test/Dialect/Arith/int-range-interface.mlir | 9 +++++++++
 1 file changed, 9 insertions(+)

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]]

>From c0dd330a60fe74ee1bfc7f73086a856910ee61eb Mon Sep 17 00:00:00 2001
From: Veera <sveera.2001 at gmail.com>
Date: Fri, 1 Aug 2025 03:53:53 +0000
Subject: [PATCH 2/2] [mlir][InferIntRangeCommon] Fix Division by Zero Crash

---
 mlir/lib/Interfaces/Utils/InferIntRangeCommon.cpp | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

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));



More information about the Mlir-commits mailing list