/// remapLinks - Change all of the Links in the current node according to the
/// specified mapping.
///
-void DSNode::remapLinks(hash_map<const DSNode*, DSNodeHandle> &OldNodeMap) {
+void DSNode::remapLinks(DSGraph::NodeMapTy &OldNodeMap) {
for (unsigned i = 0, e = Links.size(); i != e; ++i) {
DSNodeHandle &H = OldNodeMap[Links[i].getNode()];
Links[i].setNode(H.getNode());
Nodes[i]->remapLinks(OldNodeMap);
// Copy the scalar map... merging all of the global nodes...
- for (hash_map<Value*, DSNodeHandle>::const_iterator I = G.ScalarMap.begin(),
+ for (ScalarMapTy::const_iterator I = G.ScalarMap.begin(),
E = G.ScalarMap.end(); I != E; ++I) {
DSNodeHandle &H = OldValMap[I->first];
DSNodeHandle &MappedNode = OldNodeMap[I->second.getNode()];
H.setNode(MappedNode.getNode());
if (isa<GlobalValue>(I->first)) { // Is this a global?
- hash_map<Value*, DSNodeHandle>::iterator GVI = ScalarMap.find(I->first);
+ ScalarMapTy::iterator GVI = ScalarMap.find(I->first);
if (GVI != ScalarMap.end()) // Is the global value in this fn already?
GVI->second.mergeWith(H);
else
std::vector<std::pair<Value*, DSNode*> > GlobalNodes;
// Mark all nodes reachable by (non-global) scalar nodes as alive...
- for (hash_map<Value*, DSNodeHandle>::iterator I = ScalarMap.begin(),
- E = ScalarMap.end(); I != E; )
+ for (ScalarMapTy::iterator I = ScalarMap.begin(), E = ScalarMap.end(); I !=E;)
if (isa<GlobalValue>(I->first)) { // Keep track of global nodes
assert(I->second.getNode() && "Null global node?");
GlobalNodes.push_back(std::make_pair(I->first, I->second.getNode()));
//
for (unsigned i = 0, e = GlobalNodes.size(); i != e; ++i) {
Value *G = GlobalNodes[i].first;
- hash_map<Value*, DSNodeHandle>::iterator I = ScalarMap.find(G);
+ ScalarMapTy::iterator I = ScalarMap.find(G);
assert(I != ScalarMap.end() && "Global not in scalar map anymore?");
assert(I->second.getNode() && "Global not pointing to anything?");
assert(!Alive.count(I->second.getNode()) && "Node is alive??");
for (unsigned i = 0, e = Nodes.size(); i != e; ++i)
Nodes[i]->assertOK();
return; // FIXME: remove
- for (hash_map<Value*, DSNodeHandle>::const_iterator I = ScalarMap.begin(),
+ for (ScalarMapTy::const_iterator I = ScalarMap.begin(),
E = ScalarMap.end(); I != E; ++I) {
assert(I->second.getNode() && "Null node in scalarmap!");
AssertNodeInGraph(I->second.getNode());
#endif
// Remove all integral constants from the scalarmap!
- for (hash_map<Value*, DSNodeHandle>::iterator I = ScalarMap.begin();
- I != ScalarMap.end();)
+ for (ScalarMapTy::iterator I = ScalarMap.begin(); I != ScalarMap.end();)
if (isa<ConstantIntegral>(I->first)) {
- hash_map<Value*, DSNodeHandle>::iterator J = I++;
+ ScalarMapTy::iterator J = I++;
ScalarMap.erase(J);
} else
++I;
NH = getValueDest(*CE->getOperand(0));
else if (CE->getOpcode() == Instruction::GetElementPtr) {
visitGetElementPtrInst(*CE);
- hash_map<Value*, DSNodeHandle>::iterator I = ScalarMap.find(CE);
+ DSGraph::ScalarMapTy::iterator I = ScalarMap.find(CE);
assert(I != ScalarMap.end() && "GEP didn't get processed right?");
NH = I->second;
} else {
void Steens::ResolveFunctionCall(Function *F, const DSCallSite &Call,
DSNodeHandle &RetVal) {
assert(ResultGraph != 0 && "Result graph not allocated!");
- hash_map<Value*, DSNodeHandle> &ValMap = ResultGraph->getScalarMap();
+ DSGraph::ScalarMapTy &ValMap = ResultGraph->getScalarMap();
// Handle the return value of the function...
if (Call.getRetVal().getNode() && RetVal.getNode())
unsigned PtrArgIdx = 0;
for (Function::aiterator AI = F->abegin(), AE = F->aend();
AI != AE && PtrArgIdx < Call.getNumPtrArgs(); ++AI) {
- hash_map<Value*, DSNodeHandle>::iterator I = ValMap.find(AI);
+ DSGraph::ScalarMapTy::iterator I = ValMap.find(AI);
if (I != ValMap.end()) // If its a pointer argument...
I->second.mergeWith(Call.getPtrArg(PtrArgIdx++));
}
// Incorporate the inlined Function's ScalarMap into the global
// ScalarMap...
DSGraph::ScalarMapTy &GVM = ResultGraph->getScalarMap();
- for (hash_map<Value*, DSNodeHandle>::iterator I = ValMap.begin(),
+ for (DSGraph::ScalarMapTy::iterator I = ValMap.begin(),
E = ValMap.end(); I != E; ++I)
GVM[I->first].mergeWith(I->second);
// FIXME: HANDLE Size argument!
assert(ResultGraph && "Result graph has not been computed yet!");
- hash_map<Value*, DSNodeHandle> &GSM = ResultGraph->getScalarMap();
+ DSGraph::ScalarMapTy &GSM = ResultGraph->getScalarMap();
- hash_map<Value*, DSNodeHandle>::iterator I = GSM.find(const_cast<Value*>(V1));
+ DSGraph::ScalarMapTy::iterator I = GSM.find(const_cast<Value*>(V1));
if (I != GSM.end() && I->second.getNode()) {
DSNodeHandle &V1H = I->second;
- hash_map<Value*, DSNodeHandle>::iterator J=GSM.find(const_cast<Value*>(V2));
+ DSGraph::ScalarMapTy::iterator J=GSM.find(const_cast<Value*>(V2));
if (J != GSM.end() && J->second.getNode()) {
DSNodeHandle &V2H = J->second;
// If the two pointers point to different data structure graph nodes, they