[llvm] [InstCombine] Simplify demanded bits of blendv mask operands (PR #173723)
Dhruva Narayan K via llvm-commits
llvm-commits at lists.llvm.org
Sat Dec 27 21:33:07 PST 2025
================
@@ -2890,21 +2889,28 @@ X86TTIImpl::instCombineIntrinsic(InstCombiner &IC, IntrinsicInst &II) const {
getNegativeIsTrueBoolVec(ConstantMask, IC.getDataLayout());
return SelectInst::Create(NewSelector, Op1, Op0, "blendv");
}
+ unsigned BitWidth = Mask->getType()->getScalarSizeInBits();
+ KnownBits Known(BitWidth);
- Mask = InstCombiner::peekThroughBitcast(Mask);
+ if (Mask->getType()->isIntOrIntVectorTy()) {
+ if (IC.SimplifyDemandedBits(&II, 2, APInt::getSignMask(BitWidth), Known))
+ return ⅈ
+ }
- // Bitshift upto the signbit can always be converted to an efficient
- // test+select pattern.
- if (match(Mask, m_Shl(m_Value(), m_Value()))) {
- if (auto *MaskTy = dyn_cast<FixedVectorType>(Mask->getType())) {
- if (MaskTy->getScalarSizeInBits() == OpTy->getScalarSizeInBits()) {
- Value *BoolVec = IC.Builder.CreateICmpSGT(
- ConstantAggregateZero::get(MaskTy), Mask);
- Value *Sel = IC.Builder.CreateSelect(BoolVec, Op1, Op0);
- return new BitCastInst(Sel, II.getType());
+ else if (auto *BC = dyn_cast<BitCastInst>(Mask)) {
----------------
Xylecrack wrote:
done
https://github.com/llvm/llvm-project/pull/173723
More information about the llvm-commits
mailing list