aboutsummaryrefslogtreecommitdiff
path: root/llvm/unittests/ADT/APIntTest.cpp
diff options
context:
space:
mode:
authorMatt Arsenault <Matthew.Arsenault@amd.com>2016-04-12 18:17:23 +0000
committerMatt Arsenault <Matthew.Arsenault@amd.com>2016-04-12 18:17:23 +0000
commitc3943574301f575ec22c1789836898614f96b86b (patch)
tree8800dabb3043668500f32b46223f8620677dc2f6 /llvm/unittests/ADT/APIntTest.cpp
parent7ac86c47d2734cd83bfe757bc075f2827d6339f2 (diff)
downloadllvm-c3943574301f575ec22c1789836898614f96b86b.zip
llvm-c3943574301f575ec22c1789836898614f96b86b.tar.gz
llvm-c3943574301f575ec22c1789836898614f96b86b.tar.bz2
APInt: Add overload of isMask
This mimics the version in MathExtras.h which isn't testing for a specific mask size. llvm-svn: 266101
Diffstat (limited to 'llvm/unittests/ADT/APIntTest.cpp')
-rw-r--r--llvm/unittests/ADT/APIntTest.cpp17
1 files changed, 17 insertions, 0 deletions
diff --git a/llvm/unittests/ADT/APIntTest.cpp b/llvm/unittests/ADT/APIntTest.cpp
index c59e695..4ae7025 100644
--- a/llvm/unittests/ADT/APIntTest.cpp
+++ b/llvm/unittests/ADT/APIntTest.cpp
@@ -994,6 +994,23 @@ TEST(APIntTest, IsSplat) {
EXPECT_TRUE(E.isSplat(32));
}
+TEST(APIntTest, isMask) {
+ EXPECT_FALSE(APIntOps::isMask(APInt(32, 0x01010101)));
+ EXPECT_FALSE(APIntOps::isMask(APInt(32, 0xf0000000)));
+ EXPECT_FALSE(APIntOps::isMask(APInt(32, 0xffff0000)));
+ EXPECT_FALSE(APIntOps::isMask(APInt(32, 0xff << 1)));
+
+ for (int N : { 1, 2, 3, 4, 7, 8, 16, 32, 64, 127, 128, 129, 256 }) {
+ EXPECT_FALSE(APIntOps::isMask(APInt(N, 0)));
+
+ APInt One(N, 1);
+ for (int I = 1; I <= N; ++I) {
+ APInt MaskVal = One.shl(I) - 1;
+ EXPECT_TRUE(APIntOps::isMask(MaskVal));
+ }
+ }
+}
+
#if defined(__clang__)
// Disable the pragma warning from versions of Clang without -Wself-move
#pragma clang diagnostic push