- PassManager prints analysis sets nicer

- Use Pass::AnalysisImpls instead of findAnalysisGroupMemeber

llvm-svn: 3534
This commit is contained in:
Chris Lattner 2002-08-30 20:23:45 +00:00
parent b2a31090b1
commit b3708e267e
1 changed files with 9 additions and 30 deletions

View File

@ -255,8 +255,10 @@ void PMDebug::PrintAnalysisSetInfo(unsigned Depth, const char *Msg,
Pass *P, const std::vector<AnalysisID> &Set){
if (PassDebugging >= Details && !Set.empty()) {
std::cerr << (void*)P << std::string(Depth*2+3, ' ') << Msg << " Analyses:";
for (unsigned i = 0; i != Set.size(); ++i)
std::cerr << " " << Set[i]->getPassName();
for (unsigned i = 0; i != Set.size(); ++i) {
if (i) std::cerr << ",";
std::cerr << " " << Set[i]->getPassName();
}
std::cerr << "\n";
}
}
@ -455,6 +457,11 @@ RegisterAGBase::RegisterAGBase(const std::type_info &Interface,
assert(ImplementationInfo &&
"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
if (AnalysisGroupInfoMap == 0)
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
//