[X86] simplifyX86varShift - use KnownBits.getMaxValue().ult() to check for out of...
authorSimon Pilgrim <llvm-dev@redking.me.uk>
Thu, 3 Feb 2022 15:55:55 +0000 (15:55 +0000)
committerSimon Pilgrim <llvm-dev@redking.me.uk>
Thu, 3 Feb 2022 16:02:45 +0000 (16:02 +0000)
This is easier to grok than MaskedValueIsZero for high bits.

llvm/lib/Target/X86/X86InstCombineIntrinsic.cpp

index ff87106..1b021ad 100644 (file)
@@ -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));