summaryrefslogtreecommitdiff
path: root/lib/Transforms/IPO/Inliner.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2004-04-20 20:20:59 +0000
committerChris Lattner <sabre@nondot.org>2004-04-20 20:20:59 +0000
commit5ad2b1d54424f39390250d2ff11cc29312926efc (patch)
tree76edf7e35032440712fc6aa3e91c79022a13965e /lib/Transforms/IPO/Inliner.cpp
parent7be1e0b478bd8430f5a676985f86c22f14c58c89 (diff)
downloadllvm-5ad2b1d54424f39390250d2ff11cc29312926efc.tar.gz
llvm-5ad2b1d54424f39390250d2ff11cc29312926efc.tar.bz2
llvm-5ad2b1d54424f39390250d2ff11cc29312926efc.tar.xz
Fix PR324 and testcase: Inline/2004-04-20-InlineLinkOnce.llx
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13080 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/IPO/Inliner.cpp')
-rw-r--r--lib/Transforms/IPO/Inliner.cpp10
1 files changed, 7 insertions, 3 deletions
diff --git a/lib/Transforms/IPO/Inliner.cpp b/lib/Transforms/IPO/Inliner.cpp
index 8633a7e950..0684c28697 100644
--- a/lib/Transforms/IPO/Inliner.cpp
+++ b/lib/Transforms/IPO/Inliner.cpp
@@ -120,14 +120,18 @@ bool Inliner::runOnSCC(const std::vector<CallGraphNode*> &SCC) {
(Callee->hasInternalLinkage() || Callee->hasLinkOnceLinkage())) {
DEBUG(std::cerr << " -> Deleting dead function: "
<< Callee->getName() << "\n");
- std::set<Function*>::iterator I = SCCFunctions.find(Callee);
- if (I != SCCFunctions.end()) // Remove function from this SCC.
- SCCFunctions.erase(I);
+ SCCFunctions.erase(Callee); // Remove function from this SCC.
// Remove any call graph edges from the callee to its callees.
while (CalleeNode->begin() != CalleeNode->end())
CalleeNode->removeCallEdgeTo(*(CalleeNode->end()-1));
+ // If the function has external linkage (basically if it's a
+ // linkonce function) remove the edge from the external node to the
+ // callee node.
+ if (!Callee->hasInternalLinkage())
+ CG.getExternalCallingNode()->removeCallEdgeTo(CalleeNode);
+
// Removing the node for callee from the call graph and delete it.
delete CG.removeFunctionFromModule(CalleeNode);
++NumDeleted;