From bb9ae1512e1179681c1774f2f1a9d8c042941a56 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Fri, 31 Oct 2003 21:05:58 +0000 Subject: [PATCH] Strip off CPR's manually, because if we don't, the inliner doesn't delete dead functions. GRR git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@9641 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Transforms/IPO/Inliner.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/lib/Transforms/IPO/Inliner.cpp b/lib/Transforms/IPO/Inliner.cpp index 503879e4303..6c7a1914a95 100644 --- a/lib/Transforms/IPO/Inliner.cpp +++ b/lib/Transforms/IPO/Inliner.cpp @@ -13,6 +13,7 @@ //===----------------------------------------------------------------------===// #include "Inliner.h" +#include "llvm/Constants.h" // ConstantPointerRef should die #include "llvm/Module.h" #include "llvm/iOther.h" #include "llvm/iTerminators.h" @@ -108,12 +109,18 @@ bool Inliner::performInlining(CallSite CS, std::set &SCC) { // Attempt to inline the function... if (!InlineFunction(CS)) return false; ++NumInlined; - + + if (Callee->hasOneUse()) + if (ConstantPointerRef *CPR = + dyn_cast(Callee->use_back())) + if (CPR->use_empty()) + CPR->destroyConstant(); + // If we inlined the last possible call site to the function, // delete the function body now. if (Callee->use_empty() && Callee != Caller && (Callee->hasInternalLinkage() || Callee->hasLinkOnceLinkage())) { - DEBUG(std::cerr << " -> Deleting dead function: " + DEBUG(std::cerr << " -> Deleting dead function: " << (void*)Callee << Callee->getName() << "\n"); std::set::iterator I = SCC.find(Callee); if (I != SCC.end()) // Remove function from this SCC...