diff options
| author | Chaitanya Koparkar <ckoparkar@gmail.com> | 2025-08-21 07:52:18 -0400 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-08-21 12:52:18 +0100 | 
| commit | ad63a70d6da0fd2a1b6033d44c278eb9f6b3c2d3 (patch) | |
| tree | f05456736873f639dd22017e593886dc063c2721 /llvm/unittests/ADT/APIntTest.cpp | |
| parent | 35f01cea6551f577133200e29d160d35fa4b76f4 (diff) | |
| download | llvm-ad63a70d6da0fd2a1b6033d44c278eb9f6b3c2d3.zip llvm-ad63a70d6da0fd2a1b6033d44c278eb9f6b3c2d3.tar.gz llvm-ad63a70d6da0fd2a1b6033d44c278eb9f6b3c2d3.tar.bz2 | |
[ADT] Add fshl/fshr operations to APInt (#153790)
These operations are required for #153151.
Diffstat (limited to 'llvm/unittests/ADT/APIntTest.cpp')
| -rw-r--r-- | llvm/unittests/ADT/APIntTest.cpp | 76 | 
1 files changed, 76 insertions, 0 deletions
| diff --git a/llvm/unittests/ADT/APIntTest.cpp b/llvm/unittests/ADT/APIntTest.cpp index acc6a09..5b01072 100644 --- a/llvm/unittests/ADT/APIntTest.cpp +++ b/llvm/unittests/ADT/APIntTest.cpp @@ -3744,4 +3744,80 @@ TEST(APIntTest, TryExt) {    ASSERT_EQ(42, APInt(128, -1).trySExtValue().value_or(42));  } +TEST(APIntTest, Fshl) { +  EXPECT_EQ( +      APIntOps::fshl(APInt(8, 0), APInt(8, 255), APInt(8, 8)).getZExtValue(), +      0); +  EXPECT_EQ( +      APIntOps::fshl(APInt(8, 255), APInt(8, 0), APInt(8, 8)).getZExtValue(), +      255); +  EXPECT_EQ( +      APIntOps::fshl(APInt(8, 255), APInt(8, 0), APInt(8, 15)).getZExtValue(), +      128); +  EXPECT_EQ( +      APIntOps::fshl(APInt(8, 15), APInt(8, 15), APInt(8, 11)).getZExtValue(), +      120); +  EXPECT_EQ( +      APIntOps::fshl(APInt(8, 2), APInt(8, 1), APInt(8, 3)).getZExtValue(), 16); +  EXPECT_EQ( +      APIntOps::fshl(APInt(8, 2), APInt(8, 1), APInt(8, 1)).getZExtValue(), +      APIntOps::fshl(APInt(8, 2), APInt(8, 1), APInt(8, 9)).getZExtValue()); +  EXPECT_EQ( +      APIntOps::fshl(APInt(8, 2), APInt(8, 1), APInt(8, 7)).getZExtValue(), +      APIntOps::fshl(APInt(8, 2), APInt(8, 1), APInt(8, 15)).getZExtValue()); +  EXPECT_EQ(APIntOps::fshl(APInt(32, 0, /*isSigned*/ true), +                           APInt(32, 2147483647, /*isSigned*/ true), +                           APInt(32, 32, /*isSigned*/ true)) +                .getSExtValue(), +            0); +  EXPECT_EQ(APIntOps::fshl(APInt(64, 1, /*isSigned*/ true), +                           APInt(64, 2, /*isSigned*/ true), +                           APInt(64, 3, /*isSigned*/ true)) +                .getSExtValue(), +            8); +  EXPECT_EQ(APIntOps::fshl(APInt(16, -2, /*isSigned*/ true), +                           APInt(16, -1, /*isSigned*/ true), +                           APInt(16, 3, /*isSigned*/ true)) +                .getSExtValue(), +            -9); +} + +TEST(APIntTest, Fshr) { +  EXPECT_EQ( +      APIntOps::fshr(APInt(8, 0), APInt(8, 255), APInt(8, 8)).getZExtValue(), +      255); +  EXPECT_EQ( +      APIntOps::fshr(APInt(8, 255), APInt(8, 0), APInt(8, 8)).getZExtValue(), +      0); +  EXPECT_EQ( +      APIntOps::fshr(APInt(8, 255), APInt(8, 0), APInt(8, 15)).getZExtValue(), +      254); +  EXPECT_EQ( +      APIntOps::fshr(APInt(8, 15), APInt(8, 15), APInt(8, 11)).getZExtValue(), +      225); +  EXPECT_EQ( +      APIntOps::fshr(APInt(8, 1), APInt(8, 2), APInt(8, 3)).getZExtValue(), 32); +  EXPECT_EQ( +      APIntOps::fshr(APInt(8, 1), APInt(8, 2), APInt(8, 1)).getZExtValue(), +      APIntOps::fshr(APInt(8, 1), APInt(8, 2), APInt(8, 9)).getZExtValue()); +  EXPECT_EQ( +      APIntOps::fshr(APInt(8, 1), APInt(8, 2), APInt(8, 7)).getZExtValue(), +      APIntOps::fshr(APInt(8, 1), APInt(8, 2), APInt(8, 15)).getZExtValue()); +  EXPECT_EQ(APIntOps::fshr(APInt(64, 0, /*isSigned*/ true), +                           APInt(64, 9223372036854775807, /*isSigned*/ true), +                           APInt(64, 64, /*isSigned*/ true)) +                .getSExtValue(), +            9223372036854775807); +  EXPECT_EQ(APIntOps::fshr(APInt(64, 1, /*isSigned*/ true), +                           APInt(64, 2, /*isSigned*/ true), +                           APInt(64, 3, /*isSigned*/ true)) +                .getSExtValue(), +            2305843009213693952); +  EXPECT_EQ(APIntOps::fshr(APInt(16, -2, /*isSigned*/ true), +                           APInt(16, -1, /*isSigned*/ true), +                           APInt(16, 3, /*isSigned*/ true)) +                .getSExtValue(), +            -8193); +} +  } // end anonymous namespace | 
