summaryrefslogtreecommitdiff
path: root/include/llvm/CodeGen/GCMetadataPrinter.h
diff options
context:
space:
mode:
authorGordon Henriksen <gordonhenriksen@mac.com>2008-08-17 18:44:35 +0000
committerGordon Henriksen <gordonhenriksen@mac.com>2008-08-17 18:44:35 +0000
commit5eca075b74d62c621b160aa216b4cd50829a2cc7 (patch)
tree5406e0182a3a20726e00eec044bbca1199e673b9 /include/llvm/CodeGen/GCMetadataPrinter.h
parent94fb5f2a7066c427a9d3dac10a33ccbd02aac467 (diff)
downloadllvm-5eca075b74d62c621b160aa216b4cd50829a2cc7.tar.gz
llvm-5eca075b74d62c621b160aa216b4cd50829a2cc7.tar.bz2
llvm-5eca075b74d62c621b160aa216b4cd50829a2cc7.tar.xz
Rename some GC classes so that their roll will hopefully be clearer.
In particular, Collector was confusing to implementors. Several thought that this compile-time class was the place to implement their runtime GC heap. Of course, it doesn't even exist at runtime. Specifically, the renames are: Collector -> GCStrategy CollectorMetadata -> GCFunctionInfo CollectorModuleMetadata -> GCModuleInfo CollectorRegistry -> GCRegistry Function::getCollector -> getGC (setGC, hasGC, clearGC) Several accessors and nested types have also been renamed to be consistent. These changes should be obvious. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@54899 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/CodeGen/GCMetadataPrinter.h')
-rw-r--r--include/llvm/CodeGen/GCMetadataPrinter.h77
1 files changed, 77 insertions, 0 deletions
diff --git a/include/llvm/CodeGen/GCMetadataPrinter.h b/include/llvm/CodeGen/GCMetadataPrinter.h
new file mode 100644
index 0000000000..1ab138adec
--- /dev/null
+++ b/include/llvm/CodeGen/GCMetadataPrinter.h
@@ -0,0 +1,77 @@
+//===-- llvm/CodeGen/GCMetadataPrinter.h - Prints asm GC tables -*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// The abstract base class GCMetadataPrinter supports writing GC metadata tables
+// as assembly code. This is a separate class from GCStrategy in order to allow
+// users of the LLVM JIT to avoid linking with the AsmWriter.
+//
+// Subclasses of GCMetadataPrinter must be registered using the
+// GCMetadataPrinterRegistry. This is separate from the GCStrategy itself
+// because these subclasses are logically plugins for the AsmWriter.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CODEGEN_GCMETADATAPRINTER_H
+#define LLVM_CODEGEN_GCMETADATAPRINTER_H
+
+#include "llvm/CodeGen/GCMetadata.h"
+#include "llvm/CodeGen/GCStrategy.h"
+#include "llvm/Support/Registry.h"
+#include <iosfwd>
+#include <string>
+
+namespace llvm {
+
+ 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.
+ ///
+ 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(std::ostream &OS, AsmPrinter &AP,
+ const TargetAsmInfo &TAI);
+
+ virtual void finishAssembly(std::ostream &OS, AsmPrinter &AP,
+ const TargetAsmInfo &TAI);
+
+ virtual ~GCMetadataPrinter();
+ };
+
+}
+
+#endif