//===- llvm/PassRegistry.h - Pass Information Registry ----------*- C++ -*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // This file defines PassRegistry, a class that is used in the initialization // and registration of passes. At initialization, passes are registered with // the PassRegistry, which is later provided to the PassManager for dependency // resolution and similar tasks. // //===----------------------------------------------------------------------===// #ifndef LLVM_PASSREGISTRY_H #define LLVM_PASSREGISTRY_H #include "llvm/ADT/StringMap.h" #include "llvm/System/DataTypes.h" #include "llvm/System/Mutex.h" #include #include #include namespace llvm { class PassInfo; struct PassRegistrationListener; class PassRegistry { /// Guards the contents of this class. mutable sys::SmartMutex Lock; /// PassInfoMap - Keep track of the PassInfo object for each registered pass. typedef std::map MapType; MapType PassInfoMap; typedef StringMap StringMapType; StringMapType PassInfoStringMap; /// AnalysisGroupInfo - Keep track of information for each analysis group. struct AnalysisGroupInfo { std::set Implementations; }; std::map AnalysisGroupInfoMap; std::vector Listeners; public: static PassRegistry *getPassRegistry(); const PassInfo *getPassInfo(const void *TI) const; const PassInfo *getPassInfo(StringRef Arg) const; void registerPass(const PassInfo &PI); void unregisterPass(const PassInfo &PI); /// Analysis Group Mechanisms. void registerAnalysisGroup(const void *InterfaceID, const void *PassID, PassInfo& Registeree, bool isDefault); void enumerateWith(PassRegistrationListener *L); void addRegistrationListener(PassRegistrationListener* L); void removeRegistrationListener(PassRegistrationListener *L); }; } #endif