diff options
| author | Benjamin Kramer <benny.kra@googlemail.com> | 2013-06-07 15:14:31 +0000 |
|---|---|---|
| committer | Benjamin Kramer <benny.kra@googlemail.com> | 2013-06-07 15:14:31 +0000 |
| commit | 9675a0dbeca54f759e0c404101266a4a4bf55007 (patch) | |
| tree | 4fdf2b0febbdfda70a58ebe7f2137db4cca3b932 /llvm | |
| parent | 6af3fce55eddad978965bf1d5280d9b6cadfd685 (diff) | |
| download | bcm5719-llvm-9675a0dbeca54f759e0c404101266a4a4bf55007.tar.gz bcm5719-llvm-9675a0dbeca54f759e0c404101266a4a4bf55007.zip | |
BitVector: Do the right thing in all() when Size is a multiple of BITWORD_SIZE.
llvm-svn: 183525
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/include/llvm/ADT/BitVector.h | 13 | ||||
| -rw-r--r-- | llvm/unittests/ADT/BitVectorTest.cpp | 16 |
2 files changed, 22 insertions, 7 deletions
diff --git a/llvm/include/llvm/ADT/BitVector.h b/llvm/include/llvm/ADT/BitVector.h index 8f512f5c2ca..8fb538f68fc 100644 --- a/llvm/include/llvm/ADT/BitVector.h +++ b/llvm/include/llvm/ADT/BitVector.h @@ -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. diff --git a/llvm/unittests/ADT/BitVectorTest.cpp b/llvm/unittests/ADT/BitVectorTest.cpp index f97be22fd27..85e15949100 100644 --- a/llvm/unittests/ADT/BitVectorTest.cpp +++ b/llvm/unittests/ADT/BitVectorTest.cpp @@ -149,6 +149,22 @@ TYPED_TEST(BitVectorTest, TrivialOperation) { 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()); |

