From 597253da97ec4fa5fa4a03c2230ed026b1b6aad6 Mon Sep 17 00:00:00 2001 From: Benjamin Kramer Date: Fri, 7 Jun 2013 14:14:38 +0000 Subject: Optimize BitVector::all(). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@183521 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/ADT/BitVector.h | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'include/llvm/ADT') diff --git a/include/llvm/ADT/BitVector.h b/include/llvm/ADT/BitVector.h index 3789db4..8f512f5 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. -- cgit v1.1