[llvm] 725fcf4 - [KnownBits] Reduce number of overflow checks for uadd/sub_sat (NFCI)

Nikita Popov via llvm-commits llvm-commits at lists.llvm.org
Wed May 24 02:17:06 PDT 2023


Author: Nikita Popov
Date: 2023-05-24T11:16:58+02:00
New Revision: 725fcf40c3e55b2c03a1ed2326375984c0a8560f

URL: https://github.com/llvm/llvm-project/commit/725fcf40c3e55b2c03a1ed2326375984c0a8560f
DIFF: https://github.com/llvm/llvm-project/commit/725fcf40c3e55b2c03a1ed2326375984c0a8560f.diff

LOG: [KnownBits] Reduce number of overflow checks for uadd/sub_sat (NFCI)

Only check for overflow on the min/max values, don't also check
for predicates in addition to that.

Added: 
    

Modified: 
    llvm/lib/Support/KnownBits.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Support/KnownBits.cpp b/llvm/lib/Support/KnownBits.cpp
index c665f8a30597..d52f08739be7 100644
--- a/llvm/lib/Support/KnownBits.cpp
+++ b/llvm/lib/Support/KnownBits.cpp
@@ -491,29 +491,25 @@ static KnownBits computeForSatAddSub(bool Add, bool Signed,
     }
   } else if (Add) {
     // uadd.sat
-    Overflow = KnownBits::ult(Res, RHS);
-    if (!Overflow)
-      Overflow = KnownBits::ult(Res, LHS);
-    if (!Overflow) {
-      bool Of;
+    bool Of;
+    (void)LHS.getMaxValue().uadd_ov(RHS.getMaxValue(), Of);
+    if (!Of) {
+      Overflow = false;
+    } else {
       (void)LHS.getMinValue().uadd_ov(RHS.getMinValue(), Of);
       if (Of)
         Overflow = true;
-      (void)LHS.getMaxValue().uadd_ov(RHS.getMaxValue(), Of);
-      if (!Of)
-        Overflow = false;
     }
   } else {
     // usub.sat
-    Overflow = KnownBits::ugt(Res, LHS);
-    if (!Overflow) {
-      bool Of;
+    bool Of;
+    (void)LHS.getMinValue().usub_ov(RHS.getMaxValue(), Of);
+    if (!Of) {
+      Overflow = false;
+    } else {
       (void)LHS.getMaxValue().usub_ov(RHS.getMinValue(), Of);
       if (Of)
-        Overflow = Of;
-      (void)LHS.getMinValue().usub_ov(RHS.getMaxValue(), Of);
-      if (!Of)
-        Overflow = Of;
+        Overflow = true;
     }
   }
 


        


More information about the llvm-commits mailing list