[llvm] [Support][APint] Optimize fallback case in APInt::reverseBits (PR #189291)
Max Graey via llvm-commits
llvm-commits at lists.llvm.org
Tue Mar 31 05:15:56 PDT 2026
================
@@ -766,33 +766,43 @@ APInt APInt::byteSwap() const {
}
APInt APInt::reverseBits() const {
- switch (BitWidth) {
- case 64:
- return APInt(BitWidth, llvm::reverseBits<uint64_t>(U.VAL));
- case 32:
- return APInt(BitWidth, llvm::reverseBits<uint32_t>(U.VAL));
- case 16:
- return APInt(BitWidth, llvm::reverseBits<uint16_t>(U.VAL));
- case 8:
- return APInt(BitWidth, llvm::reverseBits<uint8_t>(U.VAL));
- case 0:
- return *this;
- default:
- break;
- }
-
- APInt Val(*this);
- APInt Reversed(BitWidth, 0);
- unsigned S = BitWidth;
-
- for (; Val != 0; Val.lshrInPlace(1)) {
- Reversed <<= 1;
- Reversed |= Val[0];
- --S;
+ if (isSingleWord()) {
+ switch (BitWidth) {
+ case 64:
+ return APInt(BitWidth, llvm::reverseBits<uint64_t>(U.VAL));
+ case 32:
+ return APInt(BitWidth, llvm::reverseBits<uint32_t>(U.VAL));
+ case 16:
+ return APInt(BitWidth, llvm::reverseBits<uint16_t>(U.VAL));
+ case 8:
+ return APInt(BitWidth, llvm::reverseBits<uint8_t>(U.VAL));
+ case 1: // fallthrough
+ case 0:
+ return *this;
+ default:
+ return APInt(BitWidth,
+ llvm::reverseBits<uint64_t>(U.VAL) >> (64 - BitWidth));
+ }
----------------
MaxGraey wrote:
Then let's leave everything as it is for now
https://github.com/llvm/llvm-project/pull/189291
More information about the llvm-commits
mailing list