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; } _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits