Skip to content

Commit cf2f558

Browse files
committed
[DAG/RISCV] Continue mitgrating to getInsertSubvector and getExtractSubvector
Follow up to 6e654ca, use the new routines in more places. Note that I've excluded from this patch any case which uses a getConstant index instead of a getVectorIdxConstant index just to minimize room for error. I'll get those in a separate follow up.
1 parent 7f633b5 commit cf2f558

File tree

3 files changed

+40
-80
lines changed

3 files changed

+40
-80
lines changed

llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23844,8 +23844,6 @@ SDValue DAGCombiner::createBuildVecShuffle(const SDLoc &DL, SDNode *N,
2384423844
ArrayRef<int> VectorMask,
2384523845
SDValue VecIn1, SDValue VecIn2,
2384623846
unsigned LeftIdx, bool DidSplitVec) {
23847-
SDValue ZeroIdx = DAG.getVectorIdxConstant(0, DL);
23848-
2384923847
EVT VT = N->getValueType(0);
2385023848
EVT InVT1 = VecIn1.getValueType();
2385123849
EVT InVT2 = VecIn2.getNode() ? VecIn2.getValueType() : InVT1;
@@ -23886,7 +23884,7 @@ SDValue DAGCombiner::createBuildVecShuffle(const SDLoc &DL, SDNode *N,
2388623884
// output, split it in two.
2388723885
VecIn2 = DAG.getNode(ISD::EXTRACT_SUBVECTOR, DL, VT, VecIn1,
2388823886
DAG.getVectorIdxConstant(NumElems, DL));
23889-
VecIn1 = DAG.getNode(ISD::EXTRACT_SUBVECTOR, DL, VT, VecIn1, ZeroIdx);
23887+
VecIn1 = DAG.getExtractSubvector(DL, VT, VecIn1, 0);
2389023888
// Since we now have shorter input vectors, adjust the offset of the
2389123889
// second vector's start.
2389223890
Vec2Offset = NumElems;
@@ -23908,8 +23906,7 @@ SDValue DAGCombiner::createBuildVecShuffle(const SDLoc &DL, SDNode *N,
2390823906
if (InVT1 != InVT2) {
2390923907
if (!TLI.isTypeLegal(InVT2))
2391023908
return SDValue();
23911-
VecIn2 = DAG.getNode(ISD::INSERT_SUBVECTOR, DL, InVT1,
23912-
DAG.getUNDEF(InVT1), VecIn2, ZeroIdx);
23909+
VecIn2 = DAG.getInsertSubvector(DL, DAG.getUNDEF(InVT1), VecIn2, 0);
2391323910
}
2391423911
ShuffleNumElems = NumElems * 2;
2391523912
}
@@ -23936,8 +23933,7 @@ SDValue DAGCombiner::createBuildVecShuffle(const SDLoc &DL, SDNode *N,
2393623933
return SDValue();
2393723934

2393823935
if (InVT1 != InVT2) {
23939-
VecIn2 = DAG.getNode(ISD::INSERT_SUBVECTOR, DL, InVT1,
23940-
DAG.getUNDEF(InVT1), VecIn2, ZeroIdx);
23936+
VecIn2 = DAG.getInsertSubvector(DL, DAG.getUNDEF(InVT1), VecIn2, 0);
2394123937
}
2394223938
ShuffleNumElems = InVT1Size / VTSize * NumElems;
2394323939
} else {
@@ -23977,7 +23973,7 @@ SDValue DAGCombiner::createBuildVecShuffle(const SDLoc &DL, SDNode *N,
2397723973

2397823974
SDValue Shuffle = DAG.getVectorShuffle(InVT1, DL, VecIn1, VecIn2, Mask);
2397923975
if (ShuffleNumElems > NumElems)
23980-
Shuffle = DAG.getNode(ISD::EXTRACT_SUBVECTOR, DL, VT, Shuffle, ZeroIdx);
23976+
Shuffle = DAG.getExtractSubvector(DL, VT, Shuffle, 0);
2398123977

2398223978
return Shuffle;
2398323979
}
@@ -26790,9 +26786,8 @@ SDValue DAGCombiner::visitVECTOR_SHUFFLE(SDNode *N) {
2679026786
}
2679126787

2679226788
if (MatchingShuffle)
26793-
return DAG.getNode(ISD::INSERT_SUBVECTOR, SDLoc(N), VT, LHS,
26794-
RHS.getOperand(SubVec),
26795-
DAG.getVectorIdxConstant(SubIdx, SDLoc(N)));
26789+
return DAG.getInsertSubvector(SDLoc(N), LHS, RHS.getOperand(SubVec),
26790+
SubIdx);
2679626791
}
2679726792
}
2679826793
return SDValue();

llvm/lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1385,8 +1385,7 @@ SDValue VectorLegalizer::ExpandANY_EXTEND_VECTOR_INREG(SDNode *Node) {
13851385
NumSrcElements = VT.getSizeInBits() / SrcVT.getScalarSizeInBits();
13861386
SrcVT = EVT::getVectorVT(*DAG.getContext(), SrcVT.getScalarType(),
13871387
NumSrcElements);
1388-
Src = DAG.getNode(ISD::INSERT_SUBVECTOR, DL, SrcVT, DAG.getUNDEF(SrcVT),
1389-
Src, DAG.getVectorIdxConstant(0, DL));
1388+
Src = DAG.getInsertSubvector(DL, DAG.getUNDEF(SrcVT), Src, 0);
13901389
}
13911390

13921391
// Build a base mask of undef shuffles.
@@ -1444,8 +1443,7 @@ SDValue VectorLegalizer::ExpandZERO_EXTEND_VECTOR_INREG(SDNode *Node) {
14441443
NumSrcElements = VT.getSizeInBits() / SrcVT.getScalarSizeInBits();
14451444
SrcVT = EVT::getVectorVT(*DAG.getContext(), SrcVT.getScalarType(),
14461445
NumSrcElements);
1447-
Src = DAG.getNode(ISD::INSERT_SUBVECTOR, DL, SrcVT, DAG.getUNDEF(SrcVT),
1448-
Src, DAG.getVectorIdxConstant(0, DL));
1446+
Src = DAG.getInsertSubvector(DL, DAG.getUNDEF(SrcVT), Src, 0);
14491447
}
14501448

14511449
// Build up a zero vector to blend into this one.

llvm/lib/Target/RISCV/RISCVISelLowering.cpp

Lines changed: 32 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -4275,8 +4275,7 @@ static SDValue lowerBUILD_VECTOR(SDValue Op, SelectionDAG &DAG,
42754275
DAG.getNode(ISD::BUILD_VECTOR, DL, OneRegVT, OneVRegOfOps);
42764276
SubBV = convertToScalableVector(M1VT, SubBV, DAG, Subtarget);
42774277
unsigned InsertIdx = (i / ElemsPerVReg) * NumOpElts;
4278-
Vec = DAG.getNode(ISD::INSERT_SUBVECTOR, DL, ContainerVT, Vec, SubBV,
4279-
DAG.getVectorIdxConstant(InsertIdx, DL));
4278+
Vec = DAG.getInsertSubvector(DL, Vec, SubBV, InsertIdx);
42804279
}
42814280
return convertFromScalableVector(VT, Vec, DAG, Subtarget);
42824281
}
@@ -5367,8 +5366,7 @@ static SDValue lowerShuffleViaVRegSplitting(ShuffleVectorSDNode *SVN,
53675366
(NumOfDestRegs <= 2 && NumShuffles >= 4))
53685367
return SDValue();
53695368
auto ExtractValue = [&, &DAG = DAG](SDValue SrcVec, unsigned ExtractIdx) {
5370-
SDValue SubVec = DAG.getNode(ISD::EXTRACT_SUBVECTOR, DL, M1VT, SrcVec,
5371-
DAG.getVectorIdxConstant(ExtractIdx, DL));
5369+
SDValue SubVec = DAG.getExtractSubvector(DL, M1VT, SrcVec, ExtractIdx);
53725370
SubVec = convertFromScalableVector(OneRegVT, SubVec, DAG, Subtarget);
53735371
return SubVec;
53745372
};
@@ -5410,8 +5408,7 @@ static SDValue lowerShuffleViaVRegSplitting(ShuffleVectorSDNode *SVN,
54105408

54115409
unsigned InsertIdx = I * NumOpElts;
54125410
V = convertToScalableVector(M1VT, V, DAG, Subtarget);
5413-
Vec = DAG.getNode(ISD::INSERT_SUBVECTOR, DL, ContainerVT, Vec, V,
5414-
DAG.getVectorIdxConstant(InsertIdx, DL));
5411+
Vec = DAG.getInsertSubvector(DL, Vec, V, InsertIdx);
54155412
}
54165413
return convertFromScalableVector(VT, Vec, DAG, Subtarget);
54175414
}
@@ -5789,17 +5786,15 @@ static SDValue lowerVECTOR_SHUFFLE(SDValue Op, SelectionDAG &DAG,
57895786
} else {
57905787
assert(EvenSrc >= 0 && "Undef source?");
57915788
EvenV = (EvenSrc / Size) == 0 ? V1 : V2;
5792-
EvenV = DAG.getNode(ISD::EXTRACT_SUBVECTOR, DL, HalfVT, EvenV,
5793-
DAG.getVectorIdxConstant(EvenSrc % Size, DL));
5789+
EvenV = DAG.getExtractSubvector(DL, HalfVT, EvenV, EvenSrc % Size);
57945790
}
57955791

57965792
if (LaneIsUndef[1]) {
57975793
OddV = DAG.getUNDEF(HalfVT);
57985794
} else {
57995795
assert(OddSrc >= 0 && "Undef source?");
58005796
OddV = (OddSrc / Size) == 0 ? V1 : V2;
5801-
OddV = DAG.getNode(ISD::EXTRACT_SUBVECTOR, DL, HalfVT, OddV,
5802-
DAG.getVectorIdxConstant(OddSrc % Size, DL));
5797+
OddV = DAG.getExtractSubvector(DL, HalfVT, OddV, OddSrc % Size);
58035798
}
58045799

58055800
// Prefer vzip2a if available.
@@ -6057,20 +6052,15 @@ static SDValue lowerVECTOR_SHUFFLE(SDValue Op, SelectionDAG &DAG,
60576052
// register in the index register group for all registers within the
60586053
// source register group. TODO: This generalizes to m2, and m4.
60596054
if (isLocalRepeatingShuffle(Mask, MinVLMAX)) {
6060-
SDValue SubIndex =
6061-
DAG.getNode(ISD::EXTRACT_SUBVECTOR, DL, SubIndexVT, LHSIndices,
6062-
DAG.getVectorIdxConstant(0, DL));
6055+
SDValue SubIndex = DAG.getExtractSubvector(DL, SubIndexVT, LHSIndices, 0);
60636056
SDValue Gather = DAG.getUNDEF(ContainerVT);
60646057
for (int i = 0; i < N; i++) {
6065-
SDValue SubIdx =
6066-
DAG.getVectorIdxConstant(M1VT.getVectorMinNumElements() * i, DL);
6067-
SDValue SubV1 =
6068-
DAG.getNode(ISD::EXTRACT_SUBVECTOR, DL, M1VT, V1, SubIdx);
6058+
unsigned SubIdx = M1VT.getVectorMinNumElements() * i;
6059+
SDValue SubV1 = DAG.getExtractSubvector(DL, M1VT, V1, SubIdx);
60696060
SDValue SubVec =
60706061
DAG.getNode(GatherVVOpc, DL, M1VT, SubV1, SubIndex,
60716062
DAG.getUNDEF(M1VT), InnerTrueMask, InnerVL);
6072-
Gather = DAG.getNode(ISD::INSERT_SUBVECTOR, DL, ContainerVT, Gather,
6073-
SubVec, SubIdx);
6063+
Gather = DAG.getInsertSubvector(DL, Gather, SubVec, SubIdx);
60746064
}
60756065
return convertFromScalableVector(VT, Gather, DAG, Subtarget);
60766066
}
@@ -6083,11 +6073,8 @@ static SDValue lowerVECTOR_SHUFFLE(SDValue Op, SelectionDAG &DAG,
60836073
// contains all the output elements.
60846074
if (isLowSourceShuffle(Mask, MinVLMAX) &&
60856075
isSpanSplatShuffle(Mask, MinVLMAX)) {
6086-
SDValue SubV1 = DAG.getNode(ISD::EXTRACT_SUBVECTOR, DL, M1VT, V1,
6087-
DAG.getVectorIdxConstant(0, DL));
6088-
SDValue SubIndex =
6089-
DAG.getNode(ISD::EXTRACT_SUBVECTOR, DL, SubIndexVT, LHSIndices,
6090-
DAG.getVectorIdxConstant(0, DL));
6076+
SDValue SubV1 = DAG.getExtractSubvector(DL, M1VT, V1, 0);
6077+
SDValue SubIndex = DAG.getExtractSubvector(DL, SubIndexVT, LHSIndices, 0);
60916078
SDValue SubVec = DAG.getNode(GatherVVOpc, DL, M1VT, SubV1, SubIndex,
60926079
DAG.getUNDEF(M1VT), InnerTrueMask, InnerVL);
60936080
SDValue Gather = DAG.getUNDEF(ContainerVT);
@@ -6108,8 +6095,7 @@ static SDValue lowerVECTOR_SHUFFLE(SDValue Op, SelectionDAG &DAG,
61086095
if (isLowSourceShuffle(Mask, MinVLMAX)) {
61096096
SDValue SlideAmt =
61106097
DAG.getElementCount(DL, XLenVT, M1VT.getVectorElementCount());
6111-
SDValue SubV1 = DAG.getNode(ISD::EXTRACT_SUBVECTOR, DL, M1VT, V1,
6112-
DAG.getVectorIdxConstant(0, DL));
6098+
SDValue SubV1 = DAG.getExtractSubvector(DL, M1VT, V1, 0);
61136099
SDValue Gather = DAG.getUNDEF(ContainerVT);
61146100
for (int i = 0; i < N; i++) {
61156101
if (i != 0)
@@ -7773,9 +7759,7 @@ SDValue RISCVTargetLowering::LowerOperation(SDValue Op,
77737759
// Don't insert undef subvectors.
77747760
if (SubVec.isUndef())
77757761
continue;
7776-
Vec =
7777-
DAG.getNode(ISD::INSERT_SUBVECTOR, DL, VT, Vec, SubVec,
7778-
DAG.getVectorIdxConstant(OpIdx.index() * NumOpElts, DL));
7762+
Vec = DAG.getInsertSubvector(DL, Vec, SubVec, OpIdx.index() * NumOpElts);
77797763
}
77807764
return Vec;
77817765
}
@@ -9641,14 +9625,14 @@ SDValue RISCVTargetLowering::lowerINSERT_VECTOR_ELT(SDValue Op,
96419625
// we're performing the scalar inserts and slideup on a smaller LMUL.
96429626
MVT OrigContainerVT = ContainerVT;
96439627
SDValue OrigVec = Vec;
9644-
SDValue AlignedIdx;
9628+
std::optional<unsigned> AlignedIdx;
96459629
if (auto *IdxC = dyn_cast<ConstantSDNode>(Idx)) {
96469630
const unsigned OrigIdx = IdxC->getZExtValue();
96479631
// Do we know an upper bound on LMUL?
96489632
if (auto ShrunkVT = getSmallestVTForIndex(ContainerVT, OrigIdx,
96499633
DL, DAG, Subtarget)) {
96509634
ContainerVT = *ShrunkVT;
9651-
AlignedIdx = DAG.getVectorIdxConstant(0, DL);
9635+
AlignedIdx = 0;
96529636
}
96539637

96549638
// If we're compiling for an exact VLEN value, we can always perform
@@ -9661,16 +9645,13 @@ SDValue RISCVTargetLowering::lowerINSERT_VECTOR_ELT(SDValue Op,
96619645
unsigned ElemsPerVReg = *VLEN / ElemVT.getFixedSizeInBits();
96629646
unsigned RemIdx = OrigIdx % ElemsPerVReg;
96639647
unsigned SubRegIdx = OrigIdx / ElemsPerVReg;
9664-
unsigned ExtractIdx =
9665-
SubRegIdx * M1VT.getVectorElementCount().getKnownMinValue();
9666-
AlignedIdx = DAG.getVectorIdxConstant(ExtractIdx, DL);
9648+
AlignedIdx = SubRegIdx * M1VT.getVectorElementCount().getKnownMinValue();
96679649
Idx = DAG.getVectorIdxConstant(RemIdx, DL);
96689650
ContainerVT = M1VT;
96699651
}
96709652

96719653
if (AlignedIdx)
9672-
Vec = DAG.getNode(ISD::EXTRACT_SUBVECTOR, DL, ContainerVT, Vec,
9673-
AlignedIdx);
9654+
Vec = DAG.getExtractSubvector(DL, ContainerVT, Vec, *AlignedIdx);
96749655
}
96759656

96769657
bool IsLegalInsert = Subtarget.is64Bit() || Val.getValueType() != MVT::i64;
@@ -9699,8 +9680,7 @@ SDValue RISCVTargetLowering::lowerINSERT_VECTOR_ELT(SDValue Op,
96999680
Vec = DAG.getNode(Opc, DL, ContainerVT, Vec, Val, VL);
97009681

97019682
if (AlignedIdx)
9702-
Vec = DAG.getNode(ISD::INSERT_SUBVECTOR, DL, OrigContainerVT, OrigVec,
9703-
Vec, AlignedIdx);
9683+
Vec = DAG.getInsertSubvector(DL, OrigVec, Vec, *AlignedIdx);
97049684
if (!VecVT.isFixedLengthVector())
97059685
return Vec;
97069686
return convertFromScalableVector(VecVT, Vec, DAG, Subtarget);
@@ -9715,8 +9695,7 @@ SDValue RISCVTargetLowering::lowerINSERT_VECTOR_ELT(SDValue Op,
97159695
Vec = DAG.getNode(RISCVISD::RI_VINSERT_VL, DL, ContainerVT, Vec, Val, Idx,
97169696
VL, PolicyOp);
97179697
if (AlignedIdx)
9718-
Vec = DAG.getNode(ISD::INSERT_SUBVECTOR, DL, OrigContainerVT, OrigVec,
9719-
Vec, AlignedIdx);
9698+
Vec = DAG.getInsertSubvector(DL, OrigVec, Vec, *AlignedIdx);
97209699
if (!VecVT.isFixedLengthVector())
97219700
return Vec;
97229701
return convertFromScalableVector(VecVT, Vec, DAG, Subtarget);
@@ -9751,9 +9730,7 @@ SDValue RISCVTargetLowering::lowerINSERT_VECTOR_ELT(SDValue Op,
97519730
ValInVec = DAG.getBitcast(ContainerVT, ValInVec);
97529731

97539732
if (AlignedIdx)
9754-
ValInVec =
9755-
DAG.getNode(ISD::INSERT_SUBVECTOR, DL, OrigContainerVT, OrigVec,
9756-
ValInVec, AlignedIdx);
9733+
ValInVec = DAG.getInsertSubvector(DL, OrigVec, ValInVec, *AlignedIdx);
97579734
if (!VecVT.isFixedLengthVector())
97589735
return ValInVec;
97599736
return convertFromScalableVector(VecVT, ValInVec, DAG, Subtarget);
@@ -9785,8 +9762,7 @@ SDValue RISCVTargetLowering::lowerINSERT_VECTOR_ELT(SDValue Op,
97859762
Idx, Mask, InsertVL, Policy);
97869763

97879764
if (AlignedIdx)
9788-
Slideup = DAG.getNode(ISD::INSERT_SUBVECTOR, DL, OrigContainerVT, OrigVec,
9789-
Slideup, AlignedIdx);
9765+
Slideup = DAG.getInsertSubvector(DL, OrigVec, Slideup, *AlignedIdx);
97909766
if (!VecVT.isFixedLengthVector())
97919767
return Slideup;
97929768
return convertFromScalableVector(VecVT, Slideup, DAG, Subtarget);
@@ -9898,9 +9874,8 @@ SDValue RISCVTargetLowering::lowerEXTRACT_VECTOR_ELT(SDValue Op,
98989874
unsigned RemIdx = OrigIdx % ElemsPerVReg;
98999875
unsigned SubRegIdx = OrigIdx / ElemsPerVReg;
99009876
unsigned ExtractIdx =
9901-
SubRegIdx * M1VT.getVectorElementCount().getKnownMinValue();
9902-
Vec = DAG.getNode(ISD::EXTRACT_SUBVECTOR, DL, M1VT, Vec,
9903-
DAG.getVectorIdxConstant(ExtractIdx, DL));
9877+
SubRegIdx * M1VT.getVectorElementCount().getKnownMinValue();
9878+
Vec = DAG.getExtractSubvector(DL, M1VT, Vec, ExtractIdx);
99049879
Idx = DAG.getVectorIdxConstant(RemIdx, DL);
99059880
ContainerVT = M1VT;
99069881
}
@@ -11261,8 +11236,7 @@ SDValue RISCVTargetLowering::lowerINSERT_SUBVECTOR(SDValue Op,
1126111236
InterSubVT = getLMUL1VT(ContainerVecVT);
1126211237
// Extract a subvector equal to the nearest full vector register type. This
1126311238
// should resolve to a EXTRACT_SUBREG instruction.
11264-
AlignedExtract = DAG.getNode(ISD::EXTRACT_SUBVECTOR, DL, InterSubVT, Vec,
11265-
DAG.getVectorIdxConstant(AlignedIdx, DL));
11239+
AlignedExtract = DAG.getExtractSubvector(DL, InterSubVT, Vec, AlignedIdx);
1126611240
}
1126711241

1126811242
SubVec = DAG.getInsertSubvector(DL, DAG.getUNDEF(InterSubVT), SubVec, 0);
@@ -11296,8 +11270,7 @@ SDValue RISCVTargetLowering::lowerINSERT_SUBVECTOR(SDValue Op,
1129611270
// If required, insert this subvector back into the correct vector register.
1129711271
// This should resolve to an INSERT_SUBREG instruction.
1129811272
if (ContainerVecVT.bitsGT(InterSubVT))
11299-
SubVec = DAG.getNode(ISD::INSERT_SUBVECTOR, DL, ContainerVecVT, Vec, SubVec,
11300-
DAG.getVectorIdxConstant(AlignedIdx, DL));
11273+
SubVec = DAG.getInsertSubvector(DL, Vec, SubVec, AlignedIdx);
1130111274

1130211275
if (VecVT.isFixedLengthVector())
1130311276
SubVec = convertFromScalableVector(VecVT, SubVec, DAG, Subtarget);
@@ -11647,10 +11620,8 @@ SDValue RISCVTargetLowering::lowerVECTOR_DEINTERLEAVE(SDValue Op,
1164711620
OddMask, DAG.getUNDEF(ConcatVT));
1164811621

1164911622
// Extract the result half of the gather for even and odd
11650-
SDValue Even = DAG.getNode(ISD::EXTRACT_SUBVECTOR, DL, VecVT, EvenWide,
11651-
DAG.getVectorIdxConstant(0, DL));
11652-
SDValue Odd = DAG.getNode(ISD::EXTRACT_SUBVECTOR, DL, VecVT, OddWide,
11653-
DAG.getVectorIdxConstant(0, DL));
11623+
SDValue Even = DAG.getExtractSubvector(DL, VecVT, EvenWide, 0);
11624+
SDValue Odd = DAG.getExtractSubvector(DL, VecVT, OddWide, 0);
1165411625

1165511626
return DAG.getMergeValues({Even, Odd}, DL);
1165611627
}
@@ -11889,11 +11860,9 @@ SDValue RISCVTargetLowering::lowerVECTOR_INTERLEAVE(SDValue Op,
1188911860
}
1189011861

1189111862
// Extract the two halves from the interleaved result
11892-
SDValue Lo = DAG.getNode(ISD::EXTRACT_SUBVECTOR, DL, VecVT, Interleaved,
11893-
DAG.getVectorIdxConstant(0, DL));
11894-
SDValue Hi = DAG.getNode(
11895-
ISD::EXTRACT_SUBVECTOR, DL, VecVT, Interleaved,
11896-
DAG.getVectorIdxConstant(VecVT.getVectorMinNumElements(), DL));
11863+
SDValue Lo = DAG.getExtractSubvector(DL, VecVT, Interleaved, 0);
11864+
SDValue Hi = DAG.getExtractSubvector(DL, VecVT, Interleaved,
11865+
VecVT.getVectorMinNumElements());
1189711866

1189811867
return DAG.getMergeValues({Lo, Hi}, DL);
1189911868
}
@@ -14474,8 +14443,7 @@ combineBinOpOfExtractToReduceTree(SDNode *N, SelectionDAG &DAG,
1447414443
cast<ConstantSDNode>(LHS.getOperand(1))->getLimitedValue();
1447514444
if (0 == std::min(LHSIdx, RHSIdx) && 1 == std::max(LHSIdx, RHSIdx)) {
1447614445
EVT ReduceVT = EVT::getVectorVT(*DAG.getContext(), VT, 2);
14477-
SDValue Vec = DAG.getNode(ISD::EXTRACT_SUBVECTOR, DL, ReduceVT, SrcVec,
14478-
DAG.getVectorIdxConstant(0, DL));
14446+
SDValue Vec = DAG.getExtractSubvector(DL, ReduceVT, SrcVec, 0);
1447914447
return DAG.getNode(ReduceOpc, DL, VT, Vec, N->getFlags());
1448014448
}
1448114449
}
@@ -14496,8 +14464,7 @@ combineBinOpOfExtractToReduceTree(SDNode *N, SelectionDAG &DAG,
1449614464
// relying on type legalization here to produce something reasonable
1449714465
// and this lowering quality could probably be improved. (TODO)
1449814466
EVT ReduceVT = EVT::getVectorVT(*DAG.getContext(), VT, RHSIdx + 1);
14499-
SDValue Vec = DAG.getNode(ISD::EXTRACT_SUBVECTOR, DL, ReduceVT, SrcVec,
14500-
DAG.getVectorIdxConstant(0, DL));
14467+
SDValue Vec = DAG.getExtractSubvector(DL, ReduceVT, SrcVec, 0);
1450114468
return DAG.getNode(ReduceOpc, DL, VT, Vec,
1450214469
ReduceVec->getFlags() & N->getFlags());
1450314470
}

0 commit comments

Comments
 (0)