mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-01 13:11:39 +01:00
SmallBitVector: Rework find_first/find_next and tweak test to test them (at least on 64 bit platforms).
llvm-svn: 102712
This commit is contained in:
parent
e4ebf09068
commit
f3e9546fc1
@ -199,13 +199,12 @@ public:
|
||||
int find_first() const {
|
||||
if (isSmall()) {
|
||||
uintptr_t Bits = getSmallBits();
|
||||
if (sizeof(uintptr_t) * CHAR_BIT == 32) {
|
||||
size_t FirstBit = CountTrailingZeros_32(Bits);
|
||||
return FirstBit == 32 ? -1 : FirstBit;
|
||||
} else if (sizeof(uintptr_t) * CHAR_BIT == 64) {
|
||||
size_t FirstBit = CountTrailingZeros_64(Bits);
|
||||
return FirstBit == 64 ? -1 : FirstBit;
|
||||
}
|
||||
if (Bits == 0)
|
||||
return -1;
|
||||
if (sizeof(uintptr_t) * CHAR_BIT == 32)
|
||||
return CountTrailingZeros_32(Bits);
|
||||
if (sizeof(uintptr_t) * CHAR_BIT == 64)
|
||||
return CountTrailingZeros_64(Bits);
|
||||
assert(0 && "Unsupported!");
|
||||
}
|
||||
return getPointer()->find_first();
|
||||
@ -218,13 +217,12 @@ public:
|
||||
uintptr_t Bits = getSmallBits();
|
||||
// Mask off previous bits.
|
||||
Bits &= ~uintptr_t(0) << (Prev + 1);
|
||||
if (sizeof(uintptr_t) * CHAR_BIT == 32) {
|
||||
size_t FirstBit = CountTrailingZeros_32(Bits);
|
||||
return FirstBit == 32 ? -1 : FirstBit;
|
||||
} else if (sizeof(uintptr_t) * CHAR_BIT == 64) {
|
||||
size_t FirstBit = CountTrailingZeros_64(Bits);
|
||||
return FirstBit == 64 ? -1 : FirstBit;
|
||||
}
|
||||
if (Bits == 0 || Prev + 1 >= getSmallSize())
|
||||
return -1;
|
||||
if (sizeof(uintptr_t) * CHAR_BIT == 32)
|
||||
return CountTrailingZeros_32(Bits);
|
||||
if (sizeof(uintptr_t) * CHAR_BIT == 64)
|
||||
return CountTrailingZeros_64(Bits);
|
||||
assert(0 && "Unsupported!");
|
||||
}
|
||||
return getPointer()->find_next(Prev);
|
||||
|
@ -55,7 +55,7 @@ TEST(SmallBitVectorTest, TrivialOperation) {
|
||||
Vec.resize(26, true);
|
||||
Vec.resize(29, false);
|
||||
Vec.resize(33, true);
|
||||
Vec.resize(61, false);
|
||||
Vec.resize(57, false);
|
||||
unsigned Count = 0;
|
||||
for (unsigned i = Vec.find_first(); i != -1u; i = Vec.find_next(i)) {
|
||||
++Count;
|
||||
@ -66,7 +66,8 @@ TEST(SmallBitVectorTest, TrivialOperation) {
|
||||
EXPECT_EQ(Count, 23u);
|
||||
EXPECT_FALSE(Vec[0]);
|
||||
EXPECT_TRUE(Vec[32]);
|
||||
EXPECT_FALSE(Vec[60]);
|
||||
EXPECT_FALSE(Vec[56]);
|
||||
Vec.resize(61, false);
|
||||
|
||||
SmallBitVector Copy = Vec;
|
||||
SmallBitVector Alt(3, false);
|
||||
|
Loading…
x
Reference in New Issue
Block a user