Make it 64-bit safe.
authorEvan Cheng <evan.cheng@apple.com>
Fri, 2 Mar 2007 02:31:37 +0000 (02:31 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Fri, 2 Mar 2007 02:31:37 +0000 (02:31 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34829 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/ADT/BitVector.h

index 269621313fae074bc703c373f24c230ce676ac61..2b0e127265d96e9b66a65cb78daa0067f2e81379 100644 (file)
@@ -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;
   }