Skip to content
  1. Dec 11, 2007
  2. Sep 29, 2007
    • 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