From: Duncan Sands Date: Mon, 8 Sep 2008 11:07:35 +0000 (+0000) Subject: Update the callgraph correctly in ArgumentPromotion. X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=34c8847b2d27433ec7b81c824b66771e7665873a;p=oota-llvm.git Update the callgraph correctly in ArgumentPromotion. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@55895 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Transforms/IPO/ArgumentPromotion.cpp b/lib/Transforms/IPO/ArgumentPromotion.cpp index b508714e85e..f3b29fe61bc 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(); + // Get the callgraph information that we need to update to reflect our + // changes. + CallGraph &CG = getAnalysis(); + // 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); diff --git a/test/Transforms/ArgumentPromotion/2008-09-07-CGUpdate.ll b/test/Transforms/ArgumentPromotion/2008-09-07-CGUpdate.ll new file mode 100644 index 00000000000..047ff0a48c6 --- /dev/null +++ b/test/Transforms/ArgumentPromotion/2008-09-07-CGUpdate.ll @@ -0,0 +1,12 @@ +; RUN: llvm-as < %s | opt -inline -argpromotion -disable-output + +define internal fastcc i32 @hash(i32* %ts, i32 %mod) nounwind { +entry: + unreachable +} + +define void @encode(i32* %m, i32* %ts, i32* %new) nounwind { +entry: + %0 = call fastcc i32 @hash( i32* %ts, i32 0 ) nounwind ; [#uses=0] + unreachable +} diff --git a/test/Transforms/ArgumentPromotion/2008-09-08-CGUpdateSelfEdge.ll b/test/Transforms/ArgumentPromotion/2008-09-08-CGUpdateSelfEdge.ll new file mode 100644 index 00000000000..d4061655008 --- /dev/null +++ b/test/Transforms/ArgumentPromotion/2008-09-08-CGUpdateSelfEdge.ll @@ -0,0 +1,25 @@ +; RUN: llvm-as < %s | opt -argpromotion -disable-output + +define internal fastcc i32 @term_SharingList(i32* %Term, i32* %List) nounwind { +entry: + br i1 false, label %bb, label %bb5 + +bb: ; preds = %entry + %0 = call fastcc i32 @term_SharingList( i32* null, i32* %List ) nounwind ; [#uses=0] + unreachable + +bb5: ; preds = %entry + ret i32 0 +} + +define i32 @term_Sharing(i32* %Term) nounwind { +entry: + br i1 false, label %bb.i, label %bb14 + +bb.i: ; preds = %entry + %0 = call fastcc i32 @term_SharingList( i32* null, i32* null ) nounwind ; [#uses=0] + ret i32 1 + +bb14: ; preds = %entry + ret i32 0 +}