diff options
author | Chris Lattner <sabre@nondot.org> | 2005-08-17 18:58:38 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2005-08-17 18:58:38 +0000 |
commit | 8c3484c5181834e6b7060a6064ac769878101f23 (patch) | |
tree | 474bb721a229f38185f81bb56a3bac906de7af70 | |
parent | 02659d23637f69f90640bfa3e66919517103c57a (diff) |
Make removeUser more efficient, add a matching addUser.
Fix the setOperands methods I added to update use/def information correctly.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@22832 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/CodeGen/SelectionDAGNodes.h | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/include/llvm/CodeGen/SelectionDAGNodes.h b/include/llvm/CodeGen/SelectionDAGNodes.h index 930a163848..3606c430ee 100644 --- a/include/llvm/CodeGen/SelectionDAGNodes.h +++ b/include/llvm/CodeGen/SelectionDAGNodes.h @@ -641,25 +641,33 @@ protected: void setOperands(SDOperand Op0) { Operands.reserve(1); Operands.push_back(Op0); + Op0.Val->Uses.push_back(this); } void setOperands(SDOperand Op0, SDOperand Op1) { Operands.reserve(2); Operands.push_back(Op0); Operands.push_back(Op1); + Op0.Val->Uses.push_back(this); Op1.Val->Uses.push_back(this); } void setOperands(SDOperand Op0, SDOperand Op1, SDOperand Op2) { Operands.reserve(3); Operands.push_back(Op0); Operands.push_back(Op1); Operands.push_back(Op2); + Op0.Val->Uses.push_back(this); Op1.Val->Uses.push_back(this); + Op2.Val->Uses.push_back(this); + } + void addUser(SDNode *User) { + Uses.push_back(User); } void removeUser(SDNode *User) { // Remove this user from the operand's use list. for (unsigned i = Uses.size(); ; --i) { assert(i != 0 && "Didn't find user!"); if (Uses[i-1] == User) { - Uses.erase(Uses.begin()+i-1); - break; + Uses[i-1] = Uses.back(); + Uses.pop_back(); + return; } } } |