Skip to content

Commit bbfcd52

Browse files
committed
NVPTX
1 parent 71ff7ac commit bbfcd52

File tree

6 files changed

+112
-160
lines changed

6 files changed

+112
-160
lines changed

llvm/lib/Target/NVPTX/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ tablegen(LLVM NVPTXGenAsmWriter.inc -gen-asm-writer)
66
tablegen(LLVM NVPTXGenDAGISel.inc -gen-dag-isel)
77
tablegen(LLVM NVPTXGenInstrInfo.inc -gen-instr-info)
88
tablegen(LLVM NVPTXGenRegisterInfo.inc -gen-register-info)
9+
tablegen(LLVM NVPTXGenSDNodeInfo.inc -gen-sd-node-info)
910
tablegen(LLVM NVPTXGenSubtargetInfo.inc -gen-subtarget)
1011

1112
add_public_tablegen_target(NVPTXCommonTableGen)

llvm/lib/Target/NVPTX/NVPTXISelDAGToDAG.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include "NVPTX.h"
1818
#include "NVPTXISelLowering.h"
1919
#include "NVPTXRegisterInfo.h"
20+
#include "NVPTXSelectionDAGInfo.h"
2021
#include "NVPTXTargetMachine.h"
2122
#include "llvm/ADT/MapVector.h"
2223
#include "llvm/CodeGen/SelectionDAGISel.h"

llvm/lib/Target/NVPTX/NVPTXISelLowering.cpp

Lines changed: 4 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#include "NVPTXISelLowering.h"
1515
#include "MCTargetDesc/NVPTXBaseInfo.h"
1616
#include "NVPTX.h"
17+
#include "NVPTXSelectionDAGInfo.h"
1718
#include "NVPTXSubtarget.h"
1819
#include "NVPTXTargetMachine.h"
1920
#include "NVPTXTargetObjectFile.h"
@@ -980,85 +981,6 @@ NVPTXTargetLowering::NVPTXTargetLowering(const NVPTXTargetMachine &TM,
980981
setMaxDivRemBitWidthSupported(64);
981982
}
982983

983-
const char *NVPTXTargetLowering::getTargetNodeName(unsigned Opcode) const {
984-
985-
#define MAKE_CASE(V) \
986-
case V: \
987-
return #V;
988-
989-
switch ((NVPTXISD::NodeType)Opcode) {
990-
case NVPTXISD::FIRST_NUMBER:
991-
break;
992-
993-
MAKE_CASE(NVPTXISD::CALL)
994-
MAKE_CASE(NVPTXISD::RET_GLUE)
995-
MAKE_CASE(NVPTXISD::LOAD_PARAM)
996-
MAKE_CASE(NVPTXISD::Wrapper)
997-
MAKE_CASE(NVPTXISD::DeclareParam)
998-
MAKE_CASE(NVPTXISD::DeclareScalarParam)
999-
MAKE_CASE(NVPTXISD::DeclareRet)
1000-
MAKE_CASE(NVPTXISD::DeclareScalarRet)
1001-
MAKE_CASE(NVPTXISD::DeclareRetParam)
1002-
MAKE_CASE(NVPTXISD::PrintCall)
1003-
MAKE_CASE(NVPTXISD::PrintConvergentCall)
1004-
MAKE_CASE(NVPTXISD::PrintCallUni)
1005-
MAKE_CASE(NVPTXISD::PrintConvergentCallUni)
1006-
MAKE_CASE(NVPTXISD::LoadParam)
1007-
MAKE_CASE(NVPTXISD::LoadParamV2)
1008-
MAKE_CASE(NVPTXISD::LoadParamV4)
1009-
MAKE_CASE(NVPTXISD::StoreParam)
1010-
MAKE_CASE(NVPTXISD::StoreParamV2)
1011-
MAKE_CASE(NVPTXISD::StoreParamV4)
1012-
MAKE_CASE(NVPTXISD::StoreParamS32)
1013-
MAKE_CASE(NVPTXISD::StoreParamU32)
1014-
MAKE_CASE(NVPTXISD::CallArgBegin)
1015-
MAKE_CASE(NVPTXISD::CallArg)
1016-
MAKE_CASE(NVPTXISD::LastCallArg)
1017-
MAKE_CASE(NVPTXISD::CallArgEnd)
1018-
MAKE_CASE(NVPTXISD::CallVoid)
1019-
MAKE_CASE(NVPTXISD::CallVal)
1020-
MAKE_CASE(NVPTXISD::CallSymbol)
1021-
MAKE_CASE(NVPTXISD::Prototype)
1022-
MAKE_CASE(NVPTXISD::MoveParam)
1023-
MAKE_CASE(NVPTXISD::StoreRetval)
1024-
MAKE_CASE(NVPTXISD::StoreRetvalV2)
1025-
MAKE_CASE(NVPTXISD::StoreRetvalV4)
1026-
MAKE_CASE(NVPTXISD::PseudoUseParam)
1027-
MAKE_CASE(NVPTXISD::RETURN)
1028-
MAKE_CASE(NVPTXISD::CallSeqBegin)
1029-
MAKE_CASE(NVPTXISD::CallSeqEnd)
1030-
MAKE_CASE(NVPTXISD::CallPrototype)
1031-
MAKE_CASE(NVPTXISD::ProxyReg)
1032-
MAKE_CASE(NVPTXISD::LoadV2)
1033-
MAKE_CASE(NVPTXISD::LoadV4)
1034-
MAKE_CASE(NVPTXISD::LDUV2)
1035-
MAKE_CASE(NVPTXISD::LDUV4)
1036-
MAKE_CASE(NVPTXISD::StoreV2)
1037-
MAKE_CASE(NVPTXISD::StoreV4)
1038-
MAKE_CASE(NVPTXISD::FSHL_CLAMP)
1039-
MAKE_CASE(NVPTXISD::FSHR_CLAMP)
1040-
MAKE_CASE(NVPTXISD::IMAD)
1041-
MAKE_CASE(NVPTXISD::BFE)
1042-
MAKE_CASE(NVPTXISD::BFI)
1043-
MAKE_CASE(NVPTXISD::PRMT)
1044-
MAKE_CASE(NVPTXISD::FCOPYSIGN)
1045-
MAKE_CASE(NVPTXISD::DYNAMIC_STACKALLOC)
1046-
MAKE_CASE(NVPTXISD::STACKRESTORE)
1047-
MAKE_CASE(NVPTXISD::STACKSAVE)
1048-
MAKE_CASE(NVPTXISD::SETP_F16X2)
1049-
MAKE_CASE(NVPTXISD::SETP_BF16X2)
1050-
MAKE_CASE(NVPTXISD::Dummy)
1051-
MAKE_CASE(NVPTXISD::MUL_WIDE_SIGNED)
1052-
MAKE_CASE(NVPTXISD::MUL_WIDE_UNSIGNED)
1053-
MAKE_CASE(NVPTXISD::BrxEnd)
1054-
MAKE_CASE(NVPTXISD::BrxItem)
1055-
MAKE_CASE(NVPTXISD::BrxStart)
1056-
}
1057-
return nullptr;
1058-
1059-
#undef MAKE_CASE
1060-
}
1061-
1062984
TargetLoweringBase::LegalizeTypeAction
1063985
NVPTXTargetLowering::getPreferredVectorAction(MVT VT) const {
1064986
if (!VT.isScalableVector() && VT.getVectorNumElements() != 1 &&
@@ -1606,7 +1528,7 @@ SDValue NVPTXTargetLowering::LowerCall(TargetLowering::CallLoweringInfo &CLI,
16061528

16071529
if (VectorInfo[j] & PVF_LAST) {
16081530
unsigned NumElts = StoreOperands.size() - 3;
1609-
NVPTXISD::NodeType Op;
1531+
unsigned Op;
16101532
switch (NumElts) {
16111533
case 1:
16121534
Op = NVPTXISD::StoreParam;
@@ -1896,7 +1818,7 @@ SDValue NVPTXTargetLowering::LowerCall(TargetLowering::CallLoweringInfo &CLI,
18961818
unsigned NumElts = LoadVTs.size();
18971819
LoadVTs.push_back(MVT::Other);
18981820
LoadVTs.push_back(MVT::Glue);
1899-
NVPTXISD::NodeType Op;
1821+
unsigned Op;
19001822
switch (NumElts) {
19011823
case 1:
19021824
Op = NVPTXISD::LoadParam;
@@ -3347,7 +3269,7 @@ NVPTXTargetLowering::LowerReturn(SDValue Chain, CallingConv::ID CallConv,
33473269

33483270
// That's the last element of this store op.
33493271
if (VectorInfo[i] & PVF_LAST) {
3350-
NVPTXISD::NodeType Op;
3272+
unsigned Op;
33513273
unsigned NumElts = StoreOperands.size() - 2;
33523274
switch (NumElts) {
33533275
case 1:

llvm/lib/Target/NVPTX/NVPTXISelLowering.h

Lines changed: 0 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -19,78 +19,6 @@
1919
#include "llvm/CodeGen/TargetLowering.h"
2020

2121
namespace llvm {
22-
namespace NVPTXISD {
23-
enum NodeType : unsigned {
24-
// Start the numbering from where ISD NodeType finishes.
25-
FIRST_NUMBER = ISD::BUILTIN_OP_END,
26-
Wrapper,
27-
CALL,
28-
RET_GLUE,
29-
LOAD_PARAM,
30-
DeclareParam,
31-
DeclareScalarParam,
32-
DeclareRetParam,
33-
DeclareRet,
34-
DeclareScalarRet,
35-
PrintCall,
36-
PrintConvergentCall,
37-
PrintCallUni,
38-
PrintConvergentCallUni,
39-
CallArgBegin,
40-
CallArg,
41-
LastCallArg,
42-
CallArgEnd,
43-
CallVoid,
44-
CallVal,
45-
CallSymbol,
46-
Prototype,
47-
MoveParam,
48-
PseudoUseParam,
49-
RETURN,
50-
CallSeqBegin,
51-
CallSeqEnd,
52-
CallPrototype,
53-
ProxyReg,
54-
FSHL_CLAMP,
55-
FSHR_CLAMP,
56-
MUL_WIDE_SIGNED,
57-
MUL_WIDE_UNSIGNED,
58-
IMAD,
59-
SETP_F16X2,
60-
SETP_BF16X2,
61-
BFE,
62-
BFI,
63-
PRMT,
64-
FCOPYSIGN,
65-
DYNAMIC_STACKALLOC,
66-
STACKRESTORE,
67-
STACKSAVE,
68-
BrxStart,
69-
BrxItem,
70-
BrxEnd,
71-
Dummy,
72-
73-
FIRST_MEMORY_OPCODE,
74-
LoadV2 = FIRST_MEMORY_OPCODE,
75-
LoadV4,
76-
LDUV2, // LDU.v2
77-
LDUV4, // LDU.v4
78-
StoreV2,
79-
StoreV4,
80-
LoadParam,
81-
LoadParamV2,
82-
LoadParamV4,
83-
StoreParam,
84-
StoreParamV2,
85-
StoreParamV4,
86-
StoreParamS32, // to sext and store a <32bit value, not used currently
87-
StoreParamU32, // to zext and store a <32bit value, not used currently
88-
StoreRetval,
89-
StoreRetvalV2,
90-
StoreRetvalV4,
91-
LAST_MEMORY_OPCODE = StoreRetvalV4,
92-
};
93-
}
9422

9523
class NVPTXSubtarget;
9624

@@ -105,8 +33,6 @@ class NVPTXTargetLowering : public TargetLowering {
10533

10634
SDValue LowerGlobalAddress(SDValue Op, SelectionDAG &DAG) const;
10735

108-
const char *getTargetNodeName(unsigned Opcode) const override;
109-
11036
bool getTgtMemIntrinsic(IntrinsicInfo &Info, const CallInst &I,
11137
MachineFunction &MF,
11238
unsigned Intrinsic) const override;

llvm/lib/Target/NVPTX/NVPTXSelectionDAGInfo.cpp

Lines changed: 72 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,82 @@
77
//===----------------------------------------------------------------------===//
88

99
#include "NVPTXSelectionDAGInfo.h"
10-
#include "NVPTXISelLowering.h"
10+
11+
#define GET_SDNODE_DESC
12+
#include "NVPTXGenSDNodeInfo.inc"
1113

1214
using namespace llvm;
1315

16+
NVPTXSelectionDAGInfo::NVPTXSelectionDAGInfo()
17+
: SelectionDAGGenTargetInfo(NVPTXGenSDNodeInfo) {}
18+
1419
NVPTXSelectionDAGInfo::~NVPTXSelectionDAGInfo() = default;
1520

21+
const char *NVPTXSelectionDAGInfo::getTargetNodeName(unsigned Opcode) const {
22+
#define MAKE_CASE(V) \
23+
case V: \
24+
return #V;
25+
26+
// These nodes don't have corresponding entries in *.td files yet.
27+
switch (static_cast<NVPTXISD::NodeType>(Opcode)) {
28+
MAKE_CASE(NVPTXISD::LOAD_PARAM)
29+
MAKE_CASE(NVPTXISD::DeclareScalarRet)
30+
MAKE_CASE(NVPTXISD::CallSymbol)
31+
MAKE_CASE(NVPTXISD::CallSeqBegin)
32+
MAKE_CASE(NVPTXISD::CallSeqEnd)
33+
MAKE_CASE(NVPTXISD::LoadV2)
34+
MAKE_CASE(NVPTXISD::LoadV4)
35+
MAKE_CASE(NVPTXISD::LDUV2)
36+
MAKE_CASE(NVPTXISD::LDUV4)
37+
MAKE_CASE(NVPTXISD::StoreV2)
38+
MAKE_CASE(NVPTXISD::StoreV4)
39+
MAKE_CASE(NVPTXISD::SETP_F16X2)
40+
MAKE_CASE(NVPTXISD::SETP_BF16X2)
41+
MAKE_CASE(NVPTXISD::Dummy)
42+
}
43+
#undef MAKE_CASE
44+
45+
return SelectionDAGGenTargetInfo::getTargetNodeName(Opcode);
46+
}
47+
1648
bool NVPTXSelectionDAGInfo::isTargetMemoryOpcode(unsigned Opcode) const {
17-
return Opcode >= NVPTXISD::FIRST_MEMORY_OPCODE &&
18-
Opcode <= NVPTXISD::LAST_MEMORY_OPCODE;
49+
// These nodes don't have corresponding entries in *.td files.
50+
if (Opcode >= NVPTXISD::FIRST_MEMORY_OPCODE &&
51+
Opcode <= NVPTXISD::LAST_MEMORY_OPCODE)
52+
return true;
53+
54+
// These nodes lack SDNPMemOperand property in *.td files.
55+
switch (static_cast<NVPTXISD::GenNodeType>(Opcode)) {
56+
default:
57+
break;
58+
case NVPTXISD::LoadParam:
59+
case NVPTXISD::LoadParamV2:
60+
case NVPTXISD::LoadParamV4:
61+
case NVPTXISD::StoreParam:
62+
case NVPTXISD::StoreParamV2:
63+
case NVPTXISD::StoreParamV4:
64+
case NVPTXISD::StoreParamS32:
65+
case NVPTXISD::StoreParamU32:
66+
case NVPTXISD::StoreRetval:
67+
case NVPTXISD::StoreRetvalV2:
68+
case NVPTXISD::StoreRetvalV4:
69+
return true;
70+
}
71+
72+
return SelectionDAGGenTargetInfo::isTargetMemoryOpcode(Opcode);
73+
}
74+
75+
void NVPTXSelectionDAGInfo::verifyTargetNode(const SelectionDAG &DAG,
76+
const SDNode *N) const {
77+
switch (N->getOpcode()) {
78+
default:
79+
break;
80+
case NVPTXISD::ProxyReg:
81+
// invalid number of results; expected 3, got 1
82+
case NVPTXISD::BrxEnd:
83+
// invalid number of results; expected 1, got 2
84+
return;
85+
}
86+
87+
return SelectionDAGGenTargetInfo::verifyTargetNode(DAG, N);
1988
}

llvm/lib/Target/NVPTX/NVPTXSelectionDAGInfo.h

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,46 @@
1111

1212
#include "llvm/CodeGen/SelectionDAGTargetInfo.h"
1313

14+
#define GET_SDNODE_ENUM
15+
#include "NVPTXGenSDNodeInfo.inc"
16+
1417
namespace llvm {
18+
namespace NVPTXISD {
19+
20+
enum NodeType : unsigned {
21+
LOAD_PARAM = GENERATED_OPCODE_END,
22+
DeclareScalarRet,
23+
CallSymbol,
24+
CallSeqBegin,
25+
CallSeqEnd,
26+
SETP_F16X2,
27+
SETP_BF16X2,
28+
Dummy,
29+
30+
FIRST_MEMORY_OPCODE,
31+
LoadV2 = FIRST_MEMORY_OPCODE,
32+
LoadV4,
33+
LDUV2, // LDU.v2
34+
LDUV4, // LDU.v4
35+
StoreV2,
36+
StoreV4,
37+
LAST_MEMORY_OPCODE = StoreV4,
38+
};
1539

16-
class NVPTXSelectionDAGInfo : public SelectionDAGTargetInfo {
40+
} // namespace NVPTXISD
41+
42+
class NVPTXSelectionDAGInfo : public SelectionDAGGenTargetInfo {
1743
public:
44+
NVPTXSelectionDAGInfo();
45+
1846
~NVPTXSelectionDAGInfo() override;
1947

48+
const char *getTargetNodeName(unsigned Opcode) const override;
49+
2050
bool isTargetMemoryOpcode(unsigned Opcode) const override;
51+
52+
void verifyTargetNode(const SelectionDAG &DAG,
53+
const SDNode *N) const override;
2154
};
2255

2356
} // namespace llvm

0 commit comments

Comments
 (0)