From ea7a3e6a6a131ef61dbc2dd5802e7cb6caf56f74 Mon Sep 17 00:00:00 2001 From: Simon Pilgrim Date: Thu, 3 Feb 2022 15:55:55 +0000 Subject: [PATCH] [X86] simplifyX86varShift - use KnownBits.getMaxValue().ult() to check for out of bounds shift amounts This is easier to grok than MaskedValueIsZero for high bits. --- llvm/lib/Target/X86/X86InstCombineIntrinsic.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/llvm/lib/Target/X86/X86InstCombineIntrinsic.cpp b/llvm/lib/Target/X86/X86InstCombineIntrinsic.cpp index ff87106..1b021ad 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)); -- 2.7.4