[AsmPrinter][TLOF] 32-bit MachO support for replacing GOT equivalents
[oota-llvm.git] / include / llvm / CodeGen / GCMetadataPrinter.h
index 1c0665bbd9ad046f18cf7e84934334371066fb05..220847029113858998efe2884619f70f2f28f1bb 100644 (file)
 #include "llvm/CodeGen/GCMetadata.h"
 #include "llvm/CodeGen/GCStrategy.h"
 #include "llvm/Support/Registry.h"
-#include <iosfwd>
-#include <string>
 
 namespace llvm {
-  
-  class GCMetadataPrinter;
-  class raw_ostream;
-  
-  /// GCMetadataPrinterRegistry - The GC assembly printer registry uses all the
-  /// defaults from Registry.
-  typedef Registry<GCMetadataPrinter> GCMetadataPrinterRegistry;
-  
-  /// GCMetadataPrinter - Emits GC metadata as assembly code.
-  /// 
-  class GCMetadataPrinter {
-  public:
-    typedef GCStrategy::list_type list_type;
-    typedef GCStrategy::iterator iterator;
-    
-  private:
-    GCStrategy *S;
-    
-    friend class AsmPrinter;
-    
-  protected:
-    // May only be subclassed.
-    GCMetadataPrinter();
-    
-    // Do not implement.
-    GCMetadataPrinter(const GCMetadataPrinter &);
-    GCMetadataPrinter &operator=(const GCMetadataPrinter &);
-    
-  public:
-    GCStrategy &getStrategy() { return *S; }
-    const Module &getModule() const { return S->getModule(); }
-    
-    /// begin/end - Iterate over the collected function metadata.
-    iterator begin() { return S->begin(); }
-    iterator end()   { return S->end();   }
-    
-    /// beginAssembly/finishAssembly - Emit module metadata as assembly code.
-    virtual void beginAssembly(raw_ostream &OS, AsmPrinter &AP,
-                               const TargetAsmInfo &TAI);
-    
-    virtual void finishAssembly(raw_ostream &OS, AsmPrinter &AP,
-                                const TargetAsmInfo &TAI);
-    
-    virtual ~GCMetadataPrinter();
-  };
-  
+
+class GCMetadataPrinter;
+
+/// GCMetadataPrinterRegistry - The GC assembly printer registry uses all the
+/// defaults from Registry.
+typedef Registry<GCMetadataPrinter> GCMetadataPrinterRegistry;
+
+/// GCMetadataPrinter - Emits GC metadata as assembly code.  Instances are
+/// created, managed, and owned by the AsmPrinter.
+class GCMetadataPrinter {
+private:
+  GCStrategy *S;
+  friend class AsmPrinter;
+
+protected:
+  // May only be subclassed.
+  GCMetadataPrinter();
+
+private:
+  GCMetadataPrinter(const GCMetadataPrinter &) = delete;
+  GCMetadataPrinter &operator=(const GCMetadataPrinter &) = delete;
+
+public:
+  GCStrategy &getStrategy() { return *S; }
+
+  /// Called before the assembly for the module is generated by
+  /// the AsmPrinter (but after target specific hooks.)
+  virtual void beginAssembly(Module &M, GCModuleInfo &Info, AsmPrinter &AP) {}
+  /// Called after the assembly for the module is generated by
+  /// the AsmPrinter (but before target specific hooks)
+  virtual void finishAssembly(Module &M, GCModuleInfo &Info, AsmPrinter &AP) {}
+
+  virtual ~GCMetadataPrinter();
+};
 }
 
 #endif