brintos

brintos / llvm-project-archived public Read only

0
0
Text · 17.0 KiB · e8041bb Raw
471 lines · cpp
1//===- llvm/unittests/ADT/BitTest.cpp - <bit> tests ---===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "llvm/ADT/bit.h"10#include "gtest/gtest.h"11#include <cstdint>12#include <cstdlib>13 14using namespace llvm;15 16namespace {17 18TEST(BitTest, BitCast) {19  static const uint8_t kValueU8 = 0x80;20  EXPECT_TRUE(llvm::bit_cast<int8_t>(kValueU8) < 0);21 22  static const uint16_t kValueU16 = 0x8000;23  EXPECT_TRUE(llvm::bit_cast<int16_t>(kValueU16) < 0);24 25  static const float kValueF32 = 5632.34f;26  EXPECT_FLOAT_EQ(kValueF32,27                  llvm::bit_cast<float>(llvm::bit_cast<uint32_t>(kValueF32)));28 29  static const double kValueF64 = 87987234.983498;30  EXPECT_DOUBLE_EQ(kValueF64,31                   llvm::bit_cast<double>(llvm::bit_cast<uint64_t>(kValueF64)));32}33 34// In these first two tests all of the original_uintx values are truncated35// except for 64. We could avoid this, but there's really no point.36 37TEST(BitTest, ByteSwapUnsignedRoundTrip) {38  // The point of the bit twiddling of magic is to test with and without bits39  // in every byte.40  uint64_t value = 1;41  for (std::size_t i = 0; i <= sizeof(value); ++i) {42    uint8_t original_uint8 = static_cast<uint8_t>(value);43    EXPECT_EQ(original_uint8, llvm::byteswap(llvm::byteswap(original_uint8)));44 45    uint16_t original_uint16 = static_cast<uint16_t>(value);46    EXPECT_EQ(original_uint16, llvm::byteswap(llvm::byteswap(original_uint16)));47 48    uint32_t original_uint32 = static_cast<uint32_t>(value);49    EXPECT_EQ(original_uint32, llvm::byteswap(llvm::byteswap(original_uint32)));50 51    uint64_t original_uint64 = static_cast<uint64_t>(value);52    EXPECT_EQ(original_uint64, llvm::byteswap(llvm::byteswap(original_uint64)));53 54    value = (value << 8) | 0x55; // binary 0101 0101.55  }56}57 58TEST(BitTest, ByteSwapSignedRoundTrip) {59  // The point of the bit twiddling of magic is to test with and without bits60  // in every byte.61  uint64_t value = 1;62  for (std::size_t i = 0; i <= sizeof(value); ++i) {63    int8_t original_int8 = static_cast<int8_t>(value);64    EXPECT_EQ(original_int8, llvm::byteswap(llvm::byteswap(original_int8)));65 66    int16_t original_int16 = static_cast<int16_t>(value);67    EXPECT_EQ(original_int16, llvm::byteswap(llvm::byteswap(original_int16)));68 69    int32_t original_int32 = static_cast<int32_t>(value);70    EXPECT_EQ(original_int32, llvm::byteswap(llvm::byteswap(original_int32)));71 72    int64_t original_int64 = static_cast<int64_t>(value);73    EXPECT_EQ(original_int64, llvm::byteswap(llvm::byteswap(original_int64)));74 75    // Test other sign.76    value *= -1;77 78    original_int8 = static_cast<int8_t>(value);79    EXPECT_EQ(original_int8, llvm::byteswap(llvm::byteswap(original_int8)));80 81    original_int16 = static_cast<int16_t>(value);82    EXPECT_EQ(original_int16, llvm::byteswap(llvm::byteswap(original_int16)));83 84    original_int32 = static_cast<int32_t>(value);85    EXPECT_EQ(original_int32, llvm::byteswap(llvm::byteswap(original_int32)));86 87    original_int64 = static_cast<int64_t>(value);88    EXPECT_EQ(original_int64, llvm::byteswap(llvm::byteswap(original_int64)));89 90    // Return to normal sign and twiddle.91    value *= -1;92    value = (value << 8) | 0x55; // binary 0101 0101.93  }94}95 96TEST(BitTest, ByteSwap) {97  // Unsigned types.98  EXPECT_EQ(uint8_t(0x11), llvm::byteswap(uint8_t(0x11)));99  EXPECT_EQ(uint16_t(0x1122), llvm::byteswap(uint16_t(0x2211)));100  EXPECT_EQ(uint32_t(0x11223344), llvm::byteswap(uint32_t(0x44332211)));101  EXPECT_EQ(uint64_t(0x1122334455667788ULL),102            llvm::byteswap(uint64_t(0x8877665544332211ULL)));103 104  // Signed types.105  EXPECT_EQ(int8_t(0x11), llvm::byteswap(int8_t(0x11)));106  EXPECT_EQ(int16_t(0x1122), llvm::byteswap(int16_t(0x2211)));107  EXPECT_EQ(int32_t(0x11223344), llvm::byteswap(int32_t(0x44332211)));108  EXPECT_EQ(int64_t(0x1122334455667788LL),109            llvm::byteswap(int64_t(0x8877665544332211LL)));110}111 112TEST(BitTest, HasSingleBit) {113  EXPECT_FALSE(llvm::has_single_bit(0U));114  EXPECT_FALSE(llvm::has_single_bit(0ULL));115 116  EXPECT_FALSE(llvm::has_single_bit(~0U));117  EXPECT_FALSE(llvm::has_single_bit(~0ULL));118 119  EXPECT_TRUE(llvm::has_single_bit(1U));120  EXPECT_TRUE(llvm::has_single_bit(1ULL));121 122  static const int8_t kValueS8 = -128;123  EXPECT_TRUE(llvm::has_single_bit(static_cast<uint8_t>(kValueS8)));124 125  static const int16_t kValueS16 = -32768;126  EXPECT_TRUE(llvm::has_single_bit(static_cast<uint16_t>(kValueS16)));127}128 129TEST(BitTest, BitFloor) {130  EXPECT_EQ(0u, llvm::bit_floor(uint8_t(0)));131  EXPECT_EQ(0u, llvm::bit_floor(uint16_t(0)));132  EXPECT_EQ(0u, llvm::bit_floor(uint32_t(0)));133  EXPECT_EQ(0u, llvm::bit_floor(uint64_t(0)));134 135  EXPECT_EQ(1u, llvm::bit_floor(uint8_t(1)));136  EXPECT_EQ(1u, llvm::bit_floor(uint16_t(1)));137  EXPECT_EQ(1u, llvm::bit_floor(uint32_t(1)));138  EXPECT_EQ(1u, llvm::bit_floor(uint64_t(1)));139 140  EXPECT_EQ(2u, llvm::bit_floor(uint8_t(2)));141  EXPECT_EQ(2u, llvm::bit_floor(uint16_t(2)));142  EXPECT_EQ(2u, llvm::bit_floor(uint32_t(2)));143  EXPECT_EQ(2u, llvm::bit_floor(uint64_t(2)));144 145  EXPECT_EQ(2u, llvm::bit_floor(uint8_t(3)));146  EXPECT_EQ(2u, llvm::bit_floor(uint16_t(3)));147  EXPECT_EQ(2u, llvm::bit_floor(uint32_t(3)));148  EXPECT_EQ(2u, llvm::bit_floor(uint64_t(3)));149 150  EXPECT_EQ(4u, llvm::bit_floor(uint8_t(4)));151  EXPECT_EQ(4u, llvm::bit_floor(uint16_t(4)));152  EXPECT_EQ(4u, llvm::bit_floor(uint32_t(4)));153  EXPECT_EQ(4u, llvm::bit_floor(uint64_t(4)));154 155  EXPECT_EQ(0x40u, llvm::bit_floor(uint8_t(0x7f)));156  EXPECT_EQ(0x4000u, llvm::bit_floor(uint16_t(0x7fff)));157  EXPECT_EQ(0x40000000u, llvm::bit_floor(uint32_t(0x7fffffffu)));158  EXPECT_EQ(0x4000000000000000ull,159            llvm::bit_floor(uint64_t(0x7fffffffffffffffull)));160 161  EXPECT_EQ(0x80u, llvm::bit_floor(uint8_t(0x80)));162  EXPECT_EQ(0x8000u, llvm::bit_floor(uint16_t(0x8000)));163  EXPECT_EQ(0x80000000u, llvm::bit_floor(uint32_t(0x80000000u)));164  EXPECT_EQ(0x8000000000000000ull,165            llvm::bit_floor(uint64_t(0x8000000000000000ull)));166 167  EXPECT_EQ(0x80u, llvm::bit_floor(uint8_t(0xff)));168  EXPECT_EQ(0x8000u, llvm::bit_floor(uint16_t(0xffff)));169  EXPECT_EQ(0x80000000u, llvm::bit_floor(uint32_t(0xffffffffu)));170  EXPECT_EQ(0x8000000000000000ull,171            llvm::bit_floor(uint64_t(0xffffffffffffffffull)));172}173 174TEST(BitTest, BitCeil) {175  EXPECT_EQ(1u, llvm::bit_ceil(uint8_t(0)));176  EXPECT_EQ(1u, llvm::bit_ceil(uint16_t(0)));177  EXPECT_EQ(1u, llvm::bit_ceil(uint32_t(0)));178  EXPECT_EQ(1u, llvm::bit_ceil(uint64_t(0)));179 180  EXPECT_EQ(1u, llvm::bit_ceil(uint8_t(1)));181  EXPECT_EQ(1u, llvm::bit_ceil(uint16_t(1)));182  EXPECT_EQ(1u, llvm::bit_ceil(uint32_t(1)));183  EXPECT_EQ(1u, llvm::bit_ceil(uint64_t(1)));184 185  EXPECT_EQ(2u, llvm::bit_ceil(uint8_t(2)));186  EXPECT_EQ(2u, llvm::bit_ceil(uint16_t(2)));187  EXPECT_EQ(2u, llvm::bit_ceil(uint32_t(2)));188  EXPECT_EQ(2u, llvm::bit_ceil(uint64_t(2)));189 190  EXPECT_EQ(4u, llvm::bit_ceil(uint8_t(3)));191  EXPECT_EQ(4u, llvm::bit_ceil(uint16_t(3)));192  EXPECT_EQ(4u, llvm::bit_ceil(uint32_t(3)));193  EXPECT_EQ(4u, llvm::bit_ceil(uint64_t(3)));194 195  EXPECT_EQ(4u, llvm::bit_ceil(uint8_t(4)));196  EXPECT_EQ(4u, llvm::bit_ceil(uint16_t(4)));197  EXPECT_EQ(4u, llvm::bit_ceil(uint32_t(4)));198  EXPECT_EQ(4u, llvm::bit_ceil(uint64_t(4)));199 200  // The result is the largest representable value for each type.201  EXPECT_EQ(0x80u, llvm::bit_ceil(uint8_t(0x7f)));202  EXPECT_EQ(0x8000u, llvm::bit_ceil(uint16_t(0x7fff)));203  EXPECT_EQ(0x80000000u, llvm::bit_ceil(uint32_t(0x7fffffffu)));204  EXPECT_EQ(0x8000000000000000ull,205            llvm::bit_ceil(uint64_t(0x7fffffffffffffffull)));206}207 208TEST(BitTest, BitWidth) {209  EXPECT_EQ(0, llvm::bit_width(uint8_t(0)));210  EXPECT_EQ(0, llvm::bit_width(uint16_t(0)));211  EXPECT_EQ(0, llvm::bit_width(uint32_t(0)));212  EXPECT_EQ(0, llvm::bit_width(uint64_t(0)));213 214  EXPECT_EQ(1, llvm::bit_width(uint8_t(1)));215  EXPECT_EQ(1, llvm::bit_width(uint16_t(1)));216  EXPECT_EQ(1, llvm::bit_width(uint32_t(1)));217  EXPECT_EQ(1, llvm::bit_width(uint64_t(1)));218 219  EXPECT_EQ(2, llvm::bit_width(uint8_t(2)));220  EXPECT_EQ(2, llvm::bit_width(uint16_t(2)));221  EXPECT_EQ(2, llvm::bit_width(uint32_t(2)));222  EXPECT_EQ(2, llvm::bit_width(uint64_t(2)));223 224  EXPECT_EQ(2, llvm::bit_width(uint8_t(3)));225  EXPECT_EQ(2, llvm::bit_width(uint16_t(3)));226  EXPECT_EQ(2, llvm::bit_width(uint32_t(3)));227  EXPECT_EQ(2, llvm::bit_width(uint64_t(3)));228 229  EXPECT_EQ(3, llvm::bit_width(uint8_t(4)));230  EXPECT_EQ(3, llvm::bit_width(uint16_t(4)));231  EXPECT_EQ(3, llvm::bit_width(uint32_t(4)));232  EXPECT_EQ(3, llvm::bit_width(uint64_t(4)));233 234  EXPECT_EQ(7, llvm::bit_width(uint8_t(0x7f)));235  EXPECT_EQ(15, llvm::bit_width(uint16_t(0x7fff)));236  EXPECT_EQ(31, llvm::bit_width(uint32_t(0x7fffffffu)));237  EXPECT_EQ(63, llvm::bit_width(uint64_t(0x7fffffffffffffffull)));238 239  EXPECT_EQ(8, llvm::bit_width(uint8_t(0x80)));240  EXPECT_EQ(16, llvm::bit_width(uint16_t(0x8000)));241  EXPECT_EQ(32, llvm::bit_width(uint32_t(0x80000000u)));242  EXPECT_EQ(64, llvm::bit_width(uint64_t(0x8000000000000000ull)));243 244  EXPECT_EQ(8, llvm::bit_width(uint8_t(0xff)));245  EXPECT_EQ(16, llvm::bit_width(uint16_t(0xffff)));246  EXPECT_EQ(32, llvm::bit_width(uint32_t(0xffffffffu)));247  EXPECT_EQ(64, llvm::bit_width(uint64_t(0xffffffffffffffffull)));248}249 250TEST(BitTest, BitWidthConstexpr) {251  static_assert(llvm::bit_width_constexpr(0u) == 0);252  static_assert(llvm::bit_width_constexpr(1u) == 1);253  static_assert(llvm::bit_width_constexpr(2u) == 2);254  static_assert(llvm::bit_width_constexpr(3u) == 2);255  static_assert(llvm::bit_width_constexpr(4u) == 3);256  static_assert(llvm::bit_width_constexpr(5u) == 3);257  static_assert(llvm::bit_width_constexpr(6u) == 3);258  static_assert(llvm::bit_width_constexpr(7u) == 3);259  static_assert(llvm::bit_width_constexpr(8u) == 4);260 261  static_assert(llvm::bit_width_constexpr(255u) == 8);262  static_assert(llvm::bit_width_constexpr(256u) == 9);263  static_assert(llvm::bit_width_constexpr(257u) == 9);264 265  static_assert(266      llvm::bit_width_constexpr(std::numeric_limits<uint16_t>::max()) == 16);267  static_assert(268      llvm::bit_width_constexpr(std::numeric_limits<uint32_t>::max()) == 32);269  static_assert(270      llvm::bit_width_constexpr(std::numeric_limits<uint64_t>::max()) == 64);271}272 273TEST(BitTest, BitCeilConstexpr) {274  static_assert(llvm::bit_ceil_constexpr(0u) == 1);275  static_assert(llvm::bit_ceil_constexpr(1u) == 1);276  static_assert(llvm::bit_ceil_constexpr(2u) == 2);277  static_assert(llvm::bit_ceil_constexpr(3u) == 4);278  static_assert(llvm::bit_ceil_constexpr(4u) == 4);279  static_assert(llvm::bit_ceil_constexpr(5u) == 8);280  static_assert(llvm::bit_ceil_constexpr(6u) == 8);281  static_assert(llvm::bit_ceil_constexpr(7u) == 8);282  static_assert(llvm::bit_ceil_constexpr(8u) == 8);283 284  static_assert(llvm::bit_ceil_constexpr(255u) == 256);285  static_assert(llvm::bit_ceil_constexpr(256u) == 256);286  static_assert(llvm::bit_ceil_constexpr(257u) == 512);287}288 289TEST(BitTest, CountrZeroConstexpr) {290  static_assert(llvm::countr_zero_constexpr(0u) == 32);291  static_assert(llvm::countr_zero_constexpr(1u) == 0);292  static_assert(llvm::countr_zero_constexpr(2u) == 1);293  static_assert(llvm::countr_zero_constexpr(3u) == 0);294  static_assert(llvm::countr_zero_constexpr(4u) == 2);295  static_assert(llvm::countr_zero_constexpr(8u) == 3);296  static_assert(llvm::countr_zero_constexpr(0x80000000u) == 31);297 298  static_assert(llvm::countr_zero_constexpr(0ull) == 64);299  static_assert(llvm::countr_zero_constexpr(1ull) == 0);300  static_assert(llvm::countr_zero_constexpr(0x100000000ull) == 32);301  static_assert(llvm::countr_zero_constexpr(0x8000000000000000ull) == 63);302 303  static_assert(304      llvm::countr_zero_constexpr(std::numeric_limits<uint16_t>::max()) == 0);305  static_assert(306      llvm::countr_zero_constexpr(std::numeric_limits<uint32_t>::max()) == 0);307  static_assert(308      llvm::countr_zero_constexpr(std::numeric_limits<uint64_t>::max()) == 0);309}310 311TEST(BitTest, CountlZero) {312  uint8_t Z8 = 0;313  uint16_t Z16 = 0;314  uint32_t Z32 = 0;315  uint64_t Z64 = 0;316  EXPECT_EQ(8, llvm::countl_zero(Z8));317  EXPECT_EQ(16, llvm::countl_zero(Z16));318  EXPECT_EQ(32, llvm::countl_zero(Z32));319  EXPECT_EQ(64, llvm::countl_zero(Z64));320 321  uint8_t NZ8 = 42;322  uint16_t NZ16 = 42;323  uint32_t NZ32 = 42;324  uint64_t NZ64 = 42;325  EXPECT_EQ(2, llvm::countl_zero(NZ8));326  EXPECT_EQ(10, llvm::countl_zero(NZ16));327  EXPECT_EQ(26, llvm::countl_zero(NZ32));328  EXPECT_EQ(58, llvm::countl_zero(NZ64));329 330  EXPECT_EQ(8, llvm::countl_zero(0x00F000FFu));331  EXPECT_EQ(8, llvm::countl_zero(0x00F12345u));332  for (unsigned i = 0; i <= 30; ++i) {333    EXPECT_EQ(int(31 - i), llvm::countl_zero(1u << i));334  }335 336  EXPECT_EQ(8, llvm::countl_zero(0x00F1234500F12345ULL));337  EXPECT_EQ(1, llvm::countl_zero(1ULL << 62));338  for (unsigned i = 0; i <= 62; ++i) {339    EXPECT_EQ(int(63 - i), llvm::countl_zero(1ULL << i));340  }341}342 343TEST(BitTest, CountrZero) {344  uint8_t Z8 = 0;345  uint16_t Z16 = 0;346  uint32_t Z32 = 0;347  uint64_t Z64 = 0;348  EXPECT_EQ(8, llvm::countr_zero(Z8));349  EXPECT_EQ(16, llvm::countr_zero(Z16));350  EXPECT_EQ(32, llvm::countr_zero(Z32));351  EXPECT_EQ(64, llvm::countr_zero(Z64));352 353  uint8_t NZ8 = 42;354  uint16_t NZ16 = 42;355  uint32_t NZ32 = 42;356  uint64_t NZ64 = 42;357  EXPECT_EQ(1, llvm::countr_zero(NZ8));358  EXPECT_EQ(1, llvm::countr_zero(NZ16));359  EXPECT_EQ(1, llvm::countr_zero(NZ32));360  EXPECT_EQ(1, llvm::countr_zero(NZ64));361 362  EXPECT_EQ(0, llvm::countr_zero(uint8_t(1)));363  EXPECT_EQ(3, llvm::countr_zero(uint8_t(8)));364  EXPECT_EQ(7, llvm::countr_zero(uint8_t(128)));365 366  EXPECT_EQ(0, llvm::countr_zero(uint16_t(1)));367  EXPECT_EQ(8, llvm::countr_zero(uint16_t(256)));368  EXPECT_EQ(15, llvm::countr_zero(uint16_t(32768)));369}370 371TEST(BitTest, CountlOne) {372  for (int i = 30; i >= 0; --i) {373    // Start with all ones and unset some bit.374    EXPECT_EQ(31 - i, llvm::countl_one(0xFFFFFFFF ^ (1 << i)));375  }376  for (int i = 62; i >= 0; --i) {377    // Start with all ones and unset some bit.378    EXPECT_EQ(63 - i, llvm::countl_one(0xFFFFFFFFFFFFFFFFULL ^ (1LL << i)));379  }380  for (int i = 30; i >= 0; --i) {381    // Start with all ones and unset some bit.382    EXPECT_EQ(31 - i, llvm::countl_one(0xFFFFFFFF ^ (1 << i)));383  }384}385 386TEST(BitTest, CountrOne) {387  uint8_t AllOnes8 = ~(uint8_t)0;388  uint16_t AllOnes16 = ~(uint16_t)0;389  uint32_t AllOnes32 = ~(uint32_t)0;390  uint64_t AllOnes64 = ~(uint64_t)0;391  EXPECT_EQ(8, llvm::countr_one(AllOnes8));392  EXPECT_EQ(16, llvm::countr_one(AllOnes16));393  EXPECT_EQ(32, llvm::countr_one(AllOnes32));394  EXPECT_EQ(64, llvm::countr_one(AllOnes64));395 396  uint8_t X8 = 6;397  uint16_t X16 = 6;398  uint32_t X32 = 6;399  uint64_t X64 = 6;400  EXPECT_EQ(0, llvm::countr_one(X8));401  EXPECT_EQ(0, llvm::countr_one(X16));402  EXPECT_EQ(0, llvm::countr_one(X32));403  EXPECT_EQ(0, llvm::countr_one(X64));404 405  uint8_t Y8 = 23;406  uint16_t Y16 = 23;407  uint32_t Y32 = 23;408  uint64_t Y64 = 23;409  EXPECT_EQ(3, llvm::countr_one(Y8));410  EXPECT_EQ(3, llvm::countr_one(Y16));411  EXPECT_EQ(3, llvm::countr_one(Y32));412  EXPECT_EQ(3, llvm::countr_one(Y64));413}414 415TEST(BitTest, PopCount) {416  EXPECT_EQ(0, llvm::popcount(0U));417  EXPECT_EQ(0, llvm::popcount(0ULL));418 419  EXPECT_EQ(32, llvm::popcount(~0U));420  EXPECT_EQ(64, llvm::popcount(~0ULL));421 422  for (int I = 0; I != 32; ++I)423    EXPECT_EQ(1, llvm::popcount(1U << I));424}425 426TEST(BitTest, Rotl) {427  EXPECT_EQ(0x53U, llvm::rotl<uint8_t>(0x53, 0));428  EXPECT_EQ(0x4dU, llvm::rotl<uint8_t>(0x53, 2));429  EXPECT_EQ(0xa6U, llvm::rotl<uint8_t>(0x53, 9));430  EXPECT_EQ(0x9aU, llvm::rotl<uint8_t>(0x53, -5));431 432  EXPECT_EQ(0xabcdU, llvm::rotl<uint16_t>(0xabcd, 0));433  EXPECT_EQ(0xf36aU, llvm::rotl<uint16_t>(0xabcd, 6));434  EXPECT_EQ(0xaf36U, llvm::rotl<uint16_t>(0xabcd, 18));435  EXPECT_EQ(0xf36aU, llvm::rotl<uint16_t>(0xabcd, -10));436 437  EXPECT_EQ(0xdeadbeefU, llvm::rotl<uint32_t>(0xdeadbeef, 0));438  EXPECT_EQ(0x7ddfbd5bU, llvm::rotl<uint32_t>(0xdeadbeef, 17));439  EXPECT_EQ(0x5b7ddfbdU, llvm::rotl<uint32_t>(0xdeadbeef, 41));440  EXPECT_EQ(0xb6fbbf7aU, llvm::rotl<uint32_t>(0xdeadbeef, -22));441 442  EXPECT_EQ(0x12345678deadbeefULL, llvm::rotl<uint64_t>(0x12345678deadbeefULL, 0));443  EXPECT_EQ(0xf56df77891a2b3c6ULL, llvm::rotl<uint64_t>(0x12345678deadbeefULL, 35));444  EXPECT_EQ(0x8d159e37ab6fbbc4ULL, llvm::rotl<uint64_t>(0x12345678deadbeefULL, 70));445  EXPECT_EQ(0xb7dde2468acf1bd5ULL, llvm::rotl<uint64_t>(0x12345678deadbeefULL, -19));446}447 448TEST(BitTest, Rotr) {449  EXPECT_EQ(0x53U, llvm::rotr<uint8_t>(0x53, 0));450  EXPECT_EQ(0xd4U, llvm::rotr<uint8_t>(0x53, 2));451  EXPECT_EQ(0xa9U, llvm::rotr<uint8_t>(0x53, 9));452  EXPECT_EQ(0x6aU, llvm::rotr<uint8_t>(0x53, -5));453 454  EXPECT_EQ(0xabcdU, llvm::rotr<uint16_t>(0xabcd, 0));455  EXPECT_EQ(0x36afU, llvm::rotr<uint16_t>(0xabcd, 6));456  EXPECT_EQ(0x6af3U, llvm::rotr<uint16_t>(0xabcd, 18));457  EXPECT_EQ(0x36afU, llvm::rotr<uint16_t>(0xabcd, -10));458 459  EXPECT_EQ(0xdeadbeefU, llvm::rotr<uint32_t>(0xdeadbeef, 0));460  EXPECT_EQ(0xdf77ef56U, llvm::rotr<uint32_t>(0xdeadbeef, 17));461  EXPECT_EQ(0x77ef56dfU, llvm::rotr<uint32_t>(0xdeadbeef, 41));462  EXPECT_EQ(0xbbf7ab6fU, llvm::rotr<uint32_t>(0xdeadbeef, -22));463 464  EXPECT_EQ(0x12345678deadbeefULL, llvm::rotr<uint64_t>(0x12345678deadbeefULL, 0));465  EXPECT_EQ(0x1bd5b7dde2468acfULL, llvm::rotr<uint64_t>(0x12345678deadbeefULL, 35));466  EXPECT_EQ(0xbc48d159e37ab6fbULL, llvm::rotr<uint64_t>(0x12345678deadbeefULL, 70));467  EXPECT_EQ(0xb3c6f56df77891a2ULL, llvm::rotr<uint64_t>(0x12345678deadbeefULL, -19));468}469 470} // anonymous namespace471