aboutsummaryrefslogtreecommitdiff
path: root/llvm/unittests/ADT/APIntTest.cpp
diff options
context:
space:
mode:
authorChaitanya Koparkar <ckoparkar@gmail.com>2025-08-21 07:52:18 -0400
committerGitHub <noreply@github.com>2025-08-21 12:52:18 +0100
commitad63a70d6da0fd2a1b6033d44c278eb9f6b3c2d3 (patch)
treef05456736873f639dd22017e593886dc063c2721 /llvm/unittests/ADT/APIntTest.cpp
parent35f01cea6551f577133200e29d160d35fa4b76f4 (diff)
downloadllvm-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.cpp76
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