diff options
author | Chris Lattner <sabre@nondot.org> | 2003-06-30 05:09:29 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2003-06-30 05:09:29 +0000 |
commit | 348d93c8c2c0cfe43eacea02a639f0d2911a0559 (patch) | |
tree | f25844cf9d2d8d95ae8b9d5d4c46086376ff5eaa /llvm/lib/Analysis/DataStructure/DataStructure.cpp | |
parent | 312783f0d2ae03af823130a6103f3927e0489001 (diff) | |
download | bcm5719-llvm-348d93c8c2c0cfe43eacea02a639f0d2911a0559.tar.gz bcm5719-llvm-348d93c8c2c0cfe43eacea02a639f0d2911a0559.zip |
Handle the case where OldNodeMap == &ScalarMap correctly
llvm-svn: 7000
Diffstat (limited to 'llvm/lib/Analysis/DataStructure/DataStructure.cpp')
-rw-r--r-- | llvm/lib/Analysis/DataStructure/DataStructure.cpp | 19 |
1 files changed, 7 insertions, 12 deletions
diff --git a/llvm/lib/Analysis/DataStructure/DataStructure.cpp b/llvm/lib/Analysis/DataStructure/DataStructure.cpp index 94ed3487e84..c5e81a71a91 100644 --- a/llvm/lib/Analysis/DataStructure/DataStructure.cpp +++ b/llvm/lib/Analysis/DataStructure/DataStructure.cpp @@ -784,18 +784,14 @@ void DSGraph::cloneInto(const DSGraph &G, ScalarMapTy &OldValMap, // Copy the scalar map... merging all of the global nodes... 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.setOffset(I->second.getOffset()+MappedNode.getOffset()); - H.setNode(MappedNode.getNode()); + DSNodeHandle &H = OldValMap[I->first]; + H.mergeWith(DSNodeHandle(MappedNode.getNode(), + I->second.getOffset()+MappedNode.getOffset())); - if (isa<GlobalValue>(I->first)) { // Is this a global? - ScalarMapTy::iterator GVI = ScalarMap.find(I->first); - if (GVI != ScalarMap.end()) // Is the global value in this fn already? - GVI->second.mergeWith(H); - else - ScalarMap[I->first] = H; // Add global pointer to this graph - } + // If this is a global, add the global to this fn or merge if already exists + if (isa<GlobalValue>(I->first) && &OldNodeMap != &ScalarMap) + ScalarMap[I->first].mergeWith(H); } if (!(CloneFlags & DontCloneCallNodes)) { @@ -832,8 +828,7 @@ void DSGraph::cloneInto(const DSGraph &G, ScalarMapTy &OldValMap, /// void DSGraph::mergeInGraph(DSCallSite &CS, Function &F, const DSGraph &Graph, unsigned CloneFlags) { - ScalarMapTy OldValMap; - ScalarMapTy *ScalarMap = &OldValMap; + ScalarMapTy OldValMap, *ScalarMap; DSNodeHandle RetVal; // If this is not a recursive call, clone the graph into this graph... |