Collector is the base class for garbage collection code generators.
authorGordon Henriksen <gordonhenriksen@mac.com>
Sat, 29 Sep 2007 02:13:43 +0000 (02:13 +0000)
committerGordon Henriksen <gordonhenriksen@mac.com>
Sat, 29 Sep 2007 02:13:43 +0000 (02:13 +0000)
commit364caf0e19e570d00cfd03d9dd3fcda21fb2e459
tree3112ac858755fdb62fa0c94bed97f99676a67507
parentd070d1e56fbfdad752342838dda39e14582ccad5
Collector is the base class for garbage collection code generators.
This version enhances the previous patch to add root initialization
as discussed here:

http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20070910/053455.html

Collector gives its subclasses control over generic algorithms:

  unsigned NeededSafePoints; //< Bitmask of required safe points.
  bool CustomReadBarriers;   //< Default is to insert loads.
  bool CustomWriteBarriers;  //< Default is to insert stores.
  bool CustomRoots;          //< Default is to pass through to backend.
  bool InitRoots;            //< If set, roots are nulled during lowering.

It also has callbacks which collectors can hook:

  /// If any of the actions are set to Custom, this is expected to
  /// be overriden to create a transform to lower those actions to
  /// LLVM IR.
  virtual Pass *createCustomLoweringPass() const;

  /// beginAssembly/finishAssembly - Emit module metadata as
  /// assembly code.
  virtual void beginAssembly(Module &M, std::ostream &OS,
                             AsmPrinter &AP,
                             const TargetAsmInfo &TAI) const;
  virtual void finishAssembly(Module &M,
                              CollectorModuleMetadata &CMM,
                              std::ostream &OS, AsmPrinter &AP,
                              const TargetAsmInfo &TAI) const;

Various other independent algorithms could be implemented, but were
not necessary for the initial two collectors. Some examples are
listed here:

http://llvm.org/docs/GarbageCollection.html#collector-algos

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@42466 91177308-0d34-0410-b5e6-96231b3b80d8
include/llvm/CodeGen/Collector.h [new file with mode: 0644]
lib/CodeGen/Collector.cpp [new file with mode: 0644]
lib/CodeGen/README.txt