diff options
author | Simon Pilgrim <llvm-dev@redking.me.uk> | 2022-02-03 15:55:55 +0000 |
---|---|---|
committer | Simon Pilgrim <llvm-dev@redking.me.uk> | 2022-02-03 16:02:45 +0000 |
commit | ea7a3e6a6a131ef61dbc2dd5802e7cb6caf56f74 (patch) | |
tree | d6eae907936604a248f16377c84811f5bb7c7161 | |
parent | 9b65641d5e8cf67662e0c50502964e1cead9f95a (diff) |
[X86] simplifyX86varShift - use KnownBits.getMaxValue().ult() to check for out of bounds shift amounts
This is easier to grok than MaskedValueIsZero for high bits.
-rw-r--r-- | llvm/lib/Target/X86/X86InstCombineIntrinsic.cpp | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/llvm/lib/Target/X86/X86InstCombineIntrinsic.cpp b/llvm/lib/Target/X86/X86InstCombineIntrinsic.cpp index ff8710634e89..1b021ada6b66 100644 --- a/llvm/lib/Target/X86/X86InstCombineIntrinsic.cpp +++ b/llvm/lib/Target/X86/X86InstCombineIntrinsic.cpp @@ -354,10 +354,9 @@ static Value *simplifyX86varShift(const IntrinsicInst &II, // If the shift amount is guaranteed to be in-range we can replace it with a // generic shift. - APInt UpperBits = - APInt::getHighBitsSet(BitWidth, BitWidth - Log2_32(BitWidth)); - if (llvm::MaskedValueIsZero(Amt, UpperBits, - II.getModule()->getDataLayout())) { + KnownBits KnownAmt = + llvm::computeKnownBits(Amt, II.getModule()->getDataLayout()); + if (KnownAmt.getMaxValue().ult(BitWidth)) { return (LogicalShift ? (ShiftLeft ? Builder.CreateShl(Vec, Amt) : Builder.CreateLShr(Vec, Amt)) : Builder.CreateAShr(Vec, Amt)); |