Skip to content

Commit c318b91

Browse files
committed
handled in a seperate PR
1 parent 1effb91 commit c318b91

File tree

2 files changed

+25
-0
lines changed

2 files changed

+25
-0
lines changed

llvm/lib/Target/NVPTX/NVPTXISelLowering.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2111,6 +2111,28 @@ SDValue NVPTXTargetLowering::LowerSTACKSAVE(SDValue Op,
21112111
return DAG.getMergeValues({ASC, SDValue(SS.getNode(), 1)}, DL);
21122112
}
21132113

2114+
// By default CONCAT_VECTORS is lowered by ExpandVectorBuildThroughStack()
2115+
// (see LegalizeDAG.cpp). This is slow and uses local memory.
2116+
// We use extract/insert/build vector just as what LegalizeOp() does in llvm 2.5
2117+
SDValue
2118+
NVPTXTargetLowering::LowerCONCAT_VECTORS(SDValue Op, SelectionDAG &DAG) const {
2119+
SDNode *Node = Op.getNode();
2120+
SDLoc dl(Node);
2121+
SmallVector<SDValue, 8> Ops;
2122+
unsigned NumOperands = Node->getNumOperands();
2123+
for (unsigned i = 0; i < NumOperands; ++i) {
2124+
SDValue SubOp = Node->getOperand(i);
2125+
EVT VVT = SubOp.getNode()->getValueType(0);
2126+
EVT EltVT = VVT.getVectorElementType();
2127+
unsigned NumSubElem = VVT.getVectorNumElements();
2128+
for (unsigned j = 0; j < NumSubElem; ++j) {
2129+
Ops.push_back(DAG.getNode(ISD::EXTRACT_VECTOR_ELT, dl, EltVT, SubOp,
2130+
DAG.getIntPtrConstant(j, dl)));
2131+
}
2132+
}
2133+
return DAG.getBuildVector(Node->getValueType(0), dl, Ops);
2134+
}
2135+
21142136
SDValue NVPTXTargetLowering::LowerBITCAST(SDValue Op, SelectionDAG &DAG) const {
21152137
// Handle bitcasting from v2i8 without hitting the default promotion
21162138
// strategy which goes through stack memory.
@@ -2824,6 +2846,8 @@ NVPTXTargetLowering::LowerOperation(SDValue Op, SelectionDAG &DAG) const {
28242846
return LowerINSERT_VECTOR_ELT(Op, DAG);
28252847
case ISD::VECTOR_SHUFFLE:
28262848
return LowerVECTOR_SHUFFLE(Op, DAG);
2849+
case ISD::CONCAT_VECTORS:
2850+
return LowerCONCAT_VECTORS(Op, DAG);
28272851
case ISD::STORE:
28282852
return LowerSTORE(Op, DAG);
28292853
case ISD::LOAD:

llvm/lib/Target/NVPTX/NVPTXISelLowering.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,7 @@ class NVPTXTargetLowering : public TargetLowering {
292292
SDValue LowerBITCAST(SDValue Op, SelectionDAG &DAG) const;
293293

294294
SDValue LowerBUILD_VECTOR(SDValue Op, SelectionDAG &DAG) const;
295+
SDValue LowerCONCAT_VECTORS(SDValue Op, SelectionDAG &DAG) const;
295296
SDValue LowerEXTRACT_VECTOR_ELT(SDValue Op, SelectionDAG &DAG) const;
296297
SDValue LowerINSERT_VECTOR_ELT(SDValue Op, SelectionDAG &DAG) const;
297298
SDValue LowerVECTOR_SHUFFLE(SDValue Op, SelectionDAG &DAG) const;

0 commit comments

Comments
 (0)