22 if (!DeadFunctionsInComdats.empty()) {
24 DeadFunctions.append(DeadFunctionsInComdats.begin(),
25 DeadFunctionsInComdats.end());
30 for (
Function *DeadFn : DeadFunctions) {
31 DeadFn->removeDeadConstantUsers();
34 if (LCG && !ReplacedFunctions.count(DeadFn)) {
37 auto *DeadSCC = LCG->lookupSCC(
N);
38 assert(DeadSCC && DeadSCC->size() == 1 &&
39 &DeadSCC->begin()->getFunction() == DeadFn);
41 FAM->clear(*DeadFn, DeadFn->getName());
42 AM->clear(*DeadSCC, DeadSCC->getName());
43 LCG->markDeadFunction(*DeadFn);
47 UR->InvalidatedSCCs.insert(LCG->lookupSCC(
N));
48 UR->DeadFunctions.push_back(DeadFn);
54 DeadFn->eraseFromParent();
58 bool Changed = !DeadFunctions.empty();
59 DeadFunctionsInComdats.clear();
60 DeadFunctions.clear();
75 LCG->addSplitFunction(OriginalFn, NewFn);
82 DeadFunctionsInComdats.push_back(&DeadFn);
84 DeadFunctions.push_back(&DeadFn);
87 FAM->clear(DeadFn, DeadFn.
getName());
92 ReplacedFunctions.insert(&OldFn);
96 SCC->getOuterRefSCC().replaceNodeFunction(OldLCGN, NewFn);
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
This file provides interfaces used to manipulate a call graph, regardless if it is a "old style" Call...
This file contains the declarations for the subclasses of Constant, which represent the different fla...
LLVM_ABI void registerOutlinedFunction(Function &OriginalFn, Function &NewFn)
If a new function was created by outlining, this method can be called to update the call graph for th...
LLVM_ABI void removeFunction(Function &Fn)
Remove Fn from the call graph.
LLVM_ABI void replaceFunctionWith(Function &OldFn, Function &NewFn)
Replace OldFn in the call graph (and SCC) with NewFn.
LLVM_ABI void reanalyzeFunction(Function &Fn)
After an CGSCC pass changes a function in ways that affect the call graph, this method can be called ...
LLVM_ABI bool finalize()
}
LLVM_ABI void removeDeadConstantUsers() const
If there are any dead constant users dangling off of this constant, remove them.
void deleteBody()
deleteBody - This method deletes the body of the function, and converts the linkage to external.
void setLinkage(LinkageTypes LT)
@ ExternalLinkage
Externally visible function.
A node in the call graph.
An SCC of the call graph.
static LLVM_ABI PoisonValue * get(Type *T)
Static factory methods - Return an 'poison' object of the specified type.
LLVM_ABI StringRef getName() const
Return a constant reference to the value's name.
@ C
The default llvm calling convention, compatible with C.
This is an optimization pass for GlobalISel generic memory operations.
LLVM_ABI LazyCallGraph::SCC & updateCGAndAnalysisManagerForCGSCCPass(LazyCallGraph &G, LazyCallGraph::SCC &C, LazyCallGraph::Node &N, CGSCCAnalysisManager &AM, CGSCCUpdateResult &UR, FunctionAnalysisManager &FAM)
Helper to update the call graph after running a CGSCC pass.
LLVM_ABI void filterDeadComdatFunctions(SmallVectorImpl< Function * > &DeadComdatFunctions)
Filter out potentially dead comdat functions where other entries keep the entire comdat group alive.