@@ -30000,6 +30000,7 @@ static SDValue LowerShift(SDValue Op, const X86Subtarget &Subtarget,
30000
30000
SDLoc dl(Op);
30001
30001
SDValue R = Op.getOperand(0);
30002
30002
SDValue Amt = Op.getOperand(1);
30003
+ unsigned NumElts = VT.getVectorNumElements();
30003
30004
unsigned EltSizeInBits = VT.getScalarSizeInBits();
30004
30005
bool ConstantAmt = ISD::isBuildVectorOfConstantSDNodes(Amt.getNode());
30005
30006
@@ -30069,7 +30070,6 @@ static SDValue LowerShift(SDValue Op, const X86Subtarget &Subtarget,
30069
30070
if (ConstantAmt && (VT == MVT::v8i16 || VT == MVT::v4i32 ||
30070
30071
(VT == MVT::v16i16 && Subtarget.hasInt256()))) {
30071
30072
SDValue Amt1, Amt2;
30072
- unsigned NumElts = VT.getVectorNumElements();
30073
30073
SmallVector<int, 8> ShuffleMask;
30074
30074
for (unsigned i = 0; i != NumElts; ++i) {
30075
30075
SDValue A = Amt->getOperand(i);
@@ -30116,7 +30116,6 @@ static SDValue LowerShift(SDValue Op, const X86Subtarget &Subtarget,
30116
30116
VT == MVT::v8i16 || VT == MVT::v16i16 || VT == MVT::v32i16) &&
30117
30117
!Subtarget.hasXOP()) {
30118
30118
MVT NarrowScalarVT = VT.getScalarType();
30119
- int NumElts = VT.getVectorNumElements();
30120
30119
// We can do this extra fast if each pair of narrow elements is shifted by
30121
30120
// the same amount by doing this SWAR style: use a shift to move the valid
30122
30121
// bits to the right position, mask out any bits which crossed from one
@@ -30377,7 +30376,6 @@ static SDValue LowerShift(SDValue Op, const X86Subtarget &Subtarget,
30377
30376
if ((VT == MVT::v16i8 && Subtarget.hasSSSE3()) ||
30378
30377
(VT == MVT::v32i8 && Subtarget.hasInt256()) ||
30379
30378
(VT == MVT::v64i8 && Subtarget.hasBWI())) {
30380
- unsigned NumElts = VT.getVectorNumElements();
30381
30379
unsigned NumLanes = VT.getSizeInBits() / 128u;
30382
30380
unsigned NumEltsPerLane = NumElts / NumLanes;
30383
30381
SmallVector<APInt, 16> LUT;
@@ -30417,7 +30415,7 @@ static SDValue LowerShift(SDValue Op, const X86Subtarget &Subtarget,
30417
30415
assert((!Subtarget.hasBWI() || VT == MVT::v32i8 || VT == MVT::v16i8) &&
30418
30416
"Unexpected vector type");
30419
30417
MVT EvtSVT = Subtarget.hasBWI() ? MVT::i16 : MVT::i32;
30420
- MVT ExtVT = MVT::getVectorVT(EvtSVT, VT.getVectorNumElements() );
30418
+ MVT ExtVT = MVT::getVectorVT(EvtSVT, NumElts );
30421
30419
unsigned ExtOpc = Opc == ISD::SRA ? ISD::SIGN_EXTEND : ISD::ZERO_EXTEND;
30422
30420
R = DAG.getNode(ExtOpc, dl, ExtVT, R);
30423
30421
Amt = DAG.getNode(ISD::ZERO_EXTEND, dl, ExtVT, Amt);
@@ -30431,7 +30429,6 @@ static SDValue LowerShift(SDValue Op, const X86Subtarget &Subtarget,
30431
30429
(VT == MVT::v16i8 || (VT == MVT::v32i8 && Subtarget.hasInt256()) ||
30432
30430
(VT == MVT::v64i8 && Subtarget.hasBWI())) &&
30433
30431
!Subtarget.hasXOP()) {
30434
- int NumElts = VT.getVectorNumElements();
30435
30432
MVT VT16 = MVT::getVectorVT(MVT::i16, NumElts / 2);
30436
30433
SDValue Cst8 = DAG.getTargetConstant(8, dl, MVT::i8);
30437
30434
@@ -30477,14 +30474,14 @@ static SDValue LowerShift(SDValue Op, const X86Subtarget &Subtarget,
30477
30474
if (VT == MVT::v16i8 ||
30478
30475
(VT == MVT::v32i8 && Subtarget.hasInt256() && !Subtarget.hasXOP()) ||
30479
30476
(VT == MVT::v64i8 && Subtarget.hasBWI())) {
30480
- MVT ExtVT = MVT::getVectorVT(MVT::i16, VT.getVectorNumElements() / 2);
30477
+ MVT ExtVT = MVT::getVectorVT(MVT::i16, NumElts / 2);
30481
30478
30482
30479
auto SignBitSelect = [&](MVT SelVT, SDValue Sel, SDValue V0, SDValue V1) {
30483
30480
if (VT.is512BitVector()) {
30484
30481
// On AVX512BW targets we make use of the fact that VSELECT lowers
30485
30482
// to a masked blend which selects bytes based just on the sign bit
30486
30483
// extracted to a mask.
30487
- MVT MaskVT = MVT::getVectorVT(MVT::i1, VT.getVectorNumElements() );
30484
+ MVT MaskVT = MVT::getVectorVT(MVT::i1, NumElts );
30488
30485
V0 = DAG.getBitcast(VT, V0);
30489
30486
V1 = DAG.getBitcast(VT, V1);
30490
30487
Sel = DAG.getBitcast(VT, Sel);
@@ -30611,7 +30608,7 @@ static SDValue LowerShift(SDValue Op, const X86Subtarget &Subtarget,
30611
30608
// On SSE41 targets we can use PBLENDVB which selects bytes based just on
30612
30609
// the sign bit.
30613
30610
if (UseSSE41) {
30614
- MVT ExtVT = MVT::getVectorVT(MVT::i8, VT.getVectorNumElements() * 2);
30611
+ MVT ExtVT = MVT::getVectorVT(MVT::i8, NumElts * 2);
30615
30612
V0 = DAG.getBitcast(ExtVT, V0);
30616
30613
V1 = DAG.getBitcast(ExtVT, V1);
30617
30614
Sel = DAG.getBitcast(ExtVT, Sel);
0 commit comments