aboutsummaryrefslogtreecommitdiff
path: root/llvm/unittests/Support/KnownBitsTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/unittests/Support/KnownBitsTest.cpp')
-rw-r--r--llvm/unittests/Support/KnownBitsTest.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/llvm/unittests/Support/KnownBitsTest.cpp b/llvm/unittests/Support/KnownBitsTest.cpp
index 2f5d2e8..da1f6b5 100644
--- a/llvm/unittests/Support/KnownBitsTest.cpp
+++ b/llvm/unittests/Support/KnownBitsTest.cpp
@@ -284,6 +284,12 @@ TEST(KnownBitsTest, UnaryExhaustive) {
KnownAbs.Zero.setAllBits();
KnownAbs.One.setAllBits();
KnownBits KnownAbsPoison(KnownAbs);
+ KnownBits KnownBlsi(Bits);
+ KnownBlsi.Zero.setAllBits();
+ KnownBlsi.One.setAllBits();
+ KnownBits KnownBlsmsk(Bits);
+ KnownBlsmsk.Zero.setAllBits();
+ KnownBlsmsk.One.setAllBits();
ForeachNumInKnownBits(Known, [&](const APInt &N) {
APInt Res = N.abs();
@@ -294,6 +300,14 @@ TEST(KnownBitsTest, UnaryExhaustive) {
KnownAbsPoison.One &= Res;
KnownAbsPoison.Zero &= ~Res;
}
+
+ Res = N & -N;
+ KnownBlsi.One &= Res;
+ KnownBlsi.Zero &= ~Res;
+
+ Res = N ^ (N - 1);
+ KnownBlsmsk.One &= Res;
+ KnownBlsmsk.Zero &= ~Res;
});
// abs() is conservatively correct, but not guaranteed to be precise.
@@ -304,6 +318,12 @@ TEST(KnownBitsTest, UnaryExhaustive) {
KnownBits ComputedAbsPoison = Known.abs(true);
EXPECT_TRUE(ComputedAbsPoison.Zero.isSubsetOf(KnownAbsPoison.Zero));
EXPECT_TRUE(ComputedAbsPoison.One.isSubsetOf(KnownAbsPoison.One));
+
+ KnownBits ComputedBlsi = Known.blsi();
+ EXPECT_EQ(KnownBlsi, ComputedBlsi);
+
+ KnownBits ComputedBlsmsk = Known.blsmsk();
+ EXPECT_EQ(KnownBlsmsk, ComputedBlsmsk);
});
}