forked from OSchip/llvm-project
Add support for target DAG nodes that take 4 operands, such as PowerPC's
rlwinm. llvm-svn: 22856
This commit is contained in:
parent
cfb9a74c2e
commit
19a271a67b
|
@ -226,6 +226,8 @@ public:
|
|||
SDOperand Op1, SDOperand Op2);
|
||||
void SelectNodeTo(SDNode *N, MVT::ValueType VT, unsigned TargetOpc,
|
||||
SDOperand Op1, SDOperand Op2, SDOperand Op3);
|
||||
void SelectNodeTo(SDNode *N, MVT::ValueType VT, unsigned TargetOpc,
|
||||
SDOperand Op1, SDOperand Op2, SDOperand Op3, SDOperand Op4);
|
||||
|
||||
SDOperand getTargetNode(unsigned Opcode, MVT::ValueType VT,
|
||||
SDOperand Op1) {
|
||||
|
|
|
@ -664,6 +664,15 @@ protected:
|
|||
Op0.Val->Uses.push_back(this); Op1.Val->Uses.push_back(this);
|
||||
Op2.Val->Uses.push_back(this);
|
||||
}
|
||||
void setOperands(SDOperand Op0, SDOperand Op1, SDOperand Op2, SDOperand Op3) {
|
||||
Operands.reserve(4);
|
||||
Operands.push_back(Op0);
|
||||
Operands.push_back(Op1);
|
||||
Operands.push_back(Op2);
|
||||
Operands.push_back(Op3);
|
||||
Op0.Val->Uses.push_back(this); Op1.Val->Uses.push_back(this);
|
||||
Op2.Val->Uses.push_back(this); Op3.Val->Uses.push_back(this);
|
||||
}
|
||||
void addUser(SDNode *User) {
|
||||
Uses.push_back(User);
|
||||
}
|
||||
|
|
|
@ -1810,6 +1810,14 @@ void SelectionDAG::SelectNodeTo(SDNode *N, MVT::ValueType VT,
|
|||
N->setValueTypes(VT);
|
||||
N->setOperands(Op1, Op2, Op3);
|
||||
}
|
||||
void SelectionDAG::SelectNodeTo(SDNode *N, MVT::ValueType VT,
|
||||
unsigned TargetOpc, SDOperand Op1,
|
||||
SDOperand Op2, SDOperand Op3, SDOperand Op4) {
|
||||
RemoveNodeFromCSEMaps(N);
|
||||
N->MorphNodeTo(ISD::BUILTIN_OP_END+TargetOpc);
|
||||
N->setValueTypes(VT);
|
||||
N->setOperands(Op1, Op2, Op3, Op4);
|
||||
}
|
||||
|
||||
/// ReplaceAllUsesWith - Modify anything using 'From' to use 'To' instead.
|
||||
/// This can cause recursive merging of nodes in the DAG.
|
||||
|
|
Loading…
Reference in New Issue