Let the inliner update the callgraph to reflect the changes it makes, instead
authorChris Lattner <sabre@nondot.org>
Sat, 14 Jan 2006 20:09:18 +0000 (20:09 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 14 Jan 2006 20:09:18 +0000 (20:09 +0000)
of doing it ourselves.  This fixes Transforms/Inline/2006-01-14-CallGraphUpdate.ll

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

lib/Transforms/IPO/Inliner.cpp

index a10879a15079e8ea5a54feeeedf0ed3f7e82cbbb..2ee84276e760fc5d2b2619037cfb08be937c4be7 100644 (file)
@@ -42,18 +42,7 @@ static bool InlineCallIfPossible(CallSite CS, CallGraph &CG,
                                  const std::set<Function*> &SCCFunctions) {
   Function *Caller = CS.getInstruction()->getParent()->getParent();
   Function *Callee = CS.getCalledFunction();
-  if (!InlineFunction(CS)) return false;
-
-  // Update the call graph by deleting the edge from Callee to Caller
-  CallGraphNode *CalleeNode = CG[Callee];
-  CallGraphNode *CallerNode = CG[Caller];
-  CallerNode->removeCallEdgeTo(CalleeNode);
-
-  // Since we inlined all uninlined call sites in the callee into the caller,
-  // add edges from the caller to all of the callees of the callee.
-  for (CallGraphNode::iterator I = CalleeNode->begin(),
-         E = CalleeNode->end(); I != E; ++I)
-    CallerNode->addCalledFunction(*I);
+  if (!InlineFunction(CS, &CG)) return false;
 
   // If we inlined the last possible call site to the function, delete the
   // function body now.
@@ -63,6 +52,7 @@ static bool InlineCallIfPossible(CallSite CS, CallGraph &CG,
                     << Callee->getName() << "\n");
 
     // Remove any call graph edges from the callee to its callees.
+    CallGraphNode *CalleeNode = CG[Callee];
     while (CalleeNode->begin() != CalleeNode->end())
       CalleeNode->removeCallEdgeTo(*(CalleeNode->end()-1));