class PassInfo {
public:
typedef Pass* (*NormalCtor_t)();
+ struct InterfaceInfo {
+ const PassInfo *interface;
+ const InterfaceInfo *next;
+ };
private:
const char *const PassName; // Nice name for Pass
const bool IsCFGOnlyPass; // Pass only looks at the CFG.
const bool IsAnalysis; // True if an analysis pass.
const bool IsAnalysisGroup; // True if an analysis group.
- std::vector<const PassInfo*> ItfImpl;// Interfaces implemented by this pass
+ const InterfaceInfo *ItfImpl;// Interfaces implemented by this pass
NormalCtor_t NormalCtor;
}
/// createPass() - Use this method to create an instance of this pass.
- Pass *createPass() const {
- assert((!isAnalysisGroup() || NormalCtor) &&
- "No default implementation found for analysis group!");
- assert(NormalCtor &&
- "Cannot call createPass on PassInfo without default ctor!");
- return NormalCtor();
- }
+ Pass *createPass() const;
/// addInterfaceImplemented - This method is called when this pass is
/// registered as a member of an analysis group with the RegisterAnalysisGroup
/// template.
///
void addInterfaceImplemented(const PassInfo *ItfPI) {
- ItfImpl.push_back(ItfPI);
+ InterfaceInfo *NewInfo = new InterfaceInfo();
+ NewInfo->interface = ItfPI;
+ NewInfo->next = ItfImpl;
+ ItfImpl = NewInfo;
}
/// getInterfacesImplemented - Return a list of all of the analysis group
/// interfaces implemented by this pass.
///
- const std::vector<const PassInfo*> &getInterfacesImplemented() const {
+ const InterfaceInfo *getInterfacesImplemented() const {
return ItfImpl;
}