aboutsummaryrefslogtreecommitdiff
path: root/llvm/unittests/Support/MathExtrasTest.cpp
diff options
context:
space:
mode:
authorSimon Pilgrim <llvm-dev@redking.me.uk>2022-02-08 11:57:05 +0000
committerSimon Pilgrim <llvm-dev@redking.me.uk>2022-02-08 12:04:13 +0000
commitfd2bb51f1ec3f53e5dd1e69eb48bf191b49edda4 (patch)
treee7d98c9374e34954036564ef7b0083c3d387d0c2 /llvm/unittests/Support/MathExtrasTest.cpp
parent83f9b13d8cc2dd148c8ff7c1c71584e1eb634b75 (diff)
downloadllvm-fd2bb51f1ec3f53e5dd1e69eb48bf191b49edda4.zip
llvm-fd2bb51f1ec3f53e5dd1e69eb48bf191b49edda4.tar.gz
llvm-fd2bb51f1ec3f53e5dd1e69eb48bf191b49edda4.tar.bz2
[ADT] Add APInt/MathExtras isShiftedMask variant returning mask offset/length
In many cases, calls to isShiftedMask are immediately followed with checks to determine the size and position of the bitmask. This patch adds variants of APInt::isShiftedMask, isShiftedMask_32 and isShiftedMask_64 that return these values as additional arguments. I've updated a number of cases that were either performing seperate size/position calculations or had created their own local wrapper versions of these. Differential Revision: https://reviews.llvm.org/D119019
Diffstat (limited to 'llvm/unittests/Support/MathExtrasTest.cpp')
-rw-r--r--llvm/unittests/Support/MathExtrasTest.cpp24
1 files changed, 24 insertions, 0 deletions
diff --git a/llvm/unittests/Support/MathExtrasTest.cpp b/llvm/unittests/Support/MathExtrasTest.cpp
index cf055c6..b9ed0df 100644
--- a/llvm/unittests/Support/MathExtrasTest.cpp
+++ b/llvm/unittests/Support/MathExtrasTest.cpp
@@ -180,6 +180,18 @@ TEST(MathExtras, isShiftedMask_32) {
EXPECT_TRUE(isShiftedMask_32(0xf0000000));
EXPECT_TRUE(isShiftedMask_32(0xffff0000));
EXPECT_TRUE(isShiftedMask_32(0xff << 1));
+
+ unsigned MaskIdx, MaskLen;
+ EXPECT_FALSE(isShiftedMask_32(0x01010101, MaskIdx, MaskLen));
+ EXPECT_TRUE(isShiftedMask_32(0xf0000000, MaskIdx, MaskLen));
+ EXPECT_EQ(28, MaskIdx);
+ EXPECT_EQ(4, MaskLen);
+ EXPECT_TRUE(isShiftedMask_32(0xffff0000, MaskIdx, MaskLen));
+ EXPECT_EQ(16, MaskIdx);
+ EXPECT_EQ(16, MaskLen);
+ EXPECT_TRUE(isShiftedMask_32(0xff << 1, MaskIdx, MaskLen));
+ EXPECT_EQ(1, MaskIdx);
+ EXPECT_EQ(8, MaskLen);
}
TEST(MathExtras, isShiftedMask_64) {
@@ -187,6 +199,18 @@ TEST(MathExtras, isShiftedMask_64) {
EXPECT_TRUE(isShiftedMask_64(0xf000000000000000ull));
EXPECT_TRUE(isShiftedMask_64(0xffff000000000000ull));
EXPECT_TRUE(isShiftedMask_64(0xffull << 55));
+
+ unsigned MaskIdx, MaskLen;
+ EXPECT_FALSE(isShiftedMask_64(0x0101010101010101ull, MaskIdx, MaskLen));
+ EXPECT_TRUE(isShiftedMask_64(0xf000000000000000ull, MaskIdx, MaskLen));
+ EXPECT_EQ(60, MaskIdx);
+ EXPECT_EQ(4, MaskLen);
+ EXPECT_TRUE(isShiftedMask_64(0xffff000000000000ull, MaskIdx, MaskLen));
+ EXPECT_EQ(48, MaskIdx);
+ EXPECT_EQ(16, MaskLen);
+ EXPECT_TRUE(isShiftedMask_64(0xffull << 55, MaskIdx, MaskLen));
+ EXPECT_EQ(55, MaskIdx);
+ EXPECT_EQ(8, MaskLen);
}
TEST(MathExtras, isPowerOf2_32) {