Add a new listener class for things that want to be informed about new
authorChris Lattner <sabre@nondot.org>
Sun, 11 Jul 2004 06:02:59 +0000 (06:02 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 11 Jul 2004 06:02:59 +0000 (06:02 +0000)
targets that are loaded

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@14758 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Target/TargetMachineRegistry.h

index e122e9afd713a86c0c3732b62ce544c820d92718..008b69c1db421b33a4e066161efe50fc509ec27e 100644 (file)
@@ -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)));
+    }
   };
 }