================ @@ -986,15 +1003,15 @@ void X86DAGToDAGISel::PreprocessISelDAG() { case X86ISD::VBROADCAST: { MVT VT = N->getSimpleValueType(0); // Emulate v32i16/v64i8 broadcast without BWI. - if (!Subtarget->hasBWI() && (VT == MVT::v32i16 || VT == MVT::v64i8)) { - MVT NarrowVT = VT == MVT::v32i16 ? MVT::v16i16 : MVT::v32i8; + if (!Subtarget->hasBWI() && needBWI(VT)) { + MVT NarrowVT = getNarrowType(VT); SDLoc dl(N); SDValue NarrowBCast = CurDAG->getNode(X86ISD::VBROADCAST, dl, NarrowVT, N->getOperand(0)); SDValue Res = CurDAG->getNode(ISD::INSERT_SUBVECTOR, dl, VT, CurDAG->getUNDEF(VT), NarrowBCast, CurDAG->getIntPtrConstant(0, dl)); - unsigned Index = VT == MVT::v32i16 ? 16 : 32; + unsigned Index = getInsertIndex(VT); ---------------- RKSimon wrote:
unsigned Index = NarrowVT.getVectorMinNumElements() https://github.com/llvm/llvm-project/pull/73186 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits