diff options
| author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2016-03-21 15:00:35 +0000 |
|---|---|---|
| committer | Matt Arsenault <Matthew.Arsenault@amd.com> | 2016-03-21 15:00:35 +0000 |
| commit | 155dda9134c4f771ffc75864a6a0554309ec0531 (patch) | |
| tree | 10aca4ba2ea82b5e4a0af626147204498de58685 /llvm/unittests/ADT/APIntTest.cpp | |
| parent | 0d2ad420df9446392c7d8b645b3fa88f553f860c (diff) | |
| download | llvm-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.cpp | 42 |
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()); + } + } +} |
