aboutsummaryrefslogtreecommitdiff
path: root/llvm/unittests/ADT/APIntTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/unittests/ADT/APIntTest.cpp')
-rw-r--r--llvm/unittests/ADT/APIntTest.cpp22
1 files changed, 22 insertions, 0 deletions
diff --git a/llvm/unittests/ADT/APIntTest.cpp b/llvm/unittests/ADT/APIntTest.cpp
index 95cb213..566ceab 100644
--- a/llvm/unittests/ADT/APIntTest.cpp
+++ b/llvm/unittests/ADT/APIntTest.cpp
@@ -1746,21 +1746,43 @@ TEST(APIntTest, isShiftedMask) {
EXPECT_TRUE(APInt(32, 0xffff0000).isShiftedMask());
EXPECT_TRUE(APInt(32, 0xff << 1).isShiftedMask());
+ unsigned MaskIdx, MaskLen;
+ EXPECT_FALSE(APInt(32, 0x01010101).isShiftedMask(MaskIdx, MaskLen));
+ EXPECT_TRUE(APInt(32, 0xf0000000).isShiftedMask(MaskIdx, MaskLen));
+ EXPECT_EQ(28, MaskIdx);
+ EXPECT_EQ(4, MaskLen);
+ EXPECT_TRUE(APInt(32, 0xffff0000).isShiftedMask(MaskIdx, MaskLen));
+ EXPECT_EQ(16, MaskIdx);
+ EXPECT_EQ(16, MaskLen);
+ EXPECT_TRUE(APInt(32, 0xff << 1).isShiftedMask(MaskIdx, MaskLen));
+ EXPECT_EQ(1, MaskIdx);
+ EXPECT_EQ(8, MaskLen);
+
for (int N : { 1, 2, 3, 4, 7, 8, 16, 32, 64, 127, 128, 129, 256 }) {
EXPECT_FALSE(APInt(N, 0).isShiftedMask());
+ EXPECT_FALSE(APInt(N, 0).isShiftedMask(MaskIdx, MaskLen));
APInt One(N, 1);
for (int I = 1; I < N; ++I) {
APInt MaskVal = One.shl(I) - 1;
EXPECT_TRUE(MaskVal.isShiftedMask());
+ EXPECT_TRUE(MaskVal.isShiftedMask(MaskIdx, MaskLen));
+ EXPECT_EQ(0, MaskIdx);
+ EXPECT_EQ(I, MaskLen);
}
for (int I = 1; I < N - 1; ++I) {
APInt MaskVal = One.shl(I);
EXPECT_TRUE(MaskVal.isShiftedMask());
+ EXPECT_TRUE(MaskVal.isShiftedMask(MaskIdx, MaskLen));
+ EXPECT_EQ(I, MaskIdx);
+ EXPECT_EQ(1, MaskLen);
}
for (int I = 1; I < N; ++I) {
APInt MaskVal = APInt::getHighBitsSet(N, I);
EXPECT_TRUE(MaskVal.isShiftedMask());
+ EXPECT_TRUE(MaskVal.isShiftedMask(MaskIdx, MaskLen));
+ EXPECT_EQ(N - I, MaskIdx);
+ EXPECT_EQ(I, MaskLen);
}
}
}