[llvm] r183525 - BitVector: Do the right thing in all() when Size is a multiple of BITWORD_SIZE.

Benjamin Kramer benny.kra at googlemail.com
Fri Jun 7 08:14:31 PDT 2013


Author: d0k
Date: Fri Jun  7 10:14:31 2013
New Revision: 183525

URL: http://llvm.org/viewvc/llvm-project?rev=183525&view=rev
Log:
BitVector: Do the right thing in all() when Size is a multiple of BITWORD_SIZE.

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

Modified: llvm/trunk/include/llvm/ADT/BitVector.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/BitVector.h?rev=183525&r1=183524&r2=183525&view=diff
==============================================================================
--- llvm/trunk/include/llvm/ADT/BitVector.h (original)
+++ llvm/trunk/include/llvm/ADT/BitVector.h Fri Jun  7 10:14:31 2013
@@ -138,16 +138,15 @@ public:
 
   /// all - Returns true if all bits are set.
   bool all() const {
-    if (empty())
-      return true;
-
-    for (unsigned i = 0; i < NumBitWords(size()) - 1; ++i)
+    for (unsigned i = 0; i < Size / BITWORD_SIZE; ++i)
       if (Bits[i] != ~0UL)
         return false;
 
-    // For the last word check that the lower bits are ones. The unused bits are
-    // always zero.
-    return Bits[NumBitWords(size()) - 1] == ~(~0UL << (Size % BITWORD_SIZE));
+    // If bits remain check that they are ones. The unused bits are always zero.
+    if (unsigned Remainder = Size % BITWORD_SIZE)
+      return Bits[Size / BITWORD_SIZE] == (1UL << Remainder) - 1;
+
+    return true;
   }
 
   /// none - Returns true if none of the bits are set.

Modified: llvm/trunk/unittests/ADT/BitVectorTest.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/ADT/BitVectorTest.cpp?rev=183525&r1=183524&r2=183525&view=diff
==============================================================================
--- llvm/trunk/unittests/ADT/BitVectorTest.cpp (original)
+++ llvm/trunk/unittests/ADT/BitVectorTest.cpp Fri Jun  7 10:14:31 2013
@@ -149,6 +149,22 @@ TYPED_TEST(BitVectorTest, TrivialOperati
   EXPECT_FALSE(Vec.none());
   EXPECT_FALSE(Vec.empty());
 
+  Vec.resize(64);
+  EXPECT_EQ(64U, Vec.count());
+  EXPECT_EQ(64U, Vec.size());
+  EXPECT_TRUE(Vec.any());
+  EXPECT_TRUE(Vec.all());
+  EXPECT_FALSE(Vec.none());
+  EXPECT_FALSE(Vec.empty());
+
+  Vec.flip();
+  EXPECT_EQ(0U, Vec.count());
+  EXPECT_EQ(64U, Vec.size());
+  EXPECT_FALSE(Vec.any());
+  EXPECT_FALSE(Vec.all());
+  EXPECT_TRUE(Vec.none());
+  EXPECT_FALSE(Vec.empty());
+
   Inv = TypeParam().flip();
   EXPECT_EQ(0U, Inv.count());
   EXPECT_EQ(0U, Inv.size());





More information about the llvm-commits mailing list