diff options
| author | Yingwei Zheng <dtcxzyw2333@gmail.com> | 2024-05-13 19:12:05 +0800 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-05-13 19:12:05 +0800 | 
| commit | 99934daa9b795278b8cc168fad430e09473b4992 (patch) | |
| tree | c2ad2769c7c04b54fde6c2441e62a5825098cc4f /llvm/unittests/ADT/APIntTest.cpp | |
| parent | 4b44502ac81259630b422e791a82e0252e6478c3 (diff) | |
| download | llvm-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.cpp | 65 | 
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; | 
