diff options
| author | Ralf Luther <luther.ralf@gmail.com> | 2019-03-27 20:23:17 +0000 |
|---|---|---|
| committer | Gerrit Code Review <gerrit2@aicp-server-3> | 2019-03-27 20:23:17 +0000 |
| commit | 1ce3a9d272e564b22a1333a1e36a3d3ab7cfab01 (patch) | |
| tree | 391382eadd4fec5bb480f2e8934fa352770221d1 /clang-r353983/include/llvm/PassRegistry.h | |
| parent | d1d48b140bafaa8a50107292f5fce95562575765 (diff) | |
| parent | 4f56932d3416ac03f646bc1a611b3135fec2fe08 (diff) | |
Merge "Update prebuilt Clang to r353983." into p9.0HEADp9.0-backupp9.0
Diffstat (limited to 'clang-r353983/include/llvm/PassRegistry.h')
| -rw-r--r-- | clang-r353983/include/llvm/PassRegistry.h | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/clang-r353983/include/llvm/PassRegistry.h b/clang-r353983/include/llvm/PassRegistry.h new file mode 100644 index 00000000..b9a01543 --- /dev/null +++ b/clang-r353983/include/llvm/PassRegistry.h @@ -0,0 +1,97 @@ +//===- llvm/PassRegistry.h - Pass Information Registry ----------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// This file defines PassRegistry, a class that is used in the initialization +// and registration of passes. At application startup, 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/DenseMap.h" +#include "llvm/ADT/StringMap.h" +#include "llvm/ADT/StringRef.h" +#include "llvm/Support/CBindingWrapping.h" +#include "llvm/Support/RWMutex.h" +#include <memory> +#include <vector> + +namespace llvm { + +class PassInfo; +struct PassRegistrationListener; + +/// PassRegistry - This class manages the registration and intitialization of +/// the pass subsystem as application startup, and assists the PassManager +/// in resolving pass dependencies. +/// NOTE: PassRegistry is NOT thread-safe. If you want to use LLVM on multiple +/// threads simultaneously, you will need to use a separate PassRegistry on +/// each thread. +class PassRegistry { + mutable sys::SmartRWMutex<true> Lock; + + /// PassInfoMap - Keep track of the PassInfo object for each registered pass. + using MapType = DenseMap<const void *, const PassInfo *>; + MapType PassInfoMap; + + using StringMapType = StringMap<const PassInfo *>; + StringMapType PassInfoStringMap; + + std::vector<std::unique_ptr<const PassInfo>> ToFree; + std::vector<PassRegistrationListener *> Listeners; + +public: + PassRegistry() = default; + ~PassRegistry(); + + /// getPassRegistry - Access the global registry object, which is + /// automatically initialized at application launch and destroyed by + /// llvm_shutdown. + static PassRegistry *getPassRegistry(); + + /// getPassInfo - Look up a pass' corresponding PassInfo, indexed by the pass' + /// type identifier (&MyPass::ID). + const PassInfo *getPassInfo(const void *TI) const; + + /// getPassInfo - Look up a pass' corresponding PassInfo, indexed by the pass' + /// argument string. + const PassInfo *getPassInfo(StringRef Arg) const; + + /// registerPass - Register a pass (by means of its PassInfo) with the + /// registry. Required in order to use the pass with a PassManager. + void registerPass(const PassInfo &PI, bool ShouldFree = false); + + /// registerAnalysisGroup - Register an analysis group (or a pass implementing + // an analysis group) with the registry. Like registerPass, this is required + // in order for a PassManager to be able to use this group/pass. + void registerAnalysisGroup(const void *InterfaceID, const void *PassID, + PassInfo &Registeree, bool isDefault, + bool ShouldFree = false); + + /// enumerateWith - Enumerate the registered passes, calling the provided + /// PassRegistrationListener's passEnumerate() callback on each of them. + void enumerateWith(PassRegistrationListener *L); + + /// addRegistrationListener - Register the given PassRegistrationListener + /// to receive passRegistered() callbacks whenever a new pass is registered. + void addRegistrationListener(PassRegistrationListener *L); + + /// removeRegistrationListener - Unregister a PassRegistrationListener so that + /// it no longer receives passRegistered() callbacks. + void removeRegistrationListener(PassRegistrationListener *L); +}; + +// Create wrappers for C Binding types (see CBindingWrapping.h). +DEFINE_STDCXX_CONVERSION_FUNCTIONS(PassRegistry, LLVMPassRegistryRef) + +} // end namespace llvm + +#endif // LLVM_PASSREGISTRY_H |
