aboutsummaryrefslogtreecommitdiff
path: root/llvm/unittests/ADT/APIntTest.cpp
diff options
context:
space:
mode:
authorMatt Arsenault <Matthew.Arsenault@amd.com>2016-03-21 15:00:35 +0000
committerMatt Arsenault <Matthew.Arsenault@amd.com>2016-03-21 15:00:35 +0000
commit155dda9134c4f771ffc75864a6a0554309ec0531 (patch)
tree10aca4ba2ea82b5e4a0af626147204498de58685 /llvm/unittests/ADT/APIntTest.cpp
parent0d2ad420df9446392c7d8b645b3fa88f553f860c (diff)
downloadllvm-155dda9134c4f771ffc75864a6a0554309ec0531.zip
llvm-155dda9134c4f771ffc75864a6a0554309ec0531.tar.gz
llvm-155dda9134c4f771ffc75864a6a0554309ec0531.tar.bz2
Implement constant folding for bitreverse
llvm-svn: 263945
Diffstat (limited to 'llvm/unittests/ADT/APIntTest.cpp')
-rw-r--r--llvm/unittests/ADT/APIntTest.cpp42
1 files changed, 42 insertions, 0 deletions
diff --git a/llvm/unittests/ADT/APIntTest.cpp b/llvm/unittests/ADT/APIntTest.cpp
index 0002dad..c59e695 100644
--- a/llvm/unittests/ADT/APIntTest.cpp
+++ b/llvm/unittests/ADT/APIntTest.cpp
@@ -1023,3 +1023,45 @@ TEST(APIntTest, SelfMoveAssignment) {
#pragma clang diagnostic pop
#endif
}
+
+TEST(APIntTest, reverseBits) {
+ EXPECT_EQ(1, APInt(1, 1).reverseBits());
+ EXPECT_EQ(0, APInt(1, 0).reverseBits());
+
+ EXPECT_EQ(3, APInt(2, 3).reverseBits());
+ EXPECT_EQ(3, APInt(2, 3).reverseBits());
+
+ EXPECT_EQ(0xb, APInt(4, 0xd).reverseBits());
+ EXPECT_EQ(0xd, APInt(4, 0xb).reverseBits());
+ EXPECT_EQ(0xf, APInt(4, 0xf).reverseBits());
+
+ EXPECT_EQ(0x30, APInt(7, 0x6).reverseBits());
+ EXPECT_EQ(0x5a, APInt(7, 0x2d).reverseBits());
+
+ EXPECT_EQ(0x0f, APInt(8, 0xf0).reverseBits());
+ EXPECT_EQ(0xf0, APInt(8, 0x0f).reverseBits());
+
+ EXPECT_EQ(0x0f0f, APInt(16, 0xf0f0).reverseBits());
+ EXPECT_EQ(0xf0f0, APInt(16, 0x0f0f).reverseBits());
+
+ EXPECT_EQ(0x0f0f0f0f, APInt(32, 0xf0f0f0f0).reverseBits());
+ EXPECT_EQ(0xf0f0f0f0, APInt(32, 0x0f0f0f0f).reverseBits());
+
+ EXPECT_EQ(0x402880a0 >> 1, APInt(31, 0x05011402).reverseBits());
+
+ EXPECT_EQ(0x0f0f0f0f, APInt(32, 0xf0f0f0f0).reverseBits());
+ EXPECT_EQ(0xf0f0f0f0, APInt(32, 0x0f0f0f0f).reverseBits());
+
+ EXPECT_EQ(0x0f0f0f0f0f0f0f0f, APInt(64, 0xf0f0f0f0f0f0f0f0).reverseBits());
+ EXPECT_EQ(0xf0f0f0f0f0f0f0f0, APInt(64, 0x0f0f0f0f0f0f0f0f).reverseBits());
+
+ for (unsigned N : { 1, 8, 16, 24, 31, 32, 33,
+ 63, 64, 65, 127, 128, 257, 1024 }) {
+ for (unsigned I = 0; I < N; ++I) {
+ APInt X = APInt::getOneBitSet(N, I);
+ APInt Y = APInt::getOneBitSet(N, N - (I + 1));
+ EXPECT_EQ(Y, X.reverseBits());
+ EXPECT_EQ(X, Y.reverseBits());
+ }
+ }
+}