diff options
Diffstat (limited to 'lib/Transforms/IPO')
-rw-r--r-- | lib/Transforms/IPO/ArgumentPromotion.cpp | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/lib/Transforms/IPO/ArgumentPromotion.cpp b/lib/Transforms/IPO/ArgumentPromotion.cpp index b508714e85..f3b29fe61b 100644 --- a/lib/Transforms/IPO/ArgumentPromotion.cpp +++ b/lib/Transforms/IPO/ArgumentPromotion.cpp @@ -607,6 +607,10 @@ Function *ArgPromotion::DoPromotion(Function *F, // changes. AliasAnalysis &AA = getAnalysis<AliasAnalysis>(); + // Get the callgraph information that we need to update to reflect our + // changes. + CallGraph &CG = getAnalysis<CallGraph>(); + // Loop over all of the callers of the function, transforming the call sites // to pass in the loaded pointers. // @@ -710,6 +714,9 @@ Function *ArgPromotion::DoPromotion(Function *F, // the old call with a new one. AA.replaceWithNewValue(Call, New); + // Update the callgraph to know that the callsite has been transformed. + CG[Call->getParent()->getParent()]->replaceCallSite(Call, New); + if (!Call->use_empty()) { Call->replaceAllUsesWith(New); New->takeName(Call); |