aboutsummaryrefslogtreecommitdiff
path: root/llvm/unittests/ADT/APIntTest.cpp
diff options
context:
space:
mode:
authorYingwei Zheng <dtcxzyw2333@gmail.com>2024-05-13 19:12:05 +0800
committerGitHub <noreply@github.com>2024-05-13 19:12:05 +0800
commit99934daa9b795278b8cc168fad430e09473b4992 (patch)
treec2ad2769c7c04b54fde6c2441e62a5825098cc4f /llvm/unittests/ADT/APIntTest.cpp
parent4b44502ac81259630b422e791a82e0252e6478c3 (diff)
downloadllvm-99934daa9b795278b8cc168fad430e09473b4992.zip
llvm-99934daa9b795278b8cc168fad430e09473b4992.tar.gz
llvm-99934daa9b795278b8cc168fad430e09473b4992.tar.bz2
[ADT] Introduce `APInt::clearHighBits` (#91938)
This patch addresses https://github.com/llvm/llvm-project/pull/90034#discussion_r1579235844.
Diffstat (limited to 'llvm/unittests/ADT/APIntTest.cpp')
-rw-r--r--llvm/unittests/ADT/APIntTest.cpp65
1 files changed, 65 insertions, 0 deletions
diff --git a/llvm/unittests/ADT/APIntTest.cpp b/llvm/unittests/ADT/APIntTest.cpp
index 46aaa47..eb4b847 100644
--- a/llvm/unittests/ADT/APIntTest.cpp
+++ b/llvm/unittests/ADT/APIntTest.cpp
@@ -2534,6 +2534,71 @@ TEST(APIntTest, clearLowBits) {
EXPECT_EQ(16u, i32hi16.popcount());
}
+TEST(APIntTest, clearHighBits) {
+ APInt i64hi32 = APInt::getAllOnes(64);
+ i64hi32.clearHighBits(32);
+ EXPECT_EQ(32u, i64hi32.countr_one());
+ EXPECT_EQ(0u, i64hi32.countr_zero());
+ EXPECT_EQ(32u, i64hi32.getActiveBits());
+ EXPECT_EQ(32u, i64hi32.countl_zero());
+ EXPECT_EQ(0u, i64hi32.countl_one());
+ EXPECT_EQ(32u, i64hi32.popcount());
+
+ APInt i128hi64 = APInt::getAllOnes(128);
+ i128hi64.clearHighBits(64);
+ EXPECT_EQ(64u, i128hi64.countr_one());
+ EXPECT_EQ(0u, i128hi64.countr_zero());
+ EXPECT_EQ(64u, i128hi64.getActiveBits());
+ EXPECT_EQ(64u, i128hi64.countl_zero());
+ EXPECT_EQ(0u, i128hi64.countl_one());
+ EXPECT_EQ(64u, i128hi64.popcount());
+
+ APInt i128hi24 = APInt::getAllOnes(128);
+ i128hi24.clearHighBits(104);
+ EXPECT_EQ(24u, i128hi24.countr_one());
+ EXPECT_EQ(0u, i128hi24.countr_zero());
+ EXPECT_EQ(24u, i128hi24.getActiveBits());
+ EXPECT_EQ(104u, i128hi24.countl_zero());
+ EXPECT_EQ(0u, i128hi24.countl_one());
+ EXPECT_EQ(24u, i128hi24.popcount());
+
+ APInt i128hi104 = APInt::getAllOnes(128);
+ i128hi104.clearHighBits(24);
+ EXPECT_EQ(104u, i128hi104.countr_one());
+ EXPECT_EQ(0u, i128hi104.countr_zero());
+ EXPECT_EQ(104u, i128hi104.getActiveBits());
+ EXPECT_EQ(24u, i128hi104.countl_zero());
+ EXPECT_EQ(0u, i128hi104.countl_one());
+ EXPECT_EQ(104u, i128hi104.popcount());
+
+ APInt i128hi0 = APInt::getAllOnes(128);
+ i128hi0.clearHighBits(128);
+ EXPECT_EQ(0u, i128hi0.countr_one());
+ EXPECT_EQ(128u, i128hi0.countr_zero());
+ EXPECT_EQ(0u, i128hi0.getActiveBits());
+ EXPECT_EQ(128u, i128hi0.countl_zero());
+ EXPECT_EQ(0u, i128hi0.countl_one());
+ EXPECT_EQ(0u, i128hi0.popcount());
+
+ APInt i80hi1 = APInt::getAllOnes(80);
+ i80hi1.clearHighBits(79);
+ EXPECT_EQ(1u, i80hi1.countr_one());
+ EXPECT_EQ(0u, i80hi1.countr_zero());
+ EXPECT_EQ(1u, i80hi1.getActiveBits());
+ EXPECT_EQ(79u, i80hi1.countl_zero());
+ EXPECT_EQ(0u, i80hi1.countl_one());
+ EXPECT_EQ(1u, i80hi1.popcount());
+
+ APInt i32hi16 = APInt::getAllOnes(32);
+ i32hi16.clearHighBits(16);
+ EXPECT_EQ(16u, i32hi16.countr_one());
+ EXPECT_EQ(0u, i32hi16.countr_zero());
+ EXPECT_EQ(16u, i32hi16.getActiveBits());
+ EXPECT_EQ(16u, i32hi16.countl_zero());
+ EXPECT_EQ(0u, i32hi16.countl_one());
+ EXPECT_EQ(16u, i32hi16.popcount());
+}
+
TEST(APIntTest, abds) {
using APIntOps::abds;