PassRegistry.h revision 40be1e85665d10f5444186f0e7106e368dd735b8
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#include "llvm/Support/CBindingWrapping.h"
22#include "llvm-c/Core.h"
23
24namespace llvm {
25
26class PassInfo;
27struct PassRegistrationListener;
28
29/// PassRegistry - This class manages the registration and intitialization of
30/// the pass subsystem as application startup, and assists the PassManager
31/// in resolving pass dependencies.
32/// NOTE: PassRegistry is NOT thread-safe.  If you want to use LLVM on multiple
33/// threads simultaneously, you will need to use a separate PassRegistry on
34/// each thread.
35class PassRegistry {
36  mutable void *pImpl;
37  void *getImpl() const;
38
39public:
40  PassRegistry() : pImpl(0) { }
41  ~PassRegistry();
42
43  /// getPassRegistry - Access the global registry object, which is
44  /// automatically initialized at application launch and destroyed by
45  /// llvm_shutdown.
46  static PassRegistry *getPassRegistry();
47
48  /// getPassInfo - Look up a pass' corresponding PassInfo, indexed by the pass'
49  /// type identifier (&MyPass::ID).
50  const PassInfo *getPassInfo(const void *TI) const;
51
52  /// getPassInfo - Look up a pass' corresponding PassInfo, indexed by the pass'
53  /// argument string.
54  const PassInfo *getPassInfo(StringRef Arg) const;
55
56  /// registerPass - Register a pass (by means of its PassInfo) with the
57  /// registry.  Required in order to use the pass with a PassManager.
58  void registerPass(const PassInfo &PI, bool ShouldFree = false);
59
60  /// registerPass - Unregister a pass (by means of its PassInfo) with the
61  /// registry.
62  void unregisterPass(const PassInfo &PI);
63
64  /// registerAnalysisGroup - Register an analysis group (or a pass implementing
65  // an analysis group) with the registry.  Like registerPass, this is required
66  // in order for a PassManager to be able to use this group/pass.
67  void registerAnalysisGroup(const void *InterfaceID, const void *PassID,
68                             PassInfo& Registeree, bool isDefault,
69                             bool ShouldFree = false);
70
71  /// enumerateWith - Enumerate the registered passes, calling the provided
72  /// PassRegistrationListener's passEnumerate() callback on each of them.
73  void enumerateWith(PassRegistrationListener *L);
74
75  /// addRegistrationListener - Register the given PassRegistrationListener
76  /// to receive passRegistered() callbacks whenever a new pass is registered.
77  void addRegistrationListener(PassRegistrationListener *L);
78
79  /// removeRegistrationListener - Unregister a PassRegistrationListener so that
80  /// it no longer receives passRegistered() callbacks.
81  void removeRegistrationListener(PassRegistrationListener *L);
82};
83
84// Create wrappers for C Binding types (see CBindingWrapping.h).
85DEFINE_STDCXX_CONVERSION_FUNCTIONS(PassRegistry, LLVMPassRegistryRef)
86
87}
88
89#endif
90