diff options
author | Chris Lattner <sabre@nondot.org> | 2005-09-02 19:36:17 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2005-09-02 19:36:17 +0000 |
commit | 70b9b1098a82990cca7804ba6425e7aa151ea8b4 (patch) | |
tree | 053142ff259f3d91a5acf14a9a3b391d77470721 /lib/CodeGen/SelectionDAG/SelectionDAG.cpp | |
parent | ab2eb66f07689dc1698ace2182e77395254ad83d (diff) |
Make sure to auto-cse nullary ops
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@23224 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/SelectionDAG/SelectionDAG.cpp')
-rw-r--r-- | lib/CodeGen/SelectionDAG/SelectionDAG.cpp | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/lib/CodeGen/SelectionDAG/SelectionDAG.cpp index cf4700eb22..bf9482587d 100644 --- a/lib/CodeGen/SelectionDAG/SelectionDAG.cpp +++ b/lib/CodeGen/SelectionDAG/SelectionDAG.cpp @@ -326,7 +326,10 @@ void SelectionDAG::RemoveNodeFromCSEMaps(SDNode *N) { break; default: if (N->getNumValues() == 1) { - if (N->getNumOperands() == 1) { + if (N->getNumOperands() == 0) { + Erased = NullaryOps.erase(std::make_pair(N->getOpcode(), + N->getValueType(0))); + } else if (N->getNumOperands() == 1) { Erased = UnaryOps.erase(std::make_pair(N->getOpcode(), std::make_pair(N->getOperand(0), @@ -1010,8 +1013,11 @@ SDOperand SelectionDAG::SimplifySelectCC(SDOperand N1, SDOperand N2, /// getNode - Gets or creates the specified node. /// SDOperand SelectionDAG::getNode(unsigned Opcode, MVT::ValueType VT) { - SDNode *N = new SDNode(Opcode, VT); - AllNodes.push_back(N); + SDNode *&N = NullaryOps[std::make_pair(Opcode, VT)]; + if (!N) { + N = new SDNode(Opcode, VT); + AllNodes.push_back(N); + } return SDOperand(N, 0); } |