Allow specification of whether the call sites should be copied, AND whether
authorChris Lattner <sabre@nondot.org>
Fri, 8 Nov 2002 22:27:09 +0000 (22:27 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 8 Nov 2002 22:27:09 +0000 (22:27 +0000)
the aux call sites should be copied

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@4639 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/DataStructure/DataStructure.cpp

index 60a89ffae1805ff7332ca89364019720b7e106e5..a7653115b8ec617d907c917450004cbb65c9da1a 100644 (file)
@@ -588,9 +588,11 @@ DSNodeHandle DSGraph::cloneInto(const DSGraph &G,
     FunctionCalls.reserve(FC+G.FunctionCalls.size());
     for (unsigned i = 0, ei = G.FunctionCalls.size(); i != ei; ++i)
       FunctionCalls.push_back(DSCallSite(G.FunctionCalls[i], OldNodeMap));
+  }
 
+  if (!(CloneFlags & DontCloneAuxCallNodes)) {
     // Copy the auxillary function calls list...
-    FC = AuxFunctionCalls.size();  // FirstCall
+    unsigned FC = AuxFunctionCalls.size();  // FirstCall
     AuxFunctionCalls.reserve(FC+G.AuxFunctionCalls.size());
     for (unsigned i = 0, ei = G.AuxFunctionCalls.size(); i != ei; ++i)
       AuxFunctionCalls.push_back(DSCallSite(G.AuxFunctionCalls[i], OldNodeMap));
@@ -981,13 +983,20 @@ void DSGraph::removeDeadNodes(bool KeepAllGlobals, bool KeepCalls) {
   std::set<DSNode*> Alive;
 
   // If KeepCalls, mark all nodes reachable by call nodes as alive...
-  if (KeepCalls)
+  if (KeepCalls) {
     for (unsigned i = 0, e = FunctionCalls.size(); i != e; ++i) {
       for (unsigned j = 0, e = FunctionCalls[i].getNumPtrArgs(); j != e; ++j)
         markAlive(FunctionCalls[i].getPtrArg(j).getNode(), Alive);
       markAlive(FunctionCalls[i].getRetVal().getNode(), Alive);
       markAlive(FunctionCalls[i].getCallee().getNode(), Alive);
     }
+    for (unsigned i = 0, e = AuxFunctionCalls.size(); i != e; ++i) {
+      for (unsigned j = 0, e = AuxFunctionCalls[i].getNumPtrArgs(); j != e; ++j)
+        markAlive(AuxFunctionCalls[i].getPtrArg(j).getNode(), Alive);
+      markAlive(AuxFunctionCalls[i].getRetVal().getNode(), Alive);
+      markAlive(AuxFunctionCalls[i].getCallee().getNode(), Alive);
+    }
+  }
 
   // Mark all nodes reachable by scalar nodes as alive...
   for (std::map<Value*, DSNodeHandle>::iterator I = ScalarMap.begin(),