Skip to content

Commit 6b61559

Browse files
committed
DAG: Use poison for some vector result widening
1 parent f122995 commit 6b61559

File tree

5 files changed

+399
-406
lines changed

5 files changed

+399
-406
lines changed

llvm/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5654,7 +5654,7 @@ SDValue DAGTypeLegalizer::WidenVecRes_Convert(SDNode *N) {
56545654
// Widen the input and call convert on the widened input vector.
56555655
unsigned NumConcat =
56565656
WidenEC.getKnownMinValue() / InVTEC.getKnownMinValue();
5657-
SmallVector<SDValue, 16> Ops(NumConcat, DAG.getUNDEF(InVT));
5657+
SmallVector<SDValue, 16> Ops(NumConcat, DAG.getPOISON(InVT));
56585658
Ops[0] = InOp;
56595659
SDValue InVec = DAG.getNode(ISD::CONCAT_VECTORS, DL, InWidenVT, Ops);
56605660
if (N->getNumOperands() == 1)
@@ -5673,7 +5673,7 @@ SDValue DAGTypeLegalizer::WidenVecRes_Convert(SDNode *N) {
56735673

56745674
// Otherwise unroll into some nasty scalar code and rebuild the vector.
56755675
EVT EltVT = WidenVT.getVectorElementType();
5676-
SmallVector<SDValue, 16> Ops(WidenEC.getFixedValue(), DAG.getUNDEF(EltVT));
5676+
SmallVector<SDValue, 16> Ops(WidenEC.getFixedValue(), DAG.getPOISON(EltVT));
56775677
// Use the original element count so we don't do more scalar opts than
56785678
// necessary.
56795679
unsigned MinElts = N->getValueType(0).getVectorNumElements();
@@ -5756,7 +5756,7 @@ SDValue DAGTypeLegalizer::WidenVecRes_Convert_StrictFP(SDNode *N) {
57565756
// Otherwise unroll into some nasty scalar code and rebuild the vector.
57575757
EVT EltVT = WidenVT.getVectorElementType();
57585758
std::array<EVT, 2> EltVTs = {{EltVT, MVT::Other}};
5759-
SmallVector<SDValue, 16> Ops(WidenNumElts, DAG.getUNDEF(EltVT));
5759+
SmallVector<SDValue, 16> Ops(WidenNumElts, DAG.getPOISON(EltVT));
57605760
SmallVector<SDValue, 32> OpChains;
57615761
// Use the original element count so we don't do more scalar opts than
57625762
// necessary.
@@ -5819,7 +5819,7 @@ SDValue DAGTypeLegalizer::WidenVecRes_EXTEND_VECTOR_INREG(SDNode *N) {
58195819
}
58205820

58215821
while (Ops.size() != WidenNumElts)
5822-
Ops.push_back(DAG.getUNDEF(WidenSVT));
5822+
Ops.push_back(DAG.getPOISON(WidenSVT));
58235823

58245824
return DAG.getBuildVector(WidenVT, DL, Ops);
58255825
}
@@ -6026,15 +6026,15 @@ SDValue DAGTypeLegalizer::WidenVecRes_BITCAST(SDNode *N) {
60266026
// input and then widening it. To avoid this, we widen the input only if
60276027
// it results in a legal type.
60286028
if (WidenSize % InSize == 0) {
6029-
SmallVector<SDValue, 16> Ops(NewNumParts, DAG.getUNDEF(InVT));
6029+
SmallVector<SDValue, 16> Ops(NewNumParts, DAG.getPOISON(InVT));
60306030
Ops[0] = InOp;
60316031

60326032
NewVec = DAG.getNode(ISD::CONCAT_VECTORS, dl, NewInVT, Ops);
60336033
} else {
60346034
SmallVector<SDValue, 16> Ops;
60356035
DAG.ExtractVectorElements(InOp, Ops);
60366036
Ops.append(WidenSize / InScalarSize - Ops.size(),
6037-
DAG.getUNDEF(InVT.getVectorElementType()));
6037+
DAG.getPOISON(InVT.getVectorElementType()));
60386038

60396039
NewVec = DAG.getNode(ISD::BUILD_VECTOR, dl, NewInVT, Ops);
60406040
}
@@ -6088,7 +6088,7 @@ SDValue DAGTypeLegalizer::WidenVecRes_CONCAT_VECTORS(SDNode *N) {
60886088
if (WidenNumElts % NumInElts == 0) {
60896089
// Add undef vectors to widen to correct length.
60906090
unsigned NumConcat = WidenNumElts / NumInElts;
6091-
SDValue UndefVal = DAG.getUNDEF(InVT);
6091+
SDValue UndefVal = DAG.getPOISON(InVT);
60926092
SmallVector<SDValue, 16> Ops(NumConcat);
60936093
for (unsigned i=0; i < NumOperands; ++i)
60946094
Ops[i] = N->getOperand(i);
@@ -6146,7 +6146,7 @@ SDValue DAGTypeLegalizer::WidenVecRes_CONCAT_VECTORS(SDNode *N) {
61466146
for (unsigned j = 0; j < NumInElts; ++j)
61476147
Ops[Idx++] = DAG.getExtractVectorElt(dl, EltVT, InOp, j);
61486148
}
6149-
SDValue UndefVal = DAG.getUNDEF(EltVT);
6149+
SDValue UndefVal = DAG.getPOISON(EltVT);
61506150
for (; Idx < WidenNumElts; ++Idx)
61516151
Ops[Idx] = UndefVal;
61526152
return DAG.getBuildVector(WidenVT, dl, Ops);
@@ -6213,7 +6213,7 @@ SDValue DAGTypeLegalizer::WidenVecRes_EXTRACT_SUBVECTOR(SDNode *N) {
62136213
Parts.push_back(
62146214
DAG.getExtractSubvector(dl, PartVT, InOp, IdxVal + I * GCD));
62156215
for (; I < WidenNumElts / GCD; ++I)
6216-
Parts.push_back(DAG.getUNDEF(PartVT));
6216+
Parts.push_back(DAG.getPOISON(PartVT));
62176217

62186218
return DAG.getNode(ISD::CONCAT_VECTORS, dl, WidenVT, Parts);
62196219
}
@@ -6229,7 +6229,7 @@ SDValue DAGTypeLegalizer::WidenVecRes_EXTRACT_SUBVECTOR(SDNode *N) {
62296229
for (i = 0; i < VTNumElts; ++i)
62306230
Ops[i] = DAG.getExtractVectorElt(dl, EltVT, InOp, IdxVal + i);
62316231

6232-
SDValue UndefVal = DAG.getUNDEF(EltVT);
6232+
SDValue UndefVal = DAG.getPOISON(EltVT);
62336233
for (; i < WidenNumElts; ++i)
62346234
Ops[i] = UndefVal;
62356235
return DAG.getBuildVector(WidenVT, dl, Ops);
@@ -6903,7 +6903,7 @@ SDValue DAGTypeLegalizer::WidenVecRes_VECTOR_REVERSE(SDNode *N) {
69036903
Parts.push_back(
69046904
DAG.getExtractSubvector(dl, PartVT, ReverseVal, IdxVal + i * GCD));
69056905
for (; i < WidenNumElts / GCD; ++i)
6906-
Parts.push_back(DAG.getUNDEF(PartVT));
6906+
Parts.push_back(DAG.getPOISON(PartVT));
69076907

69086908
return DAG.getNode(ISD::CONCAT_VECTORS, dl, WidenVT, Parts);
69096909
}
@@ -6992,7 +6992,7 @@ SDValue DAGTypeLegalizer::WidenVecRes_STRICT_FSETCC(SDNode *N) {
69926992
EVT TmpEltVT = LHS.getValueType().getVectorElementType();
69936993

69946994
// Fully unroll and reassemble.
6995-
SmallVector<SDValue, 8> Scalars(WidenNumElts, DAG.getUNDEF(EltVT));
6995+
SmallVector<SDValue, 8> Scalars(WidenNumElts, DAG.getPOISON(EltVT));
69966996
SmallVector<SDValue, 8> Chains(NumElts);
69976997
for (unsigned i = 0; i != NumElts; ++i) {
69986998
SDValue LHSElem = DAG.getExtractVectorElt(dl, TmpEltVT, LHS, i);

llvm/test/CodeGen/AArch64/sve-extract-scalable-vector.ll

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -612,13 +612,6 @@ define <vscale x 14 x i8> @extract_nxv14i8_nxv28i8_14(<vscale x 28 x i8> %in) {
612612
; CHECK-NEXT: uunpkhi z3.d, z3.s
613613
; CHECK-NEXT: uzp1 z1.s, z1.s, z3.s
614614
; CHECK-NEXT: uzp1 z1.h, z2.h, z1.h
615-
; CHECK-NEXT: uzp1 z1.b, z0.b, z1.b
616-
; CHECK-NEXT: uunpkhi z1.h, z1.b
617-
; CHECK-NEXT: uunpkhi z2.s, z1.h
618-
; CHECK-NEXT: uunpklo z1.s, z1.h
619-
; CHECK-NEXT: uunpklo z2.d, z2.s
620-
; CHECK-NEXT: uzp1 z2.s, z2.s, z0.s
621-
; CHECK-NEXT: uzp1 z1.h, z1.h, z2.h
622615
; CHECK-NEXT: uzp1 z0.b, z0.b, z1.b
623616
; CHECK-NEXT: ret
624617
%res = call <vscale x 14 x i8> @llvm.vector.extract.nxv14i8.nxv28i8(<vscale x 28 x i8> %in, i64 14)

0 commit comments

Comments
 (0)