Skip to content

Commit 2e669ff

Browse files
committed
[X86] LowerBuildVector* - share the same SDLoc argument instead of recreating it over and over again.
1 parent 589b21f commit 2e669ff

File tree

1 file changed

+40
-40
lines changed

1 file changed

+40
-40
lines changed

llvm/lib/Target/X86/X86ISelLowering.cpp

Lines changed: 40 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -6357,7 +6357,8 @@ static SDValue getShuffleScalarElt(SDValue Op, unsigned Index,
63576357
}
63586358

63596359
// 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,
63616362
unsigned NumNonZero, unsigned NumZero,
63626363
SelectionDAG &DAG,
63636364
const X86Subtarget &Subtarget) {
@@ -6367,7 +6368,6 @@ static SDValue LowerBuildVectorAsInsert(SDValue Op, const APInt &NonZeroMask,
63676368
((VT == MVT::v16i8 || VT == MVT::v4i32) && Subtarget.hasSSE41())) &&
63686369
"Illegal vector insertion");
63696370

6370-
SDLoc dl(Op);
63716371
SDValue V;
63726372
bool First = true;
63736373

@@ -6382,24 +6382,25 @@ static SDValue LowerBuildVectorAsInsert(SDValue Op, const APInt &NonZeroMask,
63826382
if (First) {
63836383
First = false;
63846384
if (NumZero || 0 != i)
6385-
V = getZeroVector(VT, Subtarget, DAG, dl);
6385+
V = getZeroVector(VT, Subtarget, DAG, DL);
63866386
else {
63876387
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);
63906390
V = DAG.getBitcast(VT, V);
63916391
continue;
63926392
}
63936393
}
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));
63966396
}
63976397

63986398
return V;
63996399
}
64006400

64016401
/// 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,
64036404
unsigned NumNonZero, unsigned NumZero,
64046405
SelectionDAG &DAG,
64056406
const X86Subtarget &Subtarget) {
@@ -6408,10 +6409,9 @@ static SDValue LowerBuildVectorv16i8(SDValue Op, const APInt &NonZeroMask,
64086409

64096410
// SSE4.1 - use PINSRB to insert each byte directly.
64106411
if (Subtarget.hasSSE41())
6411-
return LowerBuildVectorAsInsert(Op, NonZeroMask, NumNonZero, NumZero, DAG,
6412-
Subtarget);
6412+
return LowerBuildVectorAsInsert(Op, DL, NonZeroMask, NumNonZero, NumZero,
6413+
DAG, Subtarget);
64136414

6414-
SDLoc dl(Op);
64156415
SDValue V;
64166416

64176417
// Pre-SSE4.1 - merge byte pairs and insert with PINSRW.
@@ -6421,15 +6421,15 @@ static SDValue LowerBuildVectorv16i8(SDValue Op, const APInt &NonZeroMask,
64216421
for (unsigned I = 0; I != 4; ++I) {
64226422
if (!NonZeroMask[I])
64236423
continue;
6424-
SDValue Elt = DAG.getZExtOrTrunc(Op.getOperand(I), dl, MVT::i32);
6424+
SDValue Elt = DAG.getZExtOrTrunc(Op.getOperand(I), DL, MVT::i32);
64256425
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;
64296429
}
64306430
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);
64336433
V = DAG.getBitcast(MVT::v8i16, V);
64346434
}
64356435
for (unsigned i = V ? 4 : 0; i < 16; i += 2) {
@@ -6441,21 +6441,21 @@ static SDValue LowerBuildVectorv16i8(SDValue Op, const APInt &NonZeroMask,
64416441
SDValue Elt;
64426442
if (ThisIsNonZero) {
64436443
if (NumZero || NextIsNonZero)
6444-
Elt = DAG.getZExtOrTrunc(Op.getOperand(i), dl, MVT::i32);
6444+
Elt = DAG.getZExtOrTrunc(Op.getOperand(i), DL, MVT::i32);
64456445
else
6446-
Elt = DAG.getAnyExtOrTrunc(Op.getOperand(i), dl, MVT::i32);
6446+
Elt = DAG.getAnyExtOrTrunc(Op.getOperand(i), DL, MVT::i32);
64476447
}
64486448

64496449
if (NextIsNonZero) {
64506450
SDValue NextElt = Op.getOperand(i + 1);
64516451
if (i == 0 && NumZero)
6452-
NextElt = DAG.getZExtOrTrunc(NextElt, dl, MVT::i32);
6452+
NextElt = DAG.getZExtOrTrunc(NextElt, DL, MVT::i32);
64536453
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));
64576457
if (ThisIsNonZero)
6458-
Elt = DAG.getNode(ISD::OR, dl, MVT::i32, NextElt, Elt);
6458+
Elt = DAG.getNode(ISD::OR, DL, MVT::i32, NextElt, Elt);
64596459
else
64606460
Elt = NextElt;
64616461
}
@@ -6465,36 +6465,38 @@ static SDValue LowerBuildVectorv16i8(SDValue Op, const APInt &NonZeroMask,
64656465
// elements undefined).
64666466
if (!V) {
64676467
if (i != 0 || NumZero)
6468-
V = getZeroVector(MVT::v8i16, Subtarget, DAG, dl);
6468+
V = getZeroVector(MVT::v8i16, Subtarget, DAG, DL);
64696469
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);
64716471
V = DAG.getBitcast(MVT::v8i16, V);
64726472
continue;
64736473
}
64746474
}
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));
64786478
}
64796479

64806480
return DAG.getBitcast(MVT::v16i8, V);
64816481
}
64826482

64836483
/// 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,
64856486
unsigned NumNonZero, unsigned NumZero,
64866487
SelectionDAG &DAG,
64876488
const X86Subtarget &Subtarget) {
64886489
if (NumNonZero > 4 && !Subtarget.hasSSE41())
64896490
return SDValue();
64906491

64916492
// Use PINSRW to insert each byte directly.
6492-
return LowerBuildVectorAsInsert(Op, NonZeroMask, NumNonZero, NumZero, DAG,
6493+
return LowerBuildVectorAsInsert(Op, DL, NonZeroMask, NumNonZero, NumZero, DAG,
64936494
Subtarget);
64946495
}
64956496

64966497
/// 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,
64986500
const X86Subtarget &Subtarget) {
64996501
// If this is a splat of a pair of elements, use MOVDDUP (unless the target
65006502
// has XOP; in that case defer lowering to potentially use VPERMIL2PS).
@@ -6504,7 +6506,6 @@ static SDValue LowerBuildVectorv4x32(SDValue Op, SelectionDAG &DAG,
65046506
Op.getOperand(0) == Op.getOperand(2) &&
65056507
Op.getOperand(1) == Op.getOperand(3) &&
65066508
Op.getOperand(0) != Op.getOperand(1)) {
6507-
SDLoc DL(Op);
65086509
MVT VT = Op.getSimpleValueType();
65096510
MVT EltVT = VT.getVectorElementType();
65106511
// Create a new build vector with the first 2 elements followed by undef
@@ -6574,7 +6575,7 @@ static SDValue LowerBuildVectorv4x32(SDValue Op, SelectionDAG &DAG,
65746575
// Let the shuffle legalizer deal with blend operations.
65756576
SDValue VZeroOrUndef = (Zeroable == Undefs)
65766577
? DAG.getUNDEF(VT)
6577-
: getZeroVector(VT, Subtarget, DAG, SDLoc(Op));
6578+
: getZeroVector(VT, Subtarget, DAG, DL);
65786579
if (V1.getSimpleValueType() != VT)
65796580
V1 = DAG.getBitcast(VT, V1);
65806581
return DAG.getVectorShuffle(VT, SDLoc(V1), V1, VZeroOrUndef, Mask);
@@ -6614,7 +6615,6 @@ static SDValue LowerBuildVectorv4x32(SDValue Op, SelectionDAG &DAG,
66146615

66156616
unsigned InsertPSMask = EltMaskIdx << 6 | EltIdx << 4 | ZMask;
66166617
assert((InsertPSMask & ~0xFFu) == 0 && "Invalid mask!");
6617-
SDLoc DL(Op);
66186618
SDValue Result = DAG.getNode(X86ISD::INSERTPS, DL, MVT::v4f32, V1, V2,
66196619
DAG.getIntPtrConstant(InsertPSMask, DL, true));
66206620
return DAG.getBitcast(VT, Result);
@@ -8970,18 +8970,18 @@ X86TargetLowering::LowerBUILD_VECTOR(SDValue Op, SelectionDAG &DAG) const {
89708970

89718971
// If element VT is < 32 bits, convert it to inserts into a zero vector.
89728972
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))
89758975
return V;
89768976

89778977
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))
89808980
return V;
89818981

89828982
// If element VT is == 32 bits and has 4 elems, try to generate an INSERTPS
89838983
if (EVTBits == 32 && NumElems == 4)
8984-
if (SDValue V = LowerBuildVectorv4x32(Op, DAG, Subtarget))
8984+
if (SDValue V = LowerBuildVectorv4x32(Op, dl, DAG, Subtarget))
89858985
return V;
89868986

89878987
// If element VT is == 32 bits, turn it into a number of shuffles.

0 commit comments

Comments
 (0)