1193323Sed//===-- llvm/CodeGen/GCMetadataPrinter.h - Prints asm GC tables -*- C++ -*-===// 2193323Sed// 3193323Sed// The LLVM Compiler Infrastructure 4193323Sed// 5193323Sed// This file is distributed under the University of Illinois Open Source 6193323Sed// License. See LICENSE.TXT for details. 7193323Sed// 8193323Sed//===----------------------------------------------------------------------===// 9193323Sed// 10193323Sed// The abstract base class GCMetadataPrinter supports writing GC metadata tables 11193323Sed// as assembly code. This is a separate class from GCStrategy in order to allow 12193323Sed// users of the LLVM JIT to avoid linking with the AsmWriter. 13193323Sed// 14193323Sed// Subclasses of GCMetadataPrinter must be registered using the 15193323Sed// GCMetadataPrinterRegistry. This is separate from the GCStrategy itself 16193323Sed// because these subclasses are logically plugins for the AsmWriter. 17193323Sed// 18193323Sed//===----------------------------------------------------------------------===// 19193323Sed 20193323Sed#ifndef LLVM_CODEGEN_GCMETADATAPRINTER_H 21193323Sed#define LLVM_CODEGEN_GCMETADATAPRINTER_H 22193323Sed 23193323Sed#include "llvm/CodeGen/GCMetadata.h" 24193323Sed#include "llvm/CodeGen/GCStrategy.h" 25193323Sed#include "llvm/Support/Registry.h" 26193323Sed 27193323Sednamespace llvm { 28210299Sed 29193323Sed class GCMetadataPrinter; 30210299Sed 31193323Sed /// GCMetadataPrinterRegistry - The GC assembly printer registry uses all the 32193323Sed /// defaults from Registry. 33193323Sed typedef Registry<GCMetadataPrinter> GCMetadataPrinterRegistry; 34210299Sed 35193323Sed /// GCMetadataPrinter - Emits GC metadata as assembly code. 36210299Sed /// 37193323Sed class GCMetadataPrinter { 38193323Sed public: 39193323Sed typedef GCStrategy::list_type list_type; 40193323Sed typedef GCStrategy::iterator iterator; 41210299Sed 42193323Sed private: 43193323Sed GCStrategy *S; 44210299Sed 45193323Sed friend class AsmPrinter; 46210299Sed 47193323Sed protected: 48193323Sed // May only be subclassed. 49193323Sed GCMetadataPrinter(); 50210299Sed 51243830Sdim private: 52243830Sdim GCMetadataPrinter(const GCMetadataPrinter &) LLVM_DELETED_FUNCTION; 53243830Sdim GCMetadataPrinter & 54243830Sdim operator=(const GCMetadataPrinter &) LLVM_DELETED_FUNCTION; 55210299Sed 56193323Sed public: 57193323Sed GCStrategy &getStrategy() { return *S; } 58193323Sed const Module &getModule() const { return S->getModule(); } 59210299Sed 60193323Sed /// begin/end - Iterate over the collected function metadata. 61193323Sed iterator begin() { return S->begin(); } 62193323Sed iterator end() { return S->end(); } 63210299Sed 64193323Sed /// beginAssembly/finishAssembly - Emit module metadata as assembly code. 65206274Srdivacky virtual void beginAssembly(AsmPrinter &AP); 66210299Sed 67206274Srdivacky virtual void finishAssembly(AsmPrinter &AP); 68210299Sed 69193323Sed virtual ~GCMetadataPrinter(); 70193323Sed }; 71210299Sed 72193323Sed} 73193323Sed 74193323Sed#endif 75