[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
Chris Lattner
lattner at cs.uiuc.edu
Fri May 13 23:20:39 PDT 2005
Changes in directory llvm/lib/CodeGen/SelectionDAG:
SelectionDAG.cpp updated: 1.111 -> 1.112
---
Log message:
add a getNode() version that allows construction of any node type.
---
Diffs of the changes: (+33 -9)
SelectionDAG.cpp | 42 +++++++++++++++++++++++++++++++++---------
1 files changed, 33 insertions(+), 9 deletions(-)
Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.111 llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.112
--- llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp:1.111 Fri May 13 13:43:43 2005
+++ llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp Sat May 14 01:20:26 2005
@@ -257,6 +257,13 @@
BinaryOps.erase(std::make_pair(N->getOpcode(),
std::make_pair(N->getOperand(0),
N->getOperand(1))));
+ else {
+ // Remove the node from the ArbitraryNodes map.
+ std::vector<MVT::ValueType> RV(N->value_begin(), N->value_end());
+ std::vector<SDOperand> Ops(N->op_begin(), N->op_end());
+ ArbitraryNodes.erase(std::make_pair(N->getOpcode(),
+ std::make_pair(RV, Ops)));
+ }
break;
}
@@ -1410,29 +1417,29 @@
}
SDOperand SelectionDAG::getNode(unsigned Opcode, MVT::ValueType VT,
- std::vector<SDOperand> &Children) {
- switch (Children.size()) {
+ std::vector<SDOperand> &Ops) {
+ switch (Ops.size()) {
case 0: return getNode(Opcode, VT);
- case 1: return getNode(Opcode, VT, Children[0]);
- case 2: return getNode(Opcode, VT, Children[0], Children[1]);
- case 3: return getNode(Opcode, VT, Children[0], Children[1], Children[2]);
+ case 1: return getNode(Opcode, VT, Ops[0]);
+ case 2: return getNode(Opcode, VT, Ops[0], Ops[1]);
+ case 3: return getNode(Opcode, VT, Ops[0], Ops[1], Ops[2]);
default: break;
}
- ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(Children[1].Val);
+ ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(Ops[1].Val);
switch (Opcode) {
default: break;
case ISD::BRCONDTWOWAY:
if (N1C)
if (N1C->getValue()) // Unconditional branch to true dest.
- return getNode(ISD::BR, MVT::Other, Children[0], Children[2]);
+ return getNode(ISD::BR, MVT::Other, Ops[0], Ops[2]);
else // Unconditional branch to false dest.
- return getNode(ISD::BR, MVT::Other, Children[0], Children[3]);
+ return getNode(ISD::BR, MVT::Other, Ops[0], Ops[3]);
break;
}
// FIXME: MEMOIZE!!
- SDNode *N = new SDNode(Opcode, Children);
+ SDNode *N = new SDNode(Opcode, Ops);
if (Opcode != ISD::ADD_PARTS && Opcode != ISD::SUB_PARTS) {
N->setValueTypes(VT);
} else {
@@ -1443,6 +1450,23 @@
return SDOperand(N, 0);
}
+SDOperand SelectionDAG::getNode(unsigned Opcode,
+ std::vector<MVT::ValueType> &ResultTys,
+ std::vector<SDOperand> &Ops) {
+ if (ResultTys.size() == 1)
+ return getNode(Opcode, ResultTys[0], Ops);
+
+
+ // Memoize the node.
+ SDNode *&N = ArbitraryNodes[std::make_pair(Opcode, std::make_pair(ResultTys,
+ Ops))];
+ if (N) return SDOperand(N, 0);
+ N = new SDNode(Opcode, Ops);
+ N->setValueTypes(ResultTys);
+ return SDOperand(N, 0);
+}
+
+
SDOperand SelectionDAG::getNode(unsigned Opcode, MVT::ValueType VT,SDOperand N1,
MVT::ValueType EVT) {
More information about the llvm-commits
mailing list