Skip to content
  • Gordon Henriksen's avatar
    Collector is the base class for garbage collection code generators. · 37ca83d4
    Gordon Henriksen authored
    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
    
    llvm-svn: 42466
    37ca83d4
Loading