diff options
| author | Owen Anderson <resistor@mac.com> | 2010-07-20 18:53:25 +0000 |
|---|---|---|
| committer | Owen Anderson <resistor@mac.com> | 2010-07-20 18:53:25 +0000 |
| commit | 2af72f623dea626f58028c81b7933b1c0bd4ea34 (patch) | |
| tree | 9de0fd20b4917efb793f898003e7d54b77b445fc /llvm | |
| parent | b7a95cf16548394a02655fda903fa519c57b5209 (diff) | |
| download | bcm5719-llvm-2af72f623dea626f58028c81b7933b1c0bd4ea34.tar.gz bcm5719-llvm-2af72f623dea626f58028c81b7933b1c0bd4ea34.zip | |
Oops.
llvm-svn: 108885
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/include/llvm/PassRegistry.h | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/llvm/include/llvm/PassRegistry.h b/llvm/include/llvm/PassRegistry.h new file mode 100644 index 00000000000..1f627d8bfca --- /dev/null +++ b/llvm/include/llvm/PassRegistry.h @@ -0,0 +1,67 @@ +//===- 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/PassSupport.h" +#include "llvm/ADT/StringMap.h" +#include "llvm/System/DataTypes.h" +#include "llvm/System/Mutex.h" +#include <map> +#include <set> + +using namespace llvm; + +namespace llvm { + +class PassRegistry { + /// Guards the contents of this class. + mutable sys::SmartMutex<true> Lock; + + /// PassInfoMap - Keep track of the PassInfo object for each registered pass. + typedef std::map<intptr_t, const PassInfo*> MapType; + MapType PassInfoMap; + + typedef StringMap<const PassInfo*> StringMapType; + StringMapType PassInfoStringMap; + + /// AnalysisGroupInfo - Keep track of information for each analysis group. + struct AnalysisGroupInfo { + std::set<const PassInfo *> Implementations; + }; + std::map<const PassInfo*, AnalysisGroupInfo> AnalysisGroupInfoMap; + +public: + static PassRegistry *getPassRegistry(); + + const PassInfo *getPassInfo(intptr_t TI) const; + const PassInfo *getPassInfo(StringRef Arg) const; + + void registerPass(const PassInfo &PI); + void unregisterPass(const PassInfo &PI); + + /// Analysis Group Mechanisms. + void registerAnalysisGroup(PassInfo *InterfaceInfo, + const PassInfo *ImplementationInfo, + bool isDefault); + + void enumerateWith(PassRegistrationListener *L); +}; + +} + +#endif |

