remove CallGraphNode::replaceCallSite, it is redundant with other APIs.
authorChris Lattner <sabre@nondot.org>
Tue, 1 Sep 2009 18:52:39 +0000 (18:52 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 1 Sep 2009 18:52:39 +0000 (18:52 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@80708 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Analysis/CallGraph.h
lib/Analysis/IPA/CallGraph.cpp
lib/Analysis/IPA/CallGraphSCCPass.cpp
lib/Transforms/IPO/ArgumentPromotion.cpp
lib/Transforms/IPO/StructRetPromotion.cpp

index ff9f1196ae74b18bfa316c636a9f61cc7ac37ab8..1d23c695ad44f81cc364839608eb1991259939f6 100644 (file)
@@ -270,11 +270,6 @@ public:
   /// removeOneAbstractEdgeTo - Remove one edge associated with a null callsite
   /// from this node to the specified callee function.
   void removeOneAbstractEdgeTo(CallGraphNode *Callee);
-
-  /// replaceCallSite - Make the edge in the node for Old CallSite be for
-  /// New CallSite instead.  Note that this method takes linear time, so it
-  /// should be used sparingly.
-  void replaceCallSite(CallSite Old, CallSite New, CallGraphNode *NewCallee);
 };
 
 //===----------------------------------------------------------------------===//
index d70b7ab763183ee5dda7ecce448bc5788f3477b0..645916e35e7a00501908574cc8c3d26ee39b4a52 100644 (file)
@@ -279,27 +279,5 @@ void CallGraphNode::removeOneAbstractEdgeTo(CallGraphNode *Callee) {
   }
 }
 
-/// replaceCallSite - Make the edge in the node for Old CallSite be for
-/// New CallSite instead.  Note that this method takes linear time, so it
-/// should be used sparingly.
-void CallGraphNode::replaceCallSite(CallSite Old, CallSite New,
-                                    CallGraphNode *NewCallee) {
-  for (CalledFunctionsVector::iterator I = CalledFunctions.begin(); ; ++I) {
-    assert(I != CalledFunctions.end() && "Cannot find callsite to replace!");
-    if (I->first != Old.getInstruction()) continue;
-    
-    I->first = New.getInstruction();
-    
-    // If the callee is changing, not just the callsite, then update it as
-    // well.
-    if (NewCallee) {
-      I->second->DropRef();
-      I->second = NewCallee;
-      I->second->AddRef();
-    }
-    return;
-  }
-}
-
 // Enuse that users of CallGraph.h also link with this file
 DEFINING_FILE_FOR(CallGraph)
index a7d1183db99e17068fe74b60e84858b96579f10c..f7c38e2cce28c0422cd2efe8c48ae060533f17b9 100644 (file)
@@ -228,7 +228,7 @@ void CGPassManager::RefreshCallGraph(std::vector<CallGraphNode*> &CurSCC,
           else
             CalleeNode = CG.getCallsExternalNode();
           
-          CGN->replaceCallSite(CS, CS, CalleeNode);
+          ExistingIt->second = CalleeNode;
           MadeChange = true;
           continue;
         }
index b1f7f045ac028594342777a58f19ad5f1b4a8fd5..3c584c894af5022e69814ac13738ac1583d56e3a 100644 (file)
@@ -728,7 +728,9 @@ CallGraphNode *ArgPromotion::DoPromotion(Function *F,
     AA.replaceWithNewValue(Call, New);
 
     // Update the callgraph to know that the callsite has been transformed.
-    CG[Call->getParent()->getParent()]->replaceCallSite(Call, New, NF_CGN);
+    CallGraphNode *CalleeNode = CG[Call->getParent()->getParent()];
+    CalleeNode->removeCallEdgeFor(Call);
+    CalleeNode->addCalledFunction(New, NF_CGN);
 
     if (!Call->use_empty()) {
       Call->replaceAllUsesWith(New);
index 7cb4c9f30c293250b33e0c1b418aa9add2796314..4442820a284bf781bac3ad74347e2c23fe629cdd 100644 (file)
@@ -321,7 +321,9 @@ CallGraphNode *SRETPromotion::updateCallSites(Function *F, Function *NF) {
     New->takeName(Call);
 
     // Update the callgraph to know that the callsite has been transformed.
-    CG[Call->getParent()->getParent()]->replaceCallSite(Call, New, NF_CGN);
+    CallGraphNode *CalleeNode = CG[Call->getParent()->getParent()];
+    CalleeNode->removeCallEdgeFor(Call);
+    CalleeNode->addCalledFunction(New, NF_CGN);
     
     // Update all users of sret parameter to extract value using extractvalue.
     for (Value::use_iterator UI = FirstCArg->use_begin(),