Home | History | Annotate | Download | only in llvm
      1 //===- llvm/PassRegistry.h - Pass Information Registry ----------*- C++ -*-===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 //
     10 // This file defines PassRegistry, a class that is used in the initialization
     11 // and registration of passes.  At application startup, passes are registered
     12 // with the PassRegistry, which is later provided to the PassManager for
     13 // dependency resolution and similar tasks.
     14 //
     15 //===----------------------------------------------------------------------===//
     16 
     17 #ifndef LLVM_PASSREGISTRY_H
     18 #define LLVM_PASSREGISTRY_H
     19 
     20 #include "llvm/ADT/StringRef.h"
     21 
     22 namespace llvm {
     23 
     24 class PassInfo;
     25 struct PassRegistrationListener;
     26 
     27 /// PassRegistry - This class manages the registration and intitialization of
     28 /// the pass subsystem as application startup, and assists the PassManager
     29 /// in resolving pass dependencies.
     30 /// NOTE: PassRegistry is NOT thread-safe.  If you want to use LLVM on multiple
     31 /// threads simultaneously, you will need to use a separate PassRegistry on
     32 /// each thread.
     33 class PassRegistry {
     34   mutable void *pImpl;
     35   void *getImpl() const;
     36 
     37 public:
     38   PassRegistry() : pImpl(0) { }
     39   ~PassRegistry();
     40 
     41   /// getPassRegistry - Access the global registry object, which is
     42   /// automatically initialized at application launch and destroyed by
     43   /// llvm_shutdown.
     44   static PassRegistry *getPassRegistry();
     45 
     46   /// getPassInfo - Look up a pass' corresponding PassInfo, indexed by the pass'
     47   /// type identifier (&MyPass::ID).
     48   const PassInfo *getPassInfo(const void *TI) const;
     49 
     50   /// getPassInfo - Look up a pass' corresponding PassInfo, indexed by the pass'
     51   /// argument string.
     52   const PassInfo *getPassInfo(StringRef Arg) const;
     53 
     54   /// registerPass - Register a pass (by means of its PassInfo) with the
     55   /// registry.  Required in order to use the pass with a PassManager.
     56   void registerPass(const PassInfo &PI, bool ShouldFree = false);
     57 
     58   /// registerPass - Unregister a pass (by means of its PassInfo) with the
     59   /// registry.
     60   void unregisterPass(const PassInfo &PI);
     61 
     62   /// registerAnalysisGroup - Register an analysis group (or a pass implementing
     63   // an analysis group) with the registry.  Like registerPass, this is required
     64   // in order for a PassManager to be able to use this group/pass.
     65   void registerAnalysisGroup(const void *InterfaceID, const void *PassID,
     66                              PassInfo& Registeree, bool isDefault,
     67                              bool ShouldFree = false);
     68 
     69   /// enumerateWith - Enumerate the registered passes, calling the provided
     70   /// PassRegistrationListener's passEnumerate() callback on each of them.
     71   void enumerateWith(PassRegistrationListener *L);
     72 
     73   /// addRegistrationListener - Register the given PassRegistrationListener
     74   /// to receive passRegistered() callbacks whenever a new pass is registered.
     75   void addRegistrationListener(PassRegistrationListener *L);
     76 
     77   /// removeRegistrationListener - Unregister a PassRegistrationListener so that
     78   /// it no longer receives passRegistered() callbacks.
     79   void removeRegistrationListener(PassRegistrationListener *L);
     80 };
     81 
     82 }
     83 
     84 #endif
     85