From: Chris Lattner Date: Fri, 23 Apr 2010 18:37:01 +0000 (+0000) Subject: switch InlineInfo.DevirtualizedCalls's list to be of WeakVH. X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=076863225ce070345ff7048f48b3550e00598a10;p=oota-llvm.git switch InlineInfo.DevirtualizedCalls's list to be of WeakVH. This fixes a bug where calls inlined into an invoke would get changed into an invoke but the array would keep pointing to the (now dead) call. The improved inliner behavior is still disabled for now. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@102196 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/Transforms/Utils/Cloning.h b/include/llvm/Transforms/Utils/Cloning.h index a9dc95b4a81..463c5d48e9e 100644 --- a/include/llvm/Transforms/Utils/Cloning.h +++ b/include/llvm/Transforms/Utils/Cloning.h @@ -21,6 +21,7 @@ #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/Twine.h" +#include "llvm/Support/ValueHandle.h" namespace llvm { @@ -178,7 +179,7 @@ public: /// DevirtualizedCalls - InlineFunction fills this in with callsites that were /// inlined from the callee that went from being indirect calls to direct /// calls due to inlining. This is only filled in if CG is non-null. - SmallVector DevirtualizedCalls; + SmallVector DevirtualizedCalls; void reset() { StaticAllocas.clear(); diff --git a/lib/Transforms/IPO/Inliner.cpp b/lib/Transforms/IPO/Inliner.cpp index 322b4698756..1ac609ddf2c 100644 --- a/lib/Transforms/IPO/Inliner.cpp +++ b/lib/Transforms/IPO/Inliner.cpp @@ -392,8 +392,10 @@ bool Inliner::runOnSCC(CallGraphSCC &SCC) { // onto our worklist to process. They are useful inline candidates. #if 0 for (unsigned i = 0, e = InlineInfo.DevirtualizedCalls.size(); - i != e; ++i) - CallSites.push_back(CallSite(InlineInfo.DevirtualizedCalls[i])); + i != e; ++i) { + Value *Ptr = InlineInfo.DevirtualizedCalls[i]; + CallSites.push_back(CallSite(Ptr)); + } #endif // Update the cached cost info with the inlined call. diff --git a/lib/Transforms/Utils/InlineFunction.cpp b/lib/Transforms/Utils/InlineFunction.cpp index a913d157e24..481cacf5a19 100644 --- a/lib/Transforms/Utils/InlineFunction.cpp +++ b/lib/Transforms/Utils/InlineFunction.cpp @@ -72,7 +72,7 @@ static void HandleCallsInBlockInlinedThroughInvoke(BasicBlock *BB, II->setAttributes(CI->getAttributes()); // Make sure that anything using the call now uses the invoke! This also - // updates the CallGraph if present. + // updates the CallGraph if present, because it uses a WeakVH. CI->replaceAllUsesWith(II); // Delete the unconditional branch inserted by splitBasicBlock