16 for (
unsigned Idx = 0, Size = Passes.size(); Idx != Size; ++Idx)
17 if (Passes[Idx]->
run(M))
24 for (
unsigned Idx = 0, Size = Passes.size(); Idx != Size; ++Idx)
25 if (Passes[Idx]->
run(
I)) {
33 assert(F->
getParent() == M &&
"Invalidating a function from another module!");
39 E = ModuleAnalysisResults.
end();
41 if (
I->second->invalidate(M))
42 ModuleAnalysisResults.
erase(
I);
47 FunctionAnalysisResultListT &ResultsList = FunctionAnalysisResultLists[
F];
48 for (FunctionAnalysisResultListT::iterator
I = ResultsList.begin(),
49 E = ResultsList.end();
51 if (
I->second->invalidate(F)) {
53 I = ResultsList.erase(
I);
57 while (!InvalidatedPassIDs.
empty())
58 FunctionAnalysisResults.
erase(
67 E = ModuleAnalysisResults.
end();
69 if (
I->second->invalidate(M))
70 ModuleAnalysisResults.
erase(
I);
77 FI = FunctionAnalysisResultLists.
begin(),
78 FE = FunctionAnalysisResultLists.
end();
81 FunctionAnalysisResultListT &ResultsList = FI->second;
82 for (FunctionAnalysisResultListT::iterator
I = ResultsList.begin(),
83 E = ResultsList.end();
85 if (
I->second->invalidate(F)) {
87 I = ResultsList.erase(
I);
91 while (!InvalidatedPassIDs.
empty())
92 FunctionAnalysisResults.
erase(
97 const AnalysisManager::AnalysisResultConcept<Module> &
98 AnalysisManager::getResultImpl(
void *PassID,
Module *M) {
99 assert(M == this->M &&
"Wrong module used when querying the AnalysisManager");
109 ModuleAnalysisPasses.
find(PassID);
110 assert(PI != ModuleAnalysisPasses.
end() &&
111 "Analysis passes must be registered prior to being queried!");
112 RI->second = PI->second->run(M);
118 const AnalysisManager::AnalysisResultConcept<Function> &
119 AnalysisManager::getResultImpl(
void *PassID,
Function *
F) {
120 assert(F->
getParent() == M &&
"Analyzing a function from another module!");
124 llvm::tie(RI, Inserted) = FunctionAnalysisResults.
insert(std::make_pair(
125 std::make_pair(PassID, F), FunctionAnalysisResultListT::iterator()));
131 FunctionAnalysisPasses.
find(PassID);
132 assert(PI != FunctionAnalysisPasses.
end() &&
133 "Analysis passes must be registered prior to being queried!");
134 FunctionAnalysisResultListT &ResultList = FunctionAnalysisResultLists[
F];
135 ResultList.push_back(std::make_pair(PassID, PI->second->run(F)));
139 return *RI->second->second;
142 void AnalysisManager::invalidateImpl(
void *PassID,
Module *M) {
143 assert(M == this->M &&
"Invalidating a pass over a different module!");
144 ModuleAnalysisResults.
erase(PassID);
147 void AnalysisManager::invalidateImpl(
void *PassID,
Function *F) {
149 "Invalidating a pass over a function from another module!");
152 FunctionAnalysisResults.
find(std::make_pair(PassID, F));
153 if (RI == FunctionAnalysisResults.
end())
156 FunctionAnalysisResultLists[
F].
erase(RI->second);
void push_back(const T &Elt)
An owning, copyable polymorphic smart pointer.
The main container class for the LLVM Intermediate Representation.
T LLVM_ATTRIBUTE_UNUSED_RESULT pop_back_val()
bool LLVM_ATTRIBUTE_UNUSED_RESULT empty() const
void invalidateAll(Module *M)
Invalidate analyses cached for an IR Module.
std::pair< iterator, bool > insert(const std::pair< KeyT, ValueT > &KV)
DenseMapIterator< KeyT, ValueT, KeyInfoT, true > const_iterator
bool erase(const KeyT &Val)
DenseMapIterator< KeyT, ValueT, KeyInfoT > iterator
ItTy prior(ItTy it, Dist n)
iterator find(const KeyT &Val)
tier< T1, T2 > tie(T1 &f, T2 &s)