[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