[llvm-branch-commits] [llvm] c0939fd - [Support] Simplify KnownBits::sextInReg implementation.
Simon Pilgrim via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Thu Jan 14 07:19:03 PST 2021
Author: Simon Pilgrim
Date: 2021-01-14T15:14:32Z
New Revision: c0939fddf80c16829502186e2e5b78f77696310a
URL: https://github.com/llvm/llvm-project/commit/c0939fddf80c16829502186e2e5b78f77696310a
DIFF: https://github.com/llvm/llvm-project/commit/c0939fddf80c16829502186e2e5b78f77696310a.diff
LOG: [Support] Simplify KnownBits::sextInReg implementation.
As noted by @foad in rG9cf4f493a72f all we need to do is sextInReg both KnownBits One and Zero.
Added:
Modified:
llvm/lib/Support/KnownBits.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Support/KnownBits.cpp b/llvm/lib/Support/KnownBits.cpp
index a46a90bb97d4..3623a54ae476 100644
--- a/llvm/lib/Support/KnownBits.cpp
+++ b/llvm/lib/Support/KnownBits.cpp
@@ -91,34 +91,12 @@ KnownBits KnownBits::sextInReg(unsigned SrcBitWidth) const {
if (SrcBitWidth == BitWidth)
return *this;
- // Sign extension. Compute the demanded bits in the result that are not
- // present in the input.
- APInt NewBits = APInt::getHighBitsSet(BitWidth, BitWidth - SrcBitWidth);
-
- // If the sign extended bits are demanded, we know that the sign
- // bit is demanded.
- APInt InSignMask = APInt::getSignMask(SrcBitWidth).zext(BitWidth);
- APInt InDemandedBits = APInt::getLowBitsSet(BitWidth, SrcBitWidth);
- if (NewBits.getBoolValue())
- InDemandedBits |= InSignMask;
-
+ unsigned ExtBits = BitWidth - SrcBitWidth;
KnownBits Result;
- Result.One = One & InDemandedBits;
- Result.Zero = Zero & InDemandedBits;
-
- // If the sign bit of the input is known set or clear, then we know the
- // top bits of the result.
- if (Result.Zero.intersects(InSignMask)) { // Input sign bit known clear
- Result.Zero |= NewBits;
- Result.One &= ~NewBits;
- } else if (Result.One.intersects(InSignMask)) { // Input sign bit known set
- Result.One |= NewBits;
- Result.Zero &= ~NewBits;
- } else { // Input sign bit unknown
- Result.Zero &= ~NewBits;
- Result.One &= ~NewBits;
- }
-
+ Result.One = One << ExtBits;
+ Result.Zero = Zero << ExtBits;
+ Result.One.ashrInPlace(ExtBits);
+ Result.Zero.ashrInPlace(ExtBits);
return Result;
}
More information about the llvm-branch-commits
mailing list