@@ -6357,7 +6357,8 @@ static SDValue getShuffleScalarElt(SDValue Op, unsigned Index,
6357
6357
}
6358
6358
6359
6359
// Use PINSRB/PINSRW/PINSRD to create a build vector.
6360
- static SDValue LowerBuildVectorAsInsert(SDValue Op, const APInt &NonZeroMask,
6360
+ static SDValue LowerBuildVectorAsInsert(SDValue Op, const SDLoc &DL,
6361
+ const APInt &NonZeroMask,
6361
6362
unsigned NumNonZero, unsigned NumZero,
6362
6363
SelectionDAG &DAG,
6363
6364
const X86Subtarget &Subtarget) {
@@ -6367,7 +6368,6 @@ static SDValue LowerBuildVectorAsInsert(SDValue Op, const APInt &NonZeroMask,
6367
6368
((VT == MVT::v16i8 || VT == MVT::v4i32) && Subtarget.hasSSE41())) &&
6368
6369
"Illegal vector insertion");
6369
6370
6370
- SDLoc dl(Op);
6371
6371
SDValue V;
6372
6372
bool First = true;
6373
6373
@@ -6382,24 +6382,25 @@ static SDValue LowerBuildVectorAsInsert(SDValue Op, const APInt &NonZeroMask,
6382
6382
if (First) {
6383
6383
First = false;
6384
6384
if (NumZero || 0 != i)
6385
- V = getZeroVector(VT, Subtarget, DAG, dl );
6385
+ V = getZeroVector(VT, Subtarget, DAG, DL );
6386
6386
else {
6387
6387
assert(0 == i && "Expected insertion into zero-index");
6388
- V = DAG.getAnyExtOrTrunc(Op.getOperand(i), dl , MVT::i32);
6389
- V = DAG.getNode(ISD::SCALAR_TO_VECTOR, dl , MVT::v4i32, V);
6388
+ V = DAG.getAnyExtOrTrunc(Op.getOperand(i), DL , MVT::i32);
6389
+ V = DAG.getNode(ISD::SCALAR_TO_VECTOR, DL , MVT::v4i32, V);
6390
6390
V = DAG.getBitcast(VT, V);
6391
6391
continue;
6392
6392
}
6393
6393
}
6394
- V = DAG.getNode(ISD::INSERT_VECTOR_ELT, dl , VT, V, Op.getOperand(i),
6395
- DAG.getIntPtrConstant(i, dl ));
6394
+ V = DAG.getNode(ISD::INSERT_VECTOR_ELT, DL , VT, V, Op.getOperand(i),
6395
+ DAG.getIntPtrConstant(i, DL ));
6396
6396
}
6397
6397
6398
6398
return V;
6399
6399
}
6400
6400
6401
6401
/// Custom lower build_vector of v16i8.
6402
- static SDValue LowerBuildVectorv16i8(SDValue Op, const APInt &NonZeroMask,
6402
+ static SDValue LowerBuildVectorv16i8(SDValue Op, const SDLoc &DL,
6403
+ const APInt &NonZeroMask,
6403
6404
unsigned NumNonZero, unsigned NumZero,
6404
6405
SelectionDAG &DAG,
6405
6406
const X86Subtarget &Subtarget) {
@@ -6408,10 +6409,9 @@ static SDValue LowerBuildVectorv16i8(SDValue Op, const APInt &NonZeroMask,
6408
6409
6409
6410
// SSE4.1 - use PINSRB to insert each byte directly.
6410
6411
if (Subtarget.hasSSE41())
6411
- return LowerBuildVectorAsInsert(Op, NonZeroMask, NumNonZero, NumZero, DAG ,
6412
- Subtarget);
6412
+ return LowerBuildVectorAsInsert(Op, DL, NonZeroMask, NumNonZero, NumZero,
6413
+ DAG, Subtarget);
6413
6414
6414
- SDLoc dl(Op);
6415
6415
SDValue V;
6416
6416
6417
6417
// Pre-SSE4.1 - merge byte pairs and insert with PINSRW.
@@ -6421,15 +6421,15 @@ static SDValue LowerBuildVectorv16i8(SDValue Op, const APInt &NonZeroMask,
6421
6421
for (unsigned I = 0; I != 4; ++I) {
6422
6422
if (!NonZeroMask[I])
6423
6423
continue;
6424
- SDValue Elt = DAG.getZExtOrTrunc(Op.getOperand(I), dl , MVT::i32);
6424
+ SDValue Elt = DAG.getZExtOrTrunc(Op.getOperand(I), DL , MVT::i32);
6425
6425
if (I != 0)
6426
- Elt = DAG.getNode(ISD::SHL, dl , MVT::i32, Elt,
6427
- DAG.getConstant(I * 8, dl , MVT::i8));
6428
- V = V ? DAG.getNode(ISD::OR, dl , MVT::i32, V, Elt) : Elt;
6426
+ Elt = DAG.getNode(ISD::SHL, DL , MVT::i32, Elt,
6427
+ DAG.getConstant(I * 8, DL , MVT::i8));
6428
+ V = V ? DAG.getNode(ISD::OR, DL , MVT::i32, V, Elt) : Elt;
6429
6429
}
6430
6430
assert(V && "Failed to fold v16i8 vector to zero");
6431
- V = DAG.getNode(ISD::SCALAR_TO_VECTOR, dl , MVT::v4i32, V);
6432
- V = DAG.getNode(X86ISD::VZEXT_MOVL, dl , MVT::v4i32, V);
6431
+ V = DAG.getNode(ISD::SCALAR_TO_VECTOR, DL , MVT::v4i32, V);
6432
+ V = DAG.getNode(X86ISD::VZEXT_MOVL, DL , MVT::v4i32, V);
6433
6433
V = DAG.getBitcast(MVT::v8i16, V);
6434
6434
}
6435
6435
for (unsigned i = V ? 4 : 0; i < 16; i += 2) {
@@ -6441,21 +6441,21 @@ static SDValue LowerBuildVectorv16i8(SDValue Op, const APInt &NonZeroMask,
6441
6441
SDValue Elt;
6442
6442
if (ThisIsNonZero) {
6443
6443
if (NumZero || NextIsNonZero)
6444
- Elt = DAG.getZExtOrTrunc(Op.getOperand(i), dl , MVT::i32);
6444
+ Elt = DAG.getZExtOrTrunc(Op.getOperand(i), DL , MVT::i32);
6445
6445
else
6446
- Elt = DAG.getAnyExtOrTrunc(Op.getOperand(i), dl , MVT::i32);
6446
+ Elt = DAG.getAnyExtOrTrunc(Op.getOperand(i), DL , MVT::i32);
6447
6447
}
6448
6448
6449
6449
if (NextIsNonZero) {
6450
6450
SDValue NextElt = Op.getOperand(i + 1);
6451
6451
if (i == 0 && NumZero)
6452
- NextElt = DAG.getZExtOrTrunc(NextElt, dl , MVT::i32);
6452
+ NextElt = DAG.getZExtOrTrunc(NextElt, DL , MVT::i32);
6453
6453
else
6454
- NextElt = DAG.getAnyExtOrTrunc(NextElt, dl , MVT::i32);
6455
- NextElt = DAG.getNode(ISD::SHL, dl , MVT::i32, NextElt,
6456
- DAG.getConstant(8, dl , MVT::i8));
6454
+ NextElt = DAG.getAnyExtOrTrunc(NextElt, DL , MVT::i32);
6455
+ NextElt = DAG.getNode(ISD::SHL, DL , MVT::i32, NextElt,
6456
+ DAG.getConstant(8, DL , MVT::i8));
6457
6457
if (ThisIsNonZero)
6458
- Elt = DAG.getNode(ISD::OR, dl , MVT::i32, NextElt, Elt);
6458
+ Elt = DAG.getNode(ISD::OR, DL , MVT::i32, NextElt, Elt);
6459
6459
else
6460
6460
Elt = NextElt;
6461
6461
}
@@ -6465,36 +6465,38 @@ static SDValue LowerBuildVectorv16i8(SDValue Op, const APInt &NonZeroMask,
6465
6465
// elements undefined).
6466
6466
if (!V) {
6467
6467
if (i != 0 || NumZero)
6468
- V = getZeroVector(MVT::v8i16, Subtarget, DAG, dl );
6468
+ V = getZeroVector(MVT::v8i16, Subtarget, DAG, DL );
6469
6469
else {
6470
- V = DAG.getNode(ISD::SCALAR_TO_VECTOR, dl , MVT::v4i32, Elt);
6470
+ V = DAG.getNode(ISD::SCALAR_TO_VECTOR, DL , MVT::v4i32, Elt);
6471
6471
V = DAG.getBitcast(MVT::v8i16, V);
6472
6472
continue;
6473
6473
}
6474
6474
}
6475
- Elt = DAG.getNode(ISD::TRUNCATE, dl , MVT::i16, Elt);
6476
- V = DAG.getNode(ISD::INSERT_VECTOR_ELT, dl , MVT::v8i16, V, Elt,
6477
- DAG.getIntPtrConstant(i / 2, dl ));
6475
+ Elt = DAG.getNode(ISD::TRUNCATE, DL , MVT::i16, Elt);
6476
+ V = DAG.getNode(ISD::INSERT_VECTOR_ELT, DL , MVT::v8i16, V, Elt,
6477
+ DAG.getIntPtrConstant(i / 2, DL ));
6478
6478
}
6479
6479
6480
6480
return DAG.getBitcast(MVT::v16i8, V);
6481
6481
}
6482
6482
6483
6483
/// Custom lower build_vector of v8i16.
6484
- static SDValue LowerBuildVectorv8i16(SDValue Op, const APInt &NonZeroMask,
6484
+ static SDValue LowerBuildVectorv8i16(SDValue Op, const SDLoc &DL,
6485
+ const APInt &NonZeroMask,
6485
6486
unsigned NumNonZero, unsigned NumZero,
6486
6487
SelectionDAG &DAG,
6487
6488
const X86Subtarget &Subtarget) {
6488
6489
if (NumNonZero > 4 && !Subtarget.hasSSE41())
6489
6490
return SDValue();
6490
6491
6491
6492
// Use PINSRW to insert each byte directly.
6492
- return LowerBuildVectorAsInsert(Op, NonZeroMask, NumNonZero, NumZero, DAG,
6493
+ return LowerBuildVectorAsInsert(Op, DL, NonZeroMask, NumNonZero, NumZero, DAG,
6493
6494
Subtarget);
6494
6495
}
6495
6496
6496
6497
/// Custom lower build_vector of v4i32 or v4f32.
6497
- static SDValue LowerBuildVectorv4x32(SDValue Op, SelectionDAG &DAG,
6498
+ static SDValue LowerBuildVectorv4x32(SDValue Op, const SDLoc &DL,
6499
+ SelectionDAG &DAG,
6498
6500
const X86Subtarget &Subtarget) {
6499
6501
// If this is a splat of a pair of elements, use MOVDDUP (unless the target
6500
6502
// has XOP; in that case defer lowering to potentially use VPERMIL2PS).
@@ -6504,7 +6506,6 @@ static SDValue LowerBuildVectorv4x32(SDValue Op, SelectionDAG &DAG,
6504
6506
Op.getOperand(0) == Op.getOperand(2) &&
6505
6507
Op.getOperand(1) == Op.getOperand(3) &&
6506
6508
Op.getOperand(0) != Op.getOperand(1)) {
6507
- SDLoc DL(Op);
6508
6509
MVT VT = Op.getSimpleValueType();
6509
6510
MVT EltVT = VT.getVectorElementType();
6510
6511
// Create a new build vector with the first 2 elements followed by undef
@@ -6574,7 +6575,7 @@ static SDValue LowerBuildVectorv4x32(SDValue Op, SelectionDAG &DAG,
6574
6575
// Let the shuffle legalizer deal with blend operations.
6575
6576
SDValue VZeroOrUndef = (Zeroable == Undefs)
6576
6577
? DAG.getUNDEF(VT)
6577
- : getZeroVector(VT, Subtarget, DAG, SDLoc(Op) );
6578
+ : getZeroVector(VT, Subtarget, DAG, DL );
6578
6579
if (V1.getSimpleValueType() != VT)
6579
6580
V1 = DAG.getBitcast(VT, V1);
6580
6581
return DAG.getVectorShuffle(VT, SDLoc(V1), V1, VZeroOrUndef, Mask);
@@ -6614,7 +6615,6 @@ static SDValue LowerBuildVectorv4x32(SDValue Op, SelectionDAG &DAG,
6614
6615
6615
6616
unsigned InsertPSMask = EltMaskIdx << 6 | EltIdx << 4 | ZMask;
6616
6617
assert((InsertPSMask & ~0xFFu) == 0 && "Invalid mask!");
6617
- SDLoc DL(Op);
6618
6618
SDValue Result = DAG.getNode(X86ISD::INSERTPS, DL, MVT::v4f32, V1, V2,
6619
6619
DAG.getIntPtrConstant(InsertPSMask, DL, true));
6620
6620
return DAG.getBitcast(VT, Result);
@@ -8970,18 +8970,18 @@ X86TargetLowering::LowerBUILD_VECTOR(SDValue Op, SelectionDAG &DAG) const {
8970
8970
8971
8971
// If element VT is < 32 bits, convert it to inserts into a zero vector.
8972
8972
if (EVTBits == 8 && NumElems == 16)
8973
- if (SDValue V = LowerBuildVectorv16i8(Op, NonZeroMask, NumNonZero, NumZero ,
8974
- DAG, Subtarget))
8973
+ if (SDValue V = LowerBuildVectorv16i8(Op, dl, NonZeroMask, NumNonZero ,
8974
+ NumZero, DAG, Subtarget))
8975
8975
return V;
8976
8976
8977
8977
if (EltVT == MVT::i16 && NumElems == 8)
8978
- if (SDValue V = LowerBuildVectorv8i16(Op, NonZeroMask, NumNonZero, NumZero ,
8979
- DAG, Subtarget))
8978
+ if (SDValue V = LowerBuildVectorv8i16(Op, dl, NonZeroMask, NumNonZero ,
8979
+ NumZero, DAG, Subtarget))
8980
8980
return V;
8981
8981
8982
8982
// If element VT is == 32 bits and has 4 elems, try to generate an INSERTPS
8983
8983
if (EVTBits == 32 && NumElems == 4)
8984
- if (SDValue V = LowerBuildVectorv4x32(Op, DAG, Subtarget))
8984
+ if (SDValue V = LowerBuildVectorv4x32(Op, dl, DAG, Subtarget))
8985
8985
return V;
8986
8986
8987
8987
// If element VT is == 32 bits, turn it into a number of shuffles.
0 commit comments