From: Evan Cheng Date: Fri, 2 Mar 2007 02:31:37 +0000 (+0000) Subject: Make it 64-bit safe. X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=0eca22af62c1e1500b1a937ccdec6d5ffe6ecd8a;p=oota-llvm.git Make it 64-bit safe. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34829 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/ADT/BitVector.h b/include/llvm/ADT/BitVector.h index 269621313fa..2b0e127265d 100644 --- a/include/llvm/ADT/BitVector.h +++ b/include/llvm/ADT/BitVector.h @@ -120,8 +120,14 @@ public: /// of the bits are set. int find_first() const { for (unsigned i = 0; i < NumBitWords(size()); ++i) - if (Bits[i] != 0) - return i * BITS_PER_WORD + CountTrailingZeros_32(Bits[i]); + if (Bits[i] != 0) { + if (sizeof(BitWord) == 4) + return i * BITS_PER_WORD + CountTrailingZeros_32(Bits[i]); + else if (sizeof(BitWord) == 8) + return i * BITS_PER_WORD + CountTrailingZeros_64(Bits[i]); + else + assert(0 && "Unsupported!"); + } return -1; } @@ -136,15 +142,27 @@ public: unsigned BitPos = Prev % BITS_PER_WORD; BitWord Copy = Bits[WordPos]; // Mask off previous bits. - Copy &= ~0 << BitPos; + Copy &= ~0L << BitPos; - if (Copy != 0) - return WordPos * BITS_PER_WORD + CountTrailingZeros_32(Copy); + if (Copy != 0) { + if (sizeof(BitWord) == 4) + return WordPos * BITS_PER_WORD + CountTrailingZeros_32(Copy); + else if (sizeof(BitWord) == 8) + return WordPos * BITS_PER_WORD + CountTrailingZeros_64(Copy); + else + assert(0 && "Unsupported!"); + } // Check subsequent words. for (unsigned i = WordPos+1; i < NumBitWords(size()); ++i) - if (Bits[i] != 0) - return i * BITS_PER_WORD + CountTrailingZeros_32(Bits[i]); + if (Bits[i] != 0) { + if (sizeof(BitWord) == 4) + return i * BITS_PER_WORD + CountTrailingZeros_32(Bits[i]); + else if (sizeof(BitWord) == 8) + return i * BITS_PER_WORD + CountTrailingZeros_64(Bits[i]); + else + assert(0 && "Unsupported!"); + } return -1; }