[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