eliminate the NullaryOps map, use CSEMap instead.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29621 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2006-08-11 18:38:11 +00:00
parent bb6f6eb667
commit 4a283e90af
2 changed files with 18 additions and 24 deletions

View File

@ -449,8 +449,6 @@ private:
std::list<std::vector<MVT::ValueType> > VTList;
// Maps to auto-CSE operations.
std::map<std::pair<unsigned, MVT::ValueType>, SDNode *> NullaryOps;
std::map<std::pair<unsigned, MVT::ValueType>, RegisterSDNode*> RegNodes;
std::vector<CondCodeSDNode*> CondCodeNodes;

View File

@ -430,18 +430,8 @@ void SelectionDAG::RemoveNodeFromCSEMaps(SDNode *N) {
break;
}
default:
if (N->getNumValues() == 1) {
if (N->getNumOperands() == 0) {
Erased = NullaryOps.erase(std::make_pair(N->getOpcode(),
N->getValueType(0)));
} else {
// Remove it from the CSE Map.
Erased = CSEMap.RemoveNode(N);
}
} else {
// Remove it from the CSE Map.
Erased = CSEMap.RemoveNode(N);
}
// Remove it from the CSE Map.
Erased = CSEMap.RemoveNode(N);
break;
}
#ifndef NDEBUG
@ -973,11 +963,15 @@ SDOperand SelectionDAG::SimplifySetCC(MVT::ValueType VT, SDOperand N1,
/// getNode - Gets or creates the specified node.
///
SDOperand SelectionDAG::getNode(unsigned Opcode, MVT::ValueType VT) {
SDNode *&N = NullaryOps[std::make_pair(Opcode, VT)];
if (!N) {
N = new SDNode(Opcode, VT);
AllNodes.push_back(N);
}
MVT::ValueType *VTs = getNodeValueTypes(VT);
SelectionDAGCSEMap::NodeID ID(Opcode, VTs);
void *IP = 0;
if (SDNode *E = CSEMap.FindNodeOrInsertPos(ID, IP))
return SDOperand(E, 0);
SDNode *N = new SDNode(Opcode, VT);
CSEMap.InsertNode(N, IP);
AllNodes.push_back(N);
return SDOperand(N, 0);
}
@ -1892,16 +1886,18 @@ UpdateNodeOperands(SDOperand InN, SDOperand *Ops, unsigned NumOps) {
/// the current one.
SDOperand SelectionDAG::SelectNodeTo(SDNode *N, unsigned TargetOpc,
MVT::ValueType VT) {
// If an identical node already exists, use it.
SDNode *&ON = NullaryOps[std::make_pair(ISD::BUILTIN_OP_END+TargetOpc, VT)];
if (ON) return SDOperand(ON, 0);
MVT::ValueType *VTs = getNodeValueTypes(VT);
SelectionDAGCSEMap::NodeID ID(ISD::BUILTIN_OP_END+TargetOpc, VTs);
void *IP = 0;
if (SDNode *ON = CSEMap.FindNodeOrInsertPos(ID, IP))
return SDOperand(ON, 0);
RemoveNodeFromCSEMaps(N);
N->MorphNodeTo(ISD::BUILTIN_OP_END+TargetOpc);
N->setValueTypes(getNodeValueTypes(VT), 1);
ON = N; // Memoize the new node.
CSEMap.InsertNode(N, IP);
return SDOperand(N, 0);
}