//===- llvm/CodeGen/MachinePassRegistry.h -----------------------*- 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 contains the mechanics for machine function pass registries. A // function pass registry (MachinePassRegistry) is auto filled by the static // constructors of MachinePassRegistryNode. Further there is a command line // parser (RegisterPassParser) which listens to each registry for additions // and deletions, so that the appropriate command option is updated. // //===----------------------------------------------------------------------===// #ifndef LLVM_CODEGEN_MACHINEPASSREGISTRY_H #define LLVM_CODEGEN_MACHINEPASSREGISTRY_H #include "llvm/ADT/StringRef.h" #include "llvm/CodeGen/Passes.h" #include "llvm/Support/CommandLine.h" namespace llvm { //===----------------------------------------------------------------------===// /// /// MachinePassRegistryListener - Listener to adds and removals of nodes in /// registration list. /// //===----------------------------------------------------------------------===// template <class PassCtorTy> class MachinePassRegistryListener { … }; //===----------------------------------------------------------------------===// /// /// MachinePassRegistryNode - Machine pass node stored in registration list. /// //===----------------------------------------------------------------------===// template <typename PassCtorTy> class MachinePassRegistryNode { … }; //===----------------------------------------------------------------------===// /// /// MachinePassRegistry - Track the registration of machine passes. /// //===----------------------------------------------------------------------===// template <typename PassCtorTy> class MachinePassRegistry { … }; //===----------------------------------------------------------------------===// /// /// RegisterPassParser class - Handle the addition of new machine passes. /// //===----------------------------------------------------------------------===// template <class RegistryClass> class RegisterPassParser : public MachinePassRegistryListener< typename RegistryClass::FunctionPassCtor>, public cl::parser<typename RegistryClass::FunctionPassCtor> { … }; } // end namespace llvm #endif // LLVM_CODEGEN_MACHINEPASSREGISTRY_H