diff options
| author | Chris Lattner <sabre@nondot.org> | 2004-07-11 06:02:59 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2004-07-11 06:02:59 +0000 |
| commit | 53d2ac55148b94ddbfe34428f4aeaa8fbe25eb96 (patch) | |
| tree | 00e402e96cb6510697d173d614b73fbb5f90e9d8 | |
| parent | b889c6b26194c7d21bff51d840b680a1c52d298e (diff) | |
| download | bcm5719-llvm-53d2ac55148b94ddbfe34428f4aeaa8fbe25eb96.tar.gz bcm5719-llvm-53d2ac55148b94ddbfe34428f4aeaa8fbe25eb96.zip | |
Add a new listener class for things that want to be informed about new
targets that are loaded
llvm-svn: 14758
| -rw-r--r-- | llvm/include/llvm/Target/TargetMachineRegistry.h | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/llvm/include/llvm/Target/TargetMachineRegistry.h b/llvm/include/llvm/Target/TargetMachineRegistry.h index e122e9afd71..008b69c1db4 100644 --- a/llvm/include/llvm/Target/TargetMachineRegistry.h +++ b/llvm/include/llvm/Target/TargetMachineRegistry.h @@ -58,11 +58,7 @@ namespace llvm { protected: Entry(const char *N, const char *SD, TargetMachine *(*CF)(const Module &, IntrinsicLowering*), - unsigned (*MMF)(const Module &M), unsigned (*JMF)()) - : Name(N), ShortDesc(SD), CtorFn(CF), ModuleMatchQualityFn(MMF), - JITMatchQualityFn(JMF), Next(List) { - List = this; - } + unsigned (*MMF)(const Module &M), unsigned (*JMF)()); private: const Entry *Next; // Next entry in the linked list. }; @@ -89,10 +85,24 @@ namespace llvm { } }; + /// TargetRegistrationListener - This class allows code to listen for targets + /// that are dynamically registered, and be notified of it when they are. + class TargetRegistrationListener { + TargetRegistrationListener **Prev, *Next; + public: + TargetRegistrationListener(); + virtual ~TargetRegistrationListener(); + + TargetRegistrationListener *getNext() const { return Next; } + + virtual void targetRegistered(const TargetMachineRegistry::Entry *E) = 0; + }; + + //===--------------------------------------------------------------------===// /// TargetNameParser - This option can be used to provide a command line /// option to choose among the various registered targets (commonly -march). - class TargetNameParser : + class TargetNameParser : public TargetRegistrationListener, public cl::parser<const TargetMachineRegistry::Entry*> { public: void initialize(cl::Option &O) { @@ -102,6 +112,11 @@ namespace llvm { std::make_pair(E, E->ShortDesc))); cl::parser<const TargetMachineRegistry::Entry*>::initialize(O); } + + virtual void targetRegistered(const TargetMachineRegistry::Entry *E) { + Values.push_back(std::make_pair(E->Name, + std::make_pair(E, E->ShortDesc))); + } }; } |

