mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-30 19:35:54 +00:00
[SystemZ] Address review comments for r233689
Change lowerCTPOP to: - Gracefully handle a known-zero input value - Simplify computation of significant bit size Thanks to Jay Foad for the review! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@233736 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
1b10376319
commit
a9204bb532
@ -2319,12 +2319,13 @@ SDValue SystemZTargetLowering::lowerCTPOP(SDValue Op,
|
||||
Op = Op.getOperand(0);
|
||||
APInt KnownZero, KnownOne;
|
||||
DAG.computeKnownBits(Op, KnownZero, KnownOne);
|
||||
uint64_t Mask = ~KnownZero.getZExtValue();
|
||||
unsigned NumSignificantBits = (~KnownZero).getActiveBits();
|
||||
if (NumSignificantBits == 0)
|
||||
return DAG.getConstant(0, VT);
|
||||
|
||||
// Skip known-zero high parts of the operand.
|
||||
int64_t BitSize = OrigBitSize;
|
||||
while ((Mask & ((((uint64_t)1 << (BitSize / 2)) - 1) << (BitSize / 2))) == 0)
|
||||
BitSize = BitSize / 2;
|
||||
int64_t BitSize = (int64_t)1 << Log2_32_Ceil(NumSignificantBits);
|
||||
BitSize = std::min(BitSize, OrigBitSize);
|
||||
|
||||
// The POPCNT instruction counts the number of bits in each byte.
|
||||
Op = DAG.getNode(ISD::ANY_EXTEND, DL, MVT::i64, Op);
|
||||
|
Loading…
x
Reference in New Issue
Block a user