From: Chris Lattner Date: Fri, 2 Sep 2005 19:36:17 +0000 (+0000) Subject: Make sure to auto-cse nullary ops X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=70b9b1098a82990cca7804ba6425e7aa151ea8b4;p=oota-llvm.git Make sure to auto-cse nullary ops git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@23224 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/lib/CodeGen/SelectionDAG/SelectionDAG.cpp index cf4700eb22f..bf9482587dc 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); }