mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-13 07:00:59 +00:00
Fix PR324 and testcase: Inline/2004-04-20-InlineLinkOnce.llx
llvm-svn: 13080
This commit is contained in:
parent
7e6c6c85b9
commit
5a1e3f099f
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user