Fix a major problem where we didn't add call graph edges for call sites with
authorChris Lattner <sabre@nondot.org>
Mon, 21 Mar 2005 20:20:49 +0000 (20:20 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 21 Mar 2005 20:20:49 +0000 (20:20 +0000)
more than 1 callee.  This fixes Analysis/DSGraph/FunctionPointerTable-const.ll

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

lib/Analysis/DataStructure/BottomUpClosure.cpp

index e7899c9e56f256927a096f8047eb088345b548e1..5549c8a6722089de030095d1244810730cd835b9 100644 (file)
@@ -354,11 +354,11 @@ void BUDataStructures::calculateGraph(DSGraph &Graph) {
       continue;
     } else {
       DSGraph *GI;
+      Instruction *TheCall = CS.getCallSite().getInstruction();
 
       if (CalledFuncs.size() == 1) {
         Function *Callee = CalledFuncs[0];
-        ActualCallees.insert(std::make_pair(CS.getCallSite().getInstruction(),
-                                            Callee));
+        ActualCallees.insert(std::make_pair(TheCall, Callee));
 
         // Get the data structure graph for the called function.
         GI = &getDSGraph(*Callee);  // Graph to inline
@@ -378,12 +378,16 @@ void BUDataStructures::calculateGraph(DSGraph &Graph) {
         std::cerr << "  calls " << CalledFuncs.size()
                   << " fns from site: " << CS.getCallSite().getInstruction() 
                   << "  " << *CS.getCallSite().getInstruction();
-        unsigned NumToPrint = CalledFuncs.size();
-        if (NumToPrint > 8) NumToPrint = 8;
         std::cerr << "   Fns =";
+        unsigned NumPrinted = 0;
+
         for (std::vector<Function*>::iterator I = CalledFuncs.begin(),
-               E = CalledFuncs.end(); I != E && NumToPrint; ++I, --NumToPrint)
-          std::cerr << " " << (*I)->getName();
+               E = CalledFuncs.end(); I != E; ++I) {
+          if (NumPrinted++ < 8) std::cerr << " " << (*I)->getName();
+
+          // Add the call edges to the call graph.
+          ActualCallees.insert(std::make_pair(TheCall, *I));
+        }
         std::cerr << "\n";
 
         // See if we already computed a graph for this set of callees.