summaryrefslogtreecommitdiff
path: root/include/llvm/ADT/BitVector.h
diff options
context:
space:
mode:
authorBenjamin Kramer <benny.kra@googlemail.com>2013-06-07 14:14:38 +0000
committerBenjamin Kramer <benny.kra@googlemail.com>2013-06-07 14:14:38 +0000
commit597253da97ec4fa5fa4a03c2230ed026b1b6aad6 (patch)
tree8856f89933a852b2be083527c227dec30c124c39 /include/llvm/ADT/BitVector.h
parent041399aad5a3d93c2dc9d2b70cb9b87d4a987ece (diff)
downloadllvm-597253da97ec4fa5fa4a03c2230ed026b1b6aad6.tar.gz
llvm-597253da97ec4fa5fa4a03c2230ed026b1b6aad6.tar.bz2
llvm-597253da97ec4fa5fa4a03c2230ed026b1b6aad6.tar.xz
Optimize BitVector::all().
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@183521 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/ADT/BitVector.h')
-rw-r--r--include/llvm/ADT/BitVector.h12
1 files changed, 10 insertions, 2 deletions
diff --git a/include/llvm/ADT/BitVector.h b/include/llvm/ADT/BitVector.h
index 3789db4e45..8f512f5c2c 100644
--- a/include/llvm/ADT/BitVector.h
+++ b/include/llvm/ADT/BitVector.h
@@ -138,8 +138,16 @@ public:
/// all - Returns true if all bits are set.
bool all() const {
- // TODO: Optimize this.
- return count() == size();
+ if (empty())
+ return true;
+
+ for (unsigned i = 0; i < NumBitWords(size()) - 1; ++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));
}
/// none - Returns true if none of the bits are set.