add some methods for dag->dag isel

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@22800 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2005-08-16 18:16:24 +00:00
parent 7c5a3d390a
commit 1b95095857
2 changed files with 40 additions and 9 deletions

View File

@ -204,14 +204,23 @@ public:
// getSrcValue - construct a node to track a Value* through the backend
SDOperand getSrcValue(const Value* I, int offset = 0);
void replaceAllUsesWith(SDOperand Old, SDOperand New) {
assert(Old != New && "RAUW self!");
assert(0 && "Unimplemented!");
}
/// SelectNodeTo - These are used for target selectors to *mutate* the
/// specified node to have the specified return type, Target opcode, and
/// operands. Note that target opcodes are stored as
/// ISD::BUILTIN_OP_END+TargetOpcode in the node opcode field.
void SelectNodeTo(SDNode *N, MVT::ValueType VT, unsigned TargetOpc,
SDOperand Op1);
void SelectNodeTo(SDNode *N, MVT::ValueType VT, unsigned TargetOpc,
SDOperand Op1, SDOperand Op2);
void SelectNodeTo(SDNode *N, MVT::ValueType VT, unsigned TargetOpc,
SDOperand Op1, SDOperand Op2, SDOperand Op3);
void dump() const;
private:
void RemoveNodeFromCSEMaps(SDNode *N);
void DeleteNodeIfDead(SDNode *N, void *NodeSet);
/// SimplifySetCC - Try to simplify a setcc built with the specified operands

View File

@ -592,10 +592,17 @@ protected:
NodeDepth = ND+1;
}
virtual ~SDNode() {
// FIXME: Drop uses.
}
virtual ~SDNode() {}
/// MorphNodeTo - This clears the return value and operands list, and sets the
/// opcode of the node to the specified value. This should only be used by
/// the SelectionDAG class.
void MorphNodeTo(unsigned Opc) {
NodeType = Opc;
Values.clear();
Operands.clear();
}
void setValueTypes(MVT::ValueType VT) {
Values.reserve(1);
Values.push_back(VT);
@ -609,7 +616,22 @@ protected:
void setValueTypes(std::vector<MVT::ValueType> &VTs) {
std::swap(Values, VTs);
}
void setOperands(SDOperand Op0) {
Operands.reserve(1);
Operands.push_back(Op0);
}
void setOperands(SDOperand Op0, SDOperand Op1) {
Operands.reserve(2);
Operands.push_back(Op0);
Operands.push_back(Op1);
}
void setOperands(SDOperand Op0, SDOperand Op1, SDOperand Op2) {
Operands.reserve(3);
Operands.push_back(Op0);
Operands.push_back(Op1);
Operands.push_back(Op2);
}
void removeUser(SDNode *User) {
// Remove this user from the operand's use list.
for (unsigned i = Uses.size(); ; --i) {