Skip to content

Commit 5b8a189

Browse files
committed
Remove NVPTX::IMAD and rely on ISel only
1 parent bf525da commit 5b8a189

File tree

9 files changed

+349
-443
lines changed

9 files changed

+349
-443
lines changed

llvm/include/llvm/CodeGen/SelectionDAG.h

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2474,11 +2474,6 @@ class SelectionDAG {
24742474
SDNode *FindNodeOrInsertPos(const FoldingSetNodeID &ID, const SDLoc &DL,
24752475
void *&InsertPos);
24762476

2477-
SDValue getNodeImpl(unsigned Opcode, const SDLoc &DL, EVT VT,
2478-
ArrayRef<SDValue> Ops, SDNodeFlags Flags);
2479-
SDValue getNodeImpl(unsigned Opcode, const SDLoc &DL, SDVTList VTs,
2480-
ArrayRef<SDValue> Ops, SDNodeFlags Flags);
2481-
24822477
/// Maps to auto-CSE operations.
24832478
std::vector<CondCodeSDNode*> CondCodeNodes;
24842479

llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -153,13 +153,6 @@ static cl::opt<bool> EnableVectorFCopySignExtendRound(
153153
"combiner-vector-fcopysign-extend-round", cl::Hidden, cl::init(false),
154154
cl::desc(
155155
"Enable merging extends and rounds into FCOPYSIGN on vector types"));
156-
157-
static cl::opt<bool>
158-
EnableGenericCombines("combiner-generic-combines", cl::Hidden,
159-
cl::init(true),
160-
cl::desc("Enable generic DAGCombine patterns. Useful "
161-
"for testing target-specific combines."));
162-
163156
namespace {
164157

165158
class DAGCombiner {
@@ -258,8 +251,7 @@ namespace {
258251
: DAG(D), TLI(D.getTargetLoweringInfo()),
259252
STI(D.getSubtarget().getSelectionDAGInfo()), OptLevel(OL), AA(AA) {
260253
ForCodeSize = DAG.shouldOptForSize();
261-
DisableGenericCombines = !EnableGenericCombines ||
262-
(STI && STI->disableGenericCombines(OptLevel));
254+
DisableGenericCombines = STI && STI->disableGenericCombines(OptLevel);
263255

264256
MaximumLegalStoreInBits = 0;
265257
// We use the minimum store size here, since that's all we can guarantee

llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp

Lines changed: 138 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -115,10 +115,6 @@ static cl::opt<unsigned>
115115
MaxSteps("has-predecessor-max-steps", cl::Hidden, cl::init(8192),
116116
cl::desc("DAG combiner limit number of steps when searching DAG "
117117
"for predecessor nodes"));
118-
static cl::opt<bool> EnableSimplifyNodes(
119-
"selectiondag-simplify-nodes", cl::Hidden, cl::init(true),
120-
cl::desc("Enable SelectionDAG::getNode simplifications. Useful for testing "
121-
"DAG combines."));
122118

123119
static void NewSDValueDbgMsg(SDValue V, StringRef Msg, SelectionDAG *G) {
124120
LLVM_DEBUG(dbgs() << Msg; V.getNode()->dump(G););
@@ -6176,46 +6172,23 @@ static SDValue foldCONCAT_VECTORS(const SDLoc &DL, EVT VT,
61766172
}
61776173

61786174
/// Gets or creates the specified node.
6179-
SDValue SelectionDAG::getNodeImpl(unsigned Opcode, const SDLoc &DL, EVT VT,
6180-
ArrayRef<SDValue> Ops,
6181-
const SDNodeFlags Flags) {
6175+
SDValue SelectionDAG::getNode(unsigned Opcode, const SDLoc &DL, EVT VT) {
61826176
SDVTList VTs = getVTList(VT);
6183-
return getNodeImpl(Opcode, DL, VTs, Ops, Flags);
6184-
}
6185-
6186-
SDValue SelectionDAG::getNodeImpl(unsigned Opcode, const SDLoc &DL,
6187-
SDVTList VTs, ArrayRef<SDValue> Ops,
6188-
const SDNodeFlags Flags) {
6189-
SDNode *N;
6190-
// Don't CSE glue-producing nodes
6191-
if (VTs.VTs[VTs.NumVTs - 1] != MVT::Glue) {
6192-
FoldingSetNodeID ID;
6193-
AddNodeIDNode(ID, Opcode, VTs, Ops);
6194-
void *IP = nullptr;
6195-
if (SDNode *E = FindNodeOrInsertPos(ID, DL, IP)) {
6196-
E->intersectFlagsWith(Flags);
6197-
return SDValue(E, 0);
6198-
}
6177+
FoldingSetNodeID ID;
6178+
AddNodeIDNode(ID, Opcode, VTs, {});
6179+
void *IP = nullptr;
6180+
if (SDNode *E = FindNodeOrInsertPos(ID, DL, IP))
6181+
return SDValue(E, 0);
61996182

6200-
N = newSDNode<SDNode>(Opcode, DL.getIROrder(), DL.getDebugLoc(), VTs);
6201-
createOperands(N, Ops);
6202-
CSEMap.InsertNode(N, IP);
6203-
} else {
6204-
N = newSDNode<SDNode>(Opcode, DL.getIROrder(), DL.getDebugLoc(), VTs);
6205-
createOperands(N, Ops);
6206-
}
6183+
auto *N = newSDNode<SDNode>(Opcode, DL.getIROrder(), DL.getDebugLoc(), VTs);
6184+
CSEMap.InsertNode(N, IP);
62076185

6208-
N->setFlags(Flags);
62096186
InsertNode(N);
62106187
SDValue V = SDValue(N, 0);
62116188
NewSDValueDbgMsg(V, "Creating new node: ", this);
62126189
return V;
62136190
}
62146191

6215-
SDValue SelectionDAG::getNode(unsigned Opcode, const SDLoc &DL, EVT VT) {
6216-
return getNodeImpl(Opcode, DL, VT, {}, SDNodeFlags{});
6217-
}
6218-
62196192
SDValue SelectionDAG::getNode(unsigned Opcode, const SDLoc &DL, EVT VT,
62206193
SDValue N1) {
62216194
SDNodeFlags Flags;
@@ -6227,8 +6200,6 @@ SDValue SelectionDAG::getNode(unsigned Opcode, const SDLoc &DL, EVT VT,
62276200
SDValue SelectionDAG::getNode(unsigned Opcode, const SDLoc &DL, EVT VT,
62286201
SDValue N1, const SDNodeFlags Flags) {
62296202
assert(N1.getOpcode() != ISD::DELETED_NODE && "Operand is DELETED_NODE!");
6230-
if (!EnableSimplifyNodes)
6231-
return getNodeImpl(Opcode, DL, VT, {N1}, Flags);
62326203

62336204
// Constant fold unary operations with a vector integer or float operand.
62346205
switch (Opcode) {
@@ -6545,7 +6516,31 @@ SDValue SelectionDAG::getNode(unsigned Opcode, const SDLoc &DL, EVT VT,
65456516
break;
65466517
}
65476518

6548-
return getNodeImpl(Opcode, DL, VT, {N1}, Flags);
6519+
SDNode *N;
6520+
SDVTList VTs = getVTList(VT);
6521+
SDValue Ops[] = {N1};
6522+
if (VT != MVT::Glue) { // Don't CSE glue producing nodes
6523+
FoldingSetNodeID ID;
6524+
AddNodeIDNode(ID, Opcode, VTs, Ops);
6525+
void *IP = nullptr;
6526+
if (SDNode *E = FindNodeOrInsertPos(ID, DL, IP)) {
6527+
E->intersectFlagsWith(Flags);
6528+
return SDValue(E, 0);
6529+
}
6530+
6531+
N = newSDNode<SDNode>(Opcode, DL.getIROrder(), DL.getDebugLoc(), VTs);
6532+
N->setFlags(Flags);
6533+
createOperands(N, Ops);
6534+
CSEMap.InsertNode(N, IP);
6535+
} else {
6536+
N = newSDNode<SDNode>(Opcode, DL.getIROrder(), DL.getDebugLoc(), VTs);
6537+
createOperands(N, Ops);
6538+
}
6539+
6540+
InsertNode(N);
6541+
SDValue V = SDValue(N, 0);
6542+
NewSDValueDbgMsg(V, "Creating new node: ", this);
6543+
return V;
65496544
}
65506545

65516546
static std::optional<APInt> FoldValue(unsigned Opcode, const APInt &C1,
@@ -7239,8 +7234,6 @@ SDValue SelectionDAG::getNode(unsigned Opcode, const SDLoc &DL, EVT VT,
72397234
assert(N1.getOpcode() != ISD::DELETED_NODE &&
72407235
N2.getOpcode() != ISD::DELETED_NODE &&
72417236
"Operand is DELETED_NODE!");
7242-
if (!EnableSimplifyNodes)
7243-
return getNodeImpl(Opcode, DL, VT, {N1, N2}, Flags);
72447237

72457238
canonicalizeCommutativeBinop(Opcode, N1, N2);
72467239

@@ -7687,7 +7680,32 @@ SDValue SelectionDAG::getNode(unsigned Opcode, const SDLoc &DL, EVT VT,
76877680
}
76887681
}
76897682

7690-
return getNodeImpl(Opcode, DL, VT, {N1, N2}, Flags);
7683+
// Memoize this node if possible.
7684+
SDNode *N;
7685+
SDVTList VTs = getVTList(VT);
7686+
SDValue Ops[] = {N1, N2};
7687+
if (VT != MVT::Glue) {
7688+
FoldingSetNodeID ID;
7689+
AddNodeIDNode(ID, Opcode, VTs, Ops);
7690+
void *IP = nullptr;
7691+
if (SDNode *E = FindNodeOrInsertPos(ID, DL, IP)) {
7692+
E->intersectFlagsWith(Flags);
7693+
return SDValue(E, 0);
7694+
}
7695+
7696+
N = newSDNode<SDNode>(Opcode, DL.getIROrder(), DL.getDebugLoc(), VTs);
7697+
N->setFlags(Flags);
7698+
createOperands(N, Ops);
7699+
CSEMap.InsertNode(N, IP);
7700+
} else {
7701+
N = newSDNode<SDNode>(Opcode, DL.getIROrder(), DL.getDebugLoc(), VTs);
7702+
createOperands(N, Ops);
7703+
}
7704+
7705+
InsertNode(N);
7706+
SDValue V = SDValue(N, 0);
7707+
NewSDValueDbgMsg(V, "Creating new node: ", this);
7708+
return V;
76917709
}
76927710

76937711
SDValue SelectionDAG::getNode(unsigned Opcode, const SDLoc &DL, EVT VT,
@@ -7705,9 +7723,6 @@ SDValue SelectionDAG::getNode(unsigned Opcode, const SDLoc &DL, EVT VT,
77057723
N2.getOpcode() != ISD::DELETED_NODE &&
77067724
N3.getOpcode() != ISD::DELETED_NODE &&
77077725
"Operand is DELETED_NODE!");
7708-
if (!EnableSimplifyNodes)
7709-
return getNodeImpl(Opcode, DL, VT, {N1, N2, N3}, Flags);
7710-
77117726
// Perform various simplifications.
77127727
switch (Opcode) {
77137728
case ISD::FMA:
@@ -7862,7 +7877,33 @@ SDValue SelectionDAG::getNode(unsigned Opcode, const SDLoc &DL, EVT VT,
78627877
break;
78637878
}
78647879
}
7865-
return getNodeImpl(Opcode, DL, VT, {N1, N2, N3}, Flags);
7880+
7881+
// Memoize node if it doesn't produce a glue result.
7882+
SDNode *N;
7883+
SDVTList VTs = getVTList(VT);
7884+
SDValue Ops[] = {N1, N2, N3};
7885+
if (VT != MVT::Glue) {
7886+
FoldingSetNodeID ID;
7887+
AddNodeIDNode(ID, Opcode, VTs, Ops);
7888+
void *IP = nullptr;
7889+
if (SDNode *E = FindNodeOrInsertPos(ID, DL, IP)) {
7890+
E->intersectFlagsWith(Flags);
7891+
return SDValue(E, 0);
7892+
}
7893+
7894+
N = newSDNode<SDNode>(Opcode, DL.getIROrder(), DL.getDebugLoc(), VTs);
7895+
N->setFlags(Flags);
7896+
createOperands(N, Ops);
7897+
CSEMap.InsertNode(N, IP);
7898+
} else {
7899+
N = newSDNode<SDNode>(Opcode, DL.getIROrder(), DL.getDebugLoc(), VTs);
7900+
createOperands(N, Ops);
7901+
}
7902+
7903+
InsertNode(N);
7904+
SDValue V = SDValue(N, 0);
7905+
NewSDValueDbgMsg(V, "Creating new node: ", this);
7906+
return V;
78667907
}
78677908

78687909
SDValue SelectionDAG::getNode(unsigned Opcode, const SDLoc &DL, EVT VT,
@@ -10317,8 +10358,6 @@ SDValue SelectionDAG::getNode(unsigned Opcode, const SDLoc &DL, EVT VT,
1031710358
assert(Op.getOpcode() != ISD::DELETED_NODE &&
1031810359
"Operand is DELETED_NODE!");
1031910360
#endif
10320-
if (!EnableSimplifyNodes)
10321-
return getNodeImpl(Opcode, DL, VT, Ops, Flags);
1032210361

1032310362
switch (Opcode) {
1032410363
default: break;
@@ -10387,7 +10426,34 @@ SDValue SelectionDAG::getNode(unsigned Opcode, const SDLoc &DL, EVT VT,
1038710426
break;
1038810427
}
1038910428

10390-
return getNodeImpl(Opcode, DL, VT, Ops, Flags);
10429+
// Memoize nodes.
10430+
SDNode *N;
10431+
SDVTList VTs = getVTList(VT);
10432+
10433+
if (VT != MVT::Glue) {
10434+
FoldingSetNodeID ID;
10435+
AddNodeIDNode(ID, Opcode, VTs, Ops);
10436+
void *IP = nullptr;
10437+
10438+
if (SDNode *E = FindNodeOrInsertPos(ID, DL, IP)) {
10439+
E->intersectFlagsWith(Flags);
10440+
return SDValue(E, 0);
10441+
}
10442+
10443+
N = newSDNode<SDNode>(Opcode, DL.getIROrder(), DL.getDebugLoc(), VTs);
10444+
createOperands(N, Ops);
10445+
10446+
CSEMap.InsertNode(N, IP);
10447+
} else {
10448+
N = newSDNode<SDNode>(Opcode, DL.getIROrder(), DL.getDebugLoc(), VTs);
10449+
createOperands(N, Ops);
10450+
}
10451+
10452+
N->setFlags(Flags);
10453+
InsertNode(N);
10454+
SDValue V(N, 0);
10455+
NewSDValueDbgMsg(V, "Creating new node: ", this);
10456+
return V;
1039110457
}
1039210458

1039310459
SDValue SelectionDAG::getNode(unsigned Opcode, const SDLoc &DL,
@@ -10407,8 +10473,6 @@ SDValue SelectionDAG::getNode(unsigned Opcode, const SDLoc &DL, SDVTList VTList,
1040710473
ArrayRef<SDValue> Ops, const SDNodeFlags Flags) {
1040810474
if (VTList.NumVTs == 1)
1040910475
return getNode(Opcode, DL, VTList.VTs[0], Ops, Flags);
10410-
if (!EnableSimplifyNodes)
10411-
return getNodeImpl(Opcode, DL, VTList, Ops, Flags);
1041210476

1041310477
#ifndef NDEBUG
1041410478
for (const auto &Op : Ops)
@@ -10573,7 +10637,30 @@ SDValue SelectionDAG::getNode(unsigned Opcode, const SDLoc &DL, SDVTList VTList,
1057310637
#endif
1057410638
}
1057510639

10576-
return getNodeImpl(Opcode, DL, VTList, Ops, Flags);
10640+
// Memoize the node unless it returns a glue result.
10641+
SDNode *N;
10642+
if (VTList.VTs[VTList.NumVTs-1] != MVT::Glue) {
10643+
FoldingSetNodeID ID;
10644+
AddNodeIDNode(ID, Opcode, VTList, Ops);
10645+
void *IP = nullptr;
10646+
if (SDNode *E = FindNodeOrInsertPos(ID, DL, IP)) {
10647+
E->intersectFlagsWith(Flags);
10648+
return SDValue(E, 0);
10649+
}
10650+
10651+
N = newSDNode<SDNode>(Opcode, DL.getIROrder(), DL.getDebugLoc(), VTList);
10652+
createOperands(N, Ops);
10653+
CSEMap.InsertNode(N, IP);
10654+
} else {
10655+
N = newSDNode<SDNode>(Opcode, DL.getIROrder(), DL.getDebugLoc(), VTList);
10656+
createOperands(N, Ops);
10657+
}
10658+
10659+
N->setFlags(Flags);
10660+
InsertNode(N);
10661+
SDValue V(N, 0);
10662+
NewSDValueDbgMsg(V, "Creating new node: ", this);
10663+
return V;
1057710664
}
1057810665

1057910666
SDValue SelectionDAG::getNode(unsigned Opcode, const SDLoc &DL,

0 commit comments

Comments
 (0)