@@ -2701,23 +2701,23 @@ X86TTIImpl::instCombineIntrinsic(InstCombiner &IC, IntrinsicInst &II) const {
2701
2701
if (match (Mask, PatternMatch::m_SExt (PatternMatch::m_Value (BoolVec))) &&
2702
2702
BoolVec->getType ()->isVectorTy () &&
2703
2703
BoolVec->getType ()->getScalarSizeInBits () == 1 ) {
2704
- assert (Mask->getType ()->getPrimitiveSizeInBits () ==
2705
- II.getType ()->getPrimitiveSizeInBits () &&
2704
+ auto *MaskTy = cast<FixedVectorType>(Mask->getType ());
2705
+ auto *OpTy = cast<FixedVectorType>(II.getType ());
2706
+ assert (MaskTy->getPrimitiveSizeInBits () ==
2707
+ OpTy->getPrimitiveSizeInBits () &&
2706
2708
" Not expecting mask and operands with different sizes" );
2709
+ unsigned NumMaskElts = MaskTy->getNumElements ();
2710
+ unsigned NumOperandElts = OpTy->getNumElements ();
2707
2711
2708
- unsigned NumMaskElts =
2709
- cast<FixedVectorType>(Mask->getType ())->getNumElements ();
2710
- unsigned NumOperandElts =
2711
- cast<FixedVectorType>(II.getType ())->getNumElements ();
2712
2712
if (NumMaskElts == NumOperandElts) {
2713
2713
return SelectInst::Create (BoolVec, Op1, Op0);
2714
2714
}
2715
2715
2716
2716
// If the mask has less elements than the operands, each mask bit maps to
2717
2717
// multiple elements of the operands. Bitcast back and forth.
2718
2718
if (NumMaskElts < NumOperandElts) {
2719
- Value *CastOp0 = IC.Builder .CreateBitCast (Op0, Mask-> getType () );
2720
- Value *CastOp1 = IC.Builder .CreateBitCast (Op1, Mask-> getType () );
2719
+ Value *CastOp0 = IC.Builder .CreateBitCast (Op0, MaskTy );
2720
+ Value *CastOp1 = IC.Builder .CreateBitCast (Op1, MaskTy );
2721
2721
Value *Sel = IC.Builder .CreateSelect (BoolVec, CastOp1, CastOp0);
2722
2722
return new BitCastInst (Sel, II.getType ());
2723
2723
}
0 commit comments