[llvm] e956df2 - [LLVM][ADT] Adding range-based test_all and test_any methods for BitVector (#209790)

via llvm-commits llvm-commits at lists.llvm.org
Wed Jul 15 09:55:27 PDT 2026


Author: Markos Horro
Date: 2026-07-15T18:55:07+02:00
New Revision: e956df27dfaf556f54a96ed22e85f1e16c7a38e3

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

LOG: [LLVM][ADT] Adding range-based test_all and test_any methods for BitVector (#209790)

Added: 
    

Modified: 
    llvm/include/llvm/ADT/BitVector.h
    llvm/include/llvm/ADT/SmallBitVector.h
    llvm/unittests/ADT/BitVectorTest.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/include/llvm/ADT/BitVector.h b/llvm/include/llvm/ADT/BitVector.h
index a9902f603081c..38fbe66388a72 100644
--- a/llvm/include/llvm/ADT/BitVector.h
+++ b/llvm/include/llvm/ADT/BitVector.h
@@ -483,6 +483,24 @@ class BitVector {
     return (*this)[Idx];
   }
 
+  /// Returns true if all bits in the range [Begin, End) are set.
+  bool test_all(unsigned Begin, unsigned End) const {
+    for (unsigned i = Begin; i < End; ++i) {
+      if (!test(i))
+        return false;
+    }
+    return true;
+  }
+
+  /// Returns true if any of the bits in the range [Begin, End) are set.
+  bool test_any(unsigned Begin, unsigned End) const {
+    for (unsigned i = Begin; i < End; ++i) {
+      if (test(i))
+        return true;
+    }
+    return false;
+  }
+
   // Push single bit to end of bitvector.
   void push_back(bool Val) {
     unsigned OldSize = Size;

diff  --git a/llvm/include/llvm/ADT/SmallBitVector.h b/llvm/include/llvm/ADT/SmallBitVector.h
index 01bd502d1552b..5d8c4be8d245f 100644
--- a/llvm/include/llvm/ADT/SmallBitVector.h
+++ b/llvm/include/llvm/ADT/SmallBitVector.h
@@ -471,10 +471,29 @@ class SmallBitVector {
     return (*this)[size() - 1];
   }
 
+  /// Returns true if bit \p Idx is set.
   bool test(unsigned Idx) const {
     return (*this)[Idx];
   }
 
+  /// Returns true if all bits in the range [Begin, End) are set.
+  bool test_all(unsigned Begin, unsigned End) const {
+    for (unsigned i = Begin; i < End; ++i) {
+      if (!test(i))
+        return false;
+    }
+    return true;
+  }
+
+  /// Returns true if any of the bits in the range [Begin, End) are set.
+  bool test_any(unsigned Begin, unsigned End) const {
+    for (unsigned i = Begin; i < End; ++i) {
+      if (test(i))
+        return true;
+    }
+    return false;
+  }
+
   // Push single bit to end of vector.
   void push_back(bool Val) {
     resize(size() + 1, Val);

diff  --git a/llvm/unittests/ADT/BitVectorTest.cpp b/llvm/unittests/ADT/BitVectorTest.cpp
index 14f14660048b3..808e63c08cbaa 100644
--- a/llvm/unittests/ADT/BitVectorTest.cpp
+++ b/llvm/unittests/ADT/BitVectorTest.cpp
@@ -199,6 +199,43 @@ TYPED_TEST(BitVectorTest, Equality) {
   EXPECT_TRUE(A == B);
 }
 
+TYPED_TEST(BitVectorTest, TestAllAndAny) {
+  TypeParam Vec;
+  Vec.resize(10);
+
+  // Empty range
+  EXPECT_TRUE(Vec.test_all(3, 3));
+  EXPECT_FALSE(Vec.test_any(3, 3));
+
+  Vec.set(2, 5);
+  EXPECT_TRUE(Vec.test_all(2, 5));
+  EXPECT_FALSE(Vec.test_all(2, 6));
+  EXPECT_FALSE(Vec.test_all(1, 5));
+  EXPECT_TRUE(Vec.test_any(2, 5));
+  EXPECT_TRUE(Vec.test_any(4, 5));
+  EXPECT_FALSE(Vec.test_any(0, 2));
+
+  Vec.set(7);
+  EXPECT_FALSE(Vec.test_all(0, Vec.size()));
+  EXPECT_TRUE(Vec.test_any(6, Vec.size()));
+  Vec.reset(7);
+
+  TypeParam LargeVec;
+  LargeVec.resize(80);
+  LargeVec.set(10, 30);
+  EXPECT_TRUE(LargeVec.test_any(10, 30));
+  EXPECT_FALSE(LargeVec.test_all(10, 35));
+  EXPECT_FALSE(LargeVec.test_any(0, 10));
+
+  LargeVec.set(30, 35);
+  EXPECT_TRUE(LargeVec.test_all(10, 35));
+
+  LargeVec.set(70);
+  EXPECT_TRUE(LargeVec.test_any(68, 72));
+  LargeVec.reset(70);
+  EXPECT_FALSE(LargeVec.test_any(68, 72));
+}
+
 TYPED_TEST(BitVectorTest, SimpleFindOpsMultiWord) {
   TypeParam A;
 


        


More information about the llvm-commits mailing list