[Mlir-commits] [mlir] [mlir][Interfaces] Track and infer no-overflow flags in integer ranges (PR #191777)

llvmlistbot at llvm.org llvmlistbot at llvm.org
Mon Apr 13 02:05:42 PDT 2026


github-actions[bot] wrote:

<!--LLVM CODE FORMAT COMMENT: {clang-format}-->


:warning: C/C++ code formatter, clang-format found issues in your code. :warning:

<details>
<summary>
You can test this locally with the following command:
</summary>

``````````bash
git-clang-format --diff origin/main HEAD --extensions cpp,h -- mlir/include/mlir/Interfaces/InferIntRangeInterface.h mlir/include/mlir/Interfaces/Utils/InferIntRangeCommon.h mlir/lib/Analysis/DataFlow/StridedMetadataRangeAnalysis.cpp mlir/lib/Dialect/Arith/IR/InferIntRangeInterfaceImpls.cpp mlir/lib/Interfaces/InferIntRangeInterface.cpp mlir/unittests/Interfaces/InferIntRangeInterfaceTest.cpp --diff_from_common_commit
``````````

:warning:
The reproduction instructions above might return results for more than one PR
in a stack if you are using a stacked PR workflow. You can limit the results by
changing `origin/main` to the base branch/commit you want to compare against.
:warning:

</details>

<details>
<summary>
View the diff from clang-format here.
</summary>

``````````diff
diff --git a/mlir/lib/Dialect/Arith/IR/InferIntRangeInterfaceImpls.cpp b/mlir/lib/Dialect/Arith/IR/InferIntRangeInterfaceImpls.cpp
index db17d35b0..37b348df5 100644
--- a/mlir/lib/Dialect/Arith/IR/InferIntRangeInterfaceImpls.cpp
+++ b/mlir/lib/Dialect/Arith/IR/InferIntRangeInterfaceImpls.cpp
@@ -153,11 +153,10 @@ void arith::ConstantOp::inferResultRanges(ArrayRef<ConstantIntRanges> argRanges,
 
 void arith::AddIOp::inferResultRanges(ArrayRef<ConstantIntRanges> argRanges,
                                       SetIntRangeFn setResultRange) {
-  ConstantIntRanges range = inferAdd(argRanges, convertArithOverflowFlags(
-                                                    getOverflowFlags()));
-  OverflowFlags noOverflowFlags =
-      proveNoOverflowForAdd(argRanges) |
-      convertArithOverflowFlags(getOverflowFlags());
+  ConstantIntRanges range =
+      inferAdd(argRanges, convertArithOverflowFlags(getOverflowFlags()));
+  OverflowFlags noOverflowFlags = proveNoOverflowForAdd(argRanges) |
+                                  convertArithOverflowFlags(getOverflowFlags());
   setResultRange(getResult(), range.withOverflowFlags(noOverflowFlags));
 }
 
@@ -167,11 +166,10 @@ void arith::AddIOp::inferResultRanges(ArrayRef<ConstantIntRanges> argRanges,
 
 void arith::SubIOp::inferResultRanges(ArrayRef<ConstantIntRanges> argRanges,
                                       SetIntRangeFn setResultRange) {
-  ConstantIntRanges range = inferSub(argRanges, convertArithOverflowFlags(
-                                                    getOverflowFlags()));
-  OverflowFlags noOverflowFlags =
-      proveNoOverflowForSub(argRanges) |
-      convertArithOverflowFlags(getOverflowFlags());
+  ConstantIntRanges range =
+      inferSub(argRanges, convertArithOverflowFlags(getOverflowFlags()));
+  OverflowFlags noOverflowFlags = proveNoOverflowForSub(argRanges) |
+                                  convertArithOverflowFlags(getOverflowFlags());
   setResultRange(getResult(), range.withOverflowFlags(noOverflowFlags));
 }
 
@@ -181,11 +179,10 @@ void arith::SubIOp::inferResultRanges(ArrayRef<ConstantIntRanges> argRanges,
 
 void arith::MulIOp::inferResultRanges(ArrayRef<ConstantIntRanges> argRanges,
                                       SetIntRangeFn setResultRange) {
-  ConstantIntRanges range = inferMul(argRanges, convertArithOverflowFlags(
-                                                    getOverflowFlags()));
-  OverflowFlags noOverflowFlags =
-      proveNoOverflowForMul(argRanges) |
-      convertArithOverflowFlags(getOverflowFlags());
+  ConstantIntRanges range =
+      inferMul(argRanges, convertArithOverflowFlags(getOverflowFlags()));
+  OverflowFlags noOverflowFlags = proveNoOverflowForMul(argRanges) |
+                                  convertArithOverflowFlags(getOverflowFlags());
   setResultRange(getResult(), range.withOverflowFlags(noOverflowFlags));
 }
 
diff --git a/mlir/lib/Interfaces/InferIntRangeInterface.cpp b/mlir/lib/Interfaces/InferIntRangeInterface.cpp
index 327f3ed17..a7718e0db 100644
--- a/mlir/lib/Interfaces/InferIntRangeInterface.cpp
+++ b/mlir/lib/Interfaces/InferIntRangeInterface.cpp
@@ -95,8 +95,7 @@ ConstantIntRanges::rangeUnion(const ConstantIntRanges &other) const {
   const APInt &umaxUnion = umax().ugt(other.umax()) ? umax() : other.umax();
   const APInt &sminUnion = smin().slt(other.smin()) ? smin() : other.smin();
   const APInt &smaxUnion = smax().sgt(other.smax()) ? smax() : other.smax();
-  OverflowFlags noOverflowUnion =
-      getOverflowFlags() & other.getOverflowFlags();
+  OverflowFlags noOverflowUnion = getOverflowFlags() & other.getOverflowFlags();
 
   return {uminUnion, umaxUnion, sminUnion, smaxUnion, noOverflowUnion};
 }
diff --git a/mlir/unittests/Interfaces/InferIntRangeInterfaceTest.cpp b/mlir/unittests/Interfaces/InferIntRangeInterfaceTest.cpp
index 19890a2d9..c4a7c3e88 100644
--- a/mlir/unittests/Interfaces/InferIntRangeInterfaceTest.cpp
+++ b/mlir/unittests/Interfaces/InferIntRangeInterfaceTest.cpp
@@ -112,18 +112,15 @@ TEST(IntRangeAttrs, OverflowFlags) {
   EXPECT_EQ(nswOnly.getOverflowFlags() & OverflowFlags::Nuw,
             OverflowFlags::None);
 
-  ConstantIntRanges both = nswOnly.withOverflowFlags(OverflowFlags::Nsw |
-                                                       OverflowFlags::Nuw);
-  EXPECT_NE(both.getOverflowFlags() & OverflowFlags::Nsw,
-            OverflowFlags::None);
-  EXPECT_NE(both.getOverflowFlags() & OverflowFlags::Nuw,
-            OverflowFlags::None);
+  ConstantIntRanges both =
+      nswOnly.withOverflowFlags(OverflowFlags::Nsw | OverflowFlags::Nuw);
+  EXPECT_NE(both.getOverflowFlags() & OverflowFlags::Nsw, OverflowFlags::None);
+  EXPECT_NE(both.getOverflowFlags() & OverflowFlags::Nuw, OverflowFlags::None);
 
   // rangeUnion conservatively preserves only proofs present in both inputs.
   EXPECT_EQ(nswOnly.rangeUnion(nuwOnly).getOverflowFlags(),
             OverflowFlags::None);
-  EXPECT_EQ(both.rangeUnion(nswOnly).getOverflowFlags(),
-            OverflowFlags::Nsw);
+  EXPECT_EQ(both.rangeUnion(nswOnly).getOverflowFlags(), OverflowFlags::Nsw);
 
   // intersection preserves proofs from either input.
   EXPECT_EQ(nswOnly.intersection(nuwOnly).getOverflowFlags(),
@@ -131,8 +128,7 @@ TEST(IntRangeAttrs, OverflowFlags) {
   EXPECT_EQ(both.intersection(nswOnly).getOverflowFlags(),
             OverflowFlags::Nsw | OverflowFlags::Nuw);
   ConstantIntRanges none(zero, two, zero, two, OverflowFlags::None);
-  EXPECT_EQ(nswOnly.intersection(none).getOverflowFlags(),
-            OverflowFlags::Nsw);
+  EXPECT_EQ(nswOnly.intersection(none).getOverflowFlags(), OverflowFlags::Nsw);
 }
 
 TEST(IntRangeAttrs, OverflowFlagsPrinting) {
@@ -150,12 +146,10 @@ TEST(IntRangeAttrs, OverflowFlagsPrinting) {
   EXPECT_EQ(toString(noFlags), "unsigned : [0, 1] signed : [0, 1]");
 
   ConstantIntRanges nsw(zero, one, zero, one, OverflowFlags::Nsw);
-  EXPECT_EQ(toString(nsw),
-            "unsigned : [0, 1] signed : [0, 1] nooverflow<nsw>");
+  EXPECT_EQ(toString(nsw), "unsigned : [0, 1] signed : [0, 1] nooverflow<nsw>");
 
   ConstantIntRanges nuw(zero, one, zero, one, OverflowFlags::Nuw);
-  EXPECT_EQ(toString(nuw),
-            "unsigned : [0, 1] signed : [0, 1] nooverflow<nuw>");
+  EXPECT_EQ(toString(nuw), "unsigned : [0, 1] signed : [0, 1] nooverflow<nuw>");
 
   ConstantIntRanges both(zero, one, zero, one,
                          OverflowFlags::Nsw | OverflowFlags::Nuw);

``````````

</details>


https://github.com/llvm/llvm-project/pull/191777


More information about the Mlir-commits mailing list