mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-07 12:28:24 +00:00
- PassManager prints analysis sets nicer
- Use Pass::AnalysisImpls instead of findAnalysisGroupMemeber git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@3534 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -255,8 +255,10 @@ void PMDebug::PrintAnalysisSetInfo(unsigned Depth, const char *Msg,
|
|||||||
Pass *P, const std::vector<AnalysisID> &Set){
|
Pass *P, const std::vector<AnalysisID> &Set){
|
||||||
if (PassDebugging >= Details && !Set.empty()) {
|
if (PassDebugging >= Details && !Set.empty()) {
|
||||||
std::cerr << (void*)P << std::string(Depth*2+3, ' ') << Msg << " Analyses:";
|
std::cerr << (void*)P << std::string(Depth*2+3, ' ') << Msg << " Analyses:";
|
||||||
for (unsigned i = 0; i != Set.size(); ++i)
|
for (unsigned i = 0; i != Set.size(); ++i) {
|
||||||
std::cerr << " " << Set[i]->getPassName();
|
if (i) std::cerr << ",";
|
||||||
|
std::cerr << " " << Set[i]->getPassName();
|
||||||
|
}
|
||||||
std::cerr << "\n";
|
std::cerr << "\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -455,6 +457,11 @@ RegisterAGBase::RegisterAGBase(const std::type_info &Interface,
|
|||||||
assert(ImplementationInfo &&
|
assert(ImplementationInfo &&
|
||||||
"Must register pass before adding to AnalysisGroup!");
|
"Must register pass before adding to AnalysisGroup!");
|
||||||
|
|
||||||
|
// Make sure we keep track of the fact that the implementation implements
|
||||||
|
// the interface.
|
||||||
|
PassInfo *IIPI = const_cast<PassInfo*>(ImplementationInfo);
|
||||||
|
IIPI->addInterfaceImplemented(InterfaceInfo);
|
||||||
|
|
||||||
// Lazily allocate to avoid nasty initialization order dependencies
|
// Lazily allocate to avoid nasty initialization order dependencies
|
||||||
if (AnalysisGroupInfoMap == 0)
|
if (AnalysisGroupInfoMap == 0)
|
||||||
AnalysisGroupInfoMap = new std::map<const PassInfo *,AnalysisGroupInfo>();
|
AnalysisGroupInfoMap = new std::map<const PassInfo *,AnalysisGroupInfo>();
|
||||||
@@ -508,34 +515,6 @@ RegisterAGBase::~RegisterAGBase() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// findAnalysisGroupMember - Return an iterator pointing to one of the elements
|
|
||||||
// of Map if there is a pass in Map that is a member of the analysis group for
|
|
||||||
// the specified AnalysisGroupID.
|
|
||||||
//
|
|
||||||
static std::map<const PassInfo*, Pass*>::const_iterator
|
|
||||||
findAnalysisGroupMember(const PassInfo *AnalysisGroupID,
|
|
||||||
const std::map<const PassInfo*, Pass*> &Map) {
|
|
||||||
assert(AnalysisGroupID->getPassType() == PassInfo::AnalysisGroup &&
|
|
||||||
"AnalysisGroupID is not an analysis group!");
|
|
||||||
assert(AnalysisGroupInfoMap && AnalysisGroupInfoMap->count(AnalysisGroupID) &&
|
|
||||||
"Analysis Group does not have any registered members!");
|
|
||||||
|
|
||||||
// Get the set of all known implementations of this analysis group...
|
|
||||||
std::set<const PassInfo *> &Impls =
|
|
||||||
(*AnalysisGroupInfoMap)[AnalysisGroupID].Implementations;
|
|
||||||
|
|
||||||
// Scan over available passes, checking to see if any is a valid analysis
|
|
||||||
for (std::map<const PassInfo*, Pass*>::const_iterator I = Map.begin(),
|
|
||||||
E = Map.end(); I != E; ++I)
|
|
||||||
if (Impls.count(I->first)) // This is a valid analysis, return it.
|
|
||||||
return I;
|
|
||||||
|
|
||||||
return Map.end(); // Nothing of use found.
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
// PassRegistrationListener implementation
|
// PassRegistrationListener implementation
|
||||||
//
|
//
|
||||||
|
Reference in New Issue
Block a user