[llvm-commits] CVS: llvm/include/llvm/CodeGen/MachineModuleInfo.h MachineDebugInfo.h

Jim Laskey jlaskey at apple.com
Fri Jan 26 14:15:55 PST 2007


yes indeed.  Give me a few.

-- Jim




On 26-Jan-07, at 06:09 PM, Evan Cheng wrote:

> I assmue llvm-gcc/gcc/llvm-debug.{h|cpp} needs to be updated as  
> well? They are including MachineDebugInfo.h
>
> Evan
>
> On Jan 26, 2007, at 1:38 PM, Jim Laskey wrote:
>
>>
>>
>> Changes in directory llvm/include/llvm/CodeGen:
>>
>> MachineModuleInfo.h added (r1.1)
>> MachineDebugInfo.h (r1.48) removed
>> ---
>> Log message:
>>
>> rename files
>>
>> ---
>> Diffs of the changes:  (+1156 -0)
>>
>>  MachineModuleInfo.h | 1156 +++++++++++++++++++++++++++++++++++++++ 
>> +++++++++++++
>>  1 files changed, 1156 insertions(+)
>>
>>
>> Index: llvm/include/llvm/CodeGen/MachineModuleInfo.h
>> diff -c /dev/null llvm/include/llvm/CodeGen/MachineModuleInfo.h:1.1
>> *** /dev/null	Fri Jan 26 15:38:36 2007
>> --- llvm/include/llvm/CodeGen/MachineModuleInfo.h	Fri Jan 26  
>> 15:38:26 2007
>> ***************
>> *** 0 ****
>> --- 1,1156 ----
>> + //===-- llvm/CodeGen/MachineModuleInfo.h ------------------------ 
>> *- C++ -*-===//
>> + //
>> + //                     The LLVM Compiler Infrastructure
>> + //
>> + // This file was developed by James M. Laskey and is distributed  
>> under
>> + // the University of Illinois Open Source License. See  
>> LICENSE.TXT for details.
>> + //
>> + // 
>> ===------------------------------------------------------------------ 
>> ----===//
>> + //
>> + // Collect meta information for a module.  This information  
>> should be in a
>> + // neutral form that can be used by different debugging and  
>> exception handling
>> + // schemes.
>> + //
>> + // The organization of information is primarily clustered around  
>> the source
>> + // compile units.  The main exception is source line  
>> correspondence where
>> + // inlining may interleave code from various compile units.
>> + //
>> + // The following information can be retrieved from the  
>> MachineModuleInfo.
>> + //
>> + //  -- Source directories - Directories are uniqued based on  
>> their canonical
>> + //     string and assigned a sequential numeric ID (base 1.)
>> + //  -- Source files - Files are also uniqued based on their name  
>> and directory
>> + //     ID.  A file ID is sequential number (base 1.)
>> + //  -- Source line correspondence - A vector of file ID, line#,  
>> column# triples.
>> + //     A DEBUG_LOCATION instruction is generated  by the DAG  
>> Legalizer
>> + //     corresponding to each entry in the source line list.   
>> This allows a debug
>> + //     emitter to generate labels referenced by debug  
>> information tables.
>> + //
>> + // 
>> ===------------------------------------------------------------------ 
>> ----===//
>> +
>> + #ifndef LLVM_CODEGEN_MACHINEMODULEINFO_H
>> + #define LLVM_CODEGEN_MACHINEMODULEINFO_H
>> +
>> + #include "llvm/Support/Dwarf.h"
>> + #include "llvm/Support/DataTypes.h"
>> + #include "llvm/ADT/UniqueVector.h"
>> + #include "llvm/GlobalValue.h"
>> + #include "llvm/Pass.h"
>> +
>> + namespace llvm {
>> +
>> + // 
>> ===------------------------------------------------------------------ 
>> ----===//
>> + // Forward declarations.
>> + class Constant;
>> + class DebugInfoDesc;
>> + class GlobalVariable;
>> + class MachineFunction;
>> + class MachineMove;
>> + class Module;
>> + class PointerType;
>> + class StructType;
>> +
>> + // 
>> ===------------------------------------------------------------------ 
>> ----===//
>> + // Debug info constants.
>> +
>> + enum {
>> +   LLVMDebugVersion = (6 << 16),         // Current version of  
>> debug information.
>> +   LLVMDebugVersion5 = (5 << 16),        // Constant for version 5.
>> +   LLVMDebugVersion4 = (4 << 16),        // Constant for version 4.
>> +   LLVMDebugVersionMask = 0xffff0000     // Mask for version number.
>> + };
>> +
>> + // 
>> ===------------------------------------------------------------------ 
>> ----===//
>> + /// DIVisitor - Subclasses of this class apply steps to each of  
>> the fields in
>> + /// the supplied DebugInfoDesc.
>> + class DIVisitor {
>> + public:
>> +   DIVisitor() {}
>> +   virtual ~DIVisitor() {}
>> +
>> +   /// ApplyToFields - Target the visitor to each field of the  
>> debug information
>> +   /// descriptor.
>> +   void ApplyToFields(DebugInfoDesc *DD);
>> +
>> +   /// Apply - Subclasses override each of these methods to  
>> perform the
>> +   /// appropriate action for the type of field.
>> +   virtual void Apply(int &Field) = 0;
>> +   virtual void Apply(unsigned &Field) = 0;
>> +   virtual void Apply(int64_t &Field) = 0;
>> +   virtual void Apply(uint64_t &Field) = 0;
>> +   virtual void Apply(bool &Field) = 0;
>> +   virtual void Apply(std::string &Field) = 0;
>> +   virtual void Apply(DebugInfoDesc *&Field) = 0;
>> +   virtual void Apply(GlobalVariable *&Field) = 0;
>> +   virtual void Apply(std::vector<DebugInfoDesc *> &Field) = 0;
>> + };
>> +
>> + // 
>> ===------------------------------------------------------------------ 
>> ----===//
>> + /// DebugInfoDesc - This class is the base class for debug info  
>> descriptors.
>> + ///
>> + class DebugInfoDesc {
>> + private:
>> +   unsigned Tag;                         // Content indicator.   
>> Dwarf values are
>> +                                         // used but that does  
>> not limit use to
>> +                                         // Dwarf writers.
>> +
>> + protected:
>> +   DebugInfoDesc(unsigned T) : Tag(T | LLVMDebugVersion) {}
>> +
>> + public:
>> +   virtual ~DebugInfoDesc() {}
>> +
>> +   // Accessors
>> +   unsigned getTag()          const { return Tag &  
>> ~LLVMDebugVersionMask; }
>> +   unsigned getVersion()      const { return Tag &   
>> LLVMDebugVersionMask; }
>> +   void setTag(unsigned T)          { Tag = T | LLVMDebugVersion; }
>> +
>> +   /// TagFromGlobal - Returns the tag number from a debug info  
>> descriptor
>> +   /// GlobalVariable.   Return DIIValid if operand is not an  
>> unsigned int.
>> +   static unsigned TagFromGlobal(GlobalVariable *GV);
>> +
>> +   /// VersionFromGlobal - Returns the version number from a  
>> debug info
>> +   /// descriptor GlobalVariable.  Return DIIValid if operand is  
>> not an unsigned
>> +   /// int.
>> +   static unsigned VersionFromGlobal(GlobalVariable *GV);
>> +
>> +   /// DescFactory - Create an instance of debug info descriptor  
>> based on Tag.
>> +   /// Return NULL if not a recognized Tag.
>> +   static DebugInfoDesc *DescFactory(unsigned Tag);
>> +
>> +   /// getLinkage - get linkage appropriate for this type of  
>> descriptor.
>> +   ///
>> +   virtual GlobalValue::LinkageTypes getLinkage() const;
>> +
>> +   // 
>> ===------------------------------------------------------------------ 
>> --===//
>> +   // Subclasses should supply the following static methods.
>> +
>> +   // Implement isa/cast/dyncast.
>> +   static bool classof(const DebugInfoDesc *) { return true; }
>> +
>> +   // 
>> ===------------------------------------------------------------------ 
>> --===//
>> +   // Subclasses should supply the following virtual methods.
>> +
>> +   /// ApplyToFields - Target the vistor to the fields of the  
>> descriptor.
>> +   ///
>> +   virtual void ApplyToFields(DIVisitor *Visitor);
>> +
>> +   /// getDescString - Return a string used to compose global  
>> names and labels.
>> +   ///
>> +   virtual const char *getDescString() const = 0;
>> +
>> +   /// getTypeString - Return a string used to label this  
>> descriptor's type.
>> +   ///
>> +   virtual const char *getTypeString() const = 0;
>> +
>> + #ifndef NDEBUG
>> +   virtual void dump() = 0;
>> + #endif
>> + };
>> +
>> + // 
>> ===------------------------------------------------------------------ 
>> ----===//
>> + /// AnchorDesc - Descriptors of this class act as markers for  
>> identifying
>> + /// descriptors of certain groups.
>> + class AnchoredDesc;
>> + class AnchorDesc : public DebugInfoDesc {
>> + private:
>> +   unsigned AnchorTag;                   // Tag number of  
>> descriptors anchored
>> +                                         // by this object.
>> +
>> + public:
>> +   AnchorDesc();
>> +   AnchorDesc(AnchoredDesc *D);
>> +
>> +   // Accessors
>> +   unsigned getAnchorTag() const { return AnchorTag; }
>> +
>> +   // Implement isa/cast/dyncast.
>> +   static bool classof(const AnchorDesc *) { return true; }
>> +   static bool classof(const DebugInfoDesc *D);
>> +
>> +   /// getLinkage - get linkage appropriate for this type of  
>> descriptor.
>> +   ///
>> +   virtual GlobalValue::LinkageTypes getLinkage() const;
>> +
>> +   /// ApplyToFields - Target the visitor to the fields of the  
>> AnchorDesc.
>> +   ///
>> +   virtual void ApplyToFields(DIVisitor *Visitor);
>> +
>> +   /// getDescString - Return a string used to compose global  
>> names and labels.
>> +   ///
>> +   virtual const char *getDescString() const;
>> +
>> +   /// getTypeString - Return a string used to label this  
>> descriptor's type.
>> +   ///
>> +   virtual const char *getTypeString() const;
>> +
>> + #ifndef NDEBUG
>> +   virtual void dump();
>> + #endif
>> + };
>> +
>> + // 
>> ===------------------------------------------------------------------ 
>> ----===//
>> + /// AnchoredDesc - This class manages anchors for a variety of  
>> top level
>> + /// descriptors.
>> + class AnchoredDesc : public DebugInfoDesc {
>> + private:
>> +   DebugInfoDesc *Anchor;                // Anchor for all  
>> descriptors of the
>> +                                         // same type.
>> +
>> + protected:
>> +
>> +   AnchoredDesc(unsigned T);
>> +
>> + public:
>> +   // Accessors.
>> +   AnchorDesc *getAnchor() const { return static_cast<AnchorDesc  
>> *>(Anchor); }
>> +   void setAnchor(AnchorDesc *A) { Anchor =  
>> static_cast<DebugInfoDesc *>(A); }
>> +
>> +   // 
>> ===------------------------------------------------------------------ 
>> --===//
>> +   // Subclasses should supply the following virtual methods.
>> +
>> +   /// getAnchorString - Return a string used to label  
>> descriptor's anchor.
>> +   ///
>> +   virtual const char *getAnchorString() const = 0;
>> +
>> +   /// ApplyToFields - Target the visitor to the fields of the  
>> AnchoredDesc.
>> +   ///
>> +   virtual void ApplyToFields(DIVisitor *Visitor);
>> + };
>> +
>> + // 
>> ===------------------------------------------------------------------ 
>> ----===//
>> + /// CompileUnitDesc - This class packages debug information  
>> associated with a
>> + /// source/header file.
>> + class CompileUnitDesc : public AnchoredDesc {
>> + private:
>> +   unsigned Language;                    // Language number (ex.  
>> DW_LANG_C89.)
>> +   std::string FileName;                 // Source file name.
>> +   std::string Directory;                // Source file directory.
>> +   std::string Producer;                 // Compiler string.
>> +
>> + public:
>> +   CompileUnitDesc();
>> +
>> +
>> +   // Accessors
>> +   unsigned getLanguage()                  const { return  
>> Language; }
>> +   const std::string &getFileName()        const { return  
>> FileName; }
>> +   const std::string &getDirectory()       const { return  
>> Directory; }
>> +   const std::string &getProducer()        const { return  
>> Producer; }
>> +   void setLanguage(unsigned L)                  { Language = L; }
>> +   void setFileName(const std::string &FN)       { FileName = FN; }
>> +   void setDirectory(const std::string &D)       { Directory = D; }
>> +   void setProducer(const std::string &P)        { Producer = P; }
>> +
>> +   // FIXME - Need translation unit getter/setter.
>> +
>> +   // Implement isa/cast/dyncast.
>> +   static bool classof(const CompileUnitDesc *) { return true; }
>> +   static bool classof(const DebugInfoDesc *D);
>> +
>> +   /// ApplyToFields - Target the visitor to the fields of the  
>> CompileUnitDesc.
>> +   ///
>> +   virtual void ApplyToFields(DIVisitor *Visitor);
>> +
>> +   /// getDescString - Return a string used to compose global  
>> names and labels.
>> +   ///
>> +   virtual const char *getDescString() const;
>> +
>> +   /// getTypeString - Return a string used to label this  
>> descriptor's type.
>> +   ///
>> +   virtual const char *getTypeString() const;
>> +
>> +   /// getAnchorString - Return a string used to label this  
>> descriptor's anchor.
>> +   ///
>> +   static const char *AnchorString;
>> +   virtual const char *getAnchorString() const;
>> +
>> + #ifndef NDEBUG
>> +   virtual void dump();
>> + #endif
>> + };
>> +
>> + // 
>> ===------------------------------------------------------------------ 
>> ----===//
>> + /// TypeDesc - This class packages debug information associated  
>> with a type.
>> + ///
>> + class TypeDesc : public DebugInfoDesc {
>> + private:
>> +   enum {
>> +     FlagPrivate    = 1 << 0,
>> +     FlagProtected  = 1 << 1
>> +   };
>> +   DebugInfoDesc *Context;               // Context debug  
>> descriptor.
>> +   std::string Name;                     // Type name (may be  
>> empty.)
>> +   DebugInfoDesc *File;                  // Defined compile unit  
>> (may be NULL.)
>> +   unsigned Line;                        // Defined line# (may be  
>> zero.)
>> +   uint64_t Size;                        // Type bit size (may be  
>> zero.)
>> +   uint64_t Align;                       // Type bit alignment  
>> (may be zero.)
>> +   uint64_t Offset;                      // Type bit offset (may  
>> be zero.)
>> +   unsigned Flags;                       // Miscellaneous flags.
>> +
>> + public:
>> +   TypeDesc(unsigned T);
>> +
>> +   // Accessors
>> +   DebugInfoDesc *getContext()                const { return  
>> Context; }
>> +   const std::string &getName()               const { return Name; }
>> +   CompileUnitDesc *getFile() const {
>> +     return static_cast<CompileUnitDesc *>(File);
>> +   }
>> +   unsigned getLine()                         const { return Line; }
>> +   uint64_t getSize()                         const { return Size; }
>> +   uint64_t getAlign()                        const { return  
>> Align; }
>> +   uint64_t getOffset()                       const { return  
>> Offset; }
>> +   bool isPrivate() const {
>> +     return (Flags & FlagPrivate) != 0;
>> +   }
>> +   bool isProtected() const {
>> +     return (Flags & FlagProtected) != 0;
>> +   }
>> +   void setContext(DebugInfoDesc *C)                { Context = C; }
>> +   void setName(const std::string &N)               { Name = N; }
>> +   void setFile(CompileUnitDesc *U) {
>> +     File = static_cast<DebugInfoDesc *>(U);
>> +   }
>> +   void setLine(unsigned L)                         { Line = L; }
>> +   void setSize(uint64_t S)                         { Size = S; }
>> +   void setAlign(uint64_t A)                        { Align = A; }
>> +   void setOffset(uint64_t O)                       { Offset = O; }
>> +   void setIsPrivate()                              { Flags |=  
>> FlagPrivate; }
>> +   void setIsProtected()                            { Flags |=  
>> FlagProtected; }
>> +
>> +   /// ApplyToFields - Target the visitor to the fields of the  
>> TypeDesc.
>> +   ///
>> +   virtual void ApplyToFields(DIVisitor *Visitor);
>> +
>> +   /// getDescString - Return a string used to compose global  
>> names and labels.
>> +   ///
>> +   virtual const char *getDescString() const;
>> +
>> +   /// getTypeString - Return a string used to label this  
>> descriptor's type.
>> +   ///
>> +   virtual const char *getTypeString() const;
>> +
>> + #ifndef NDEBUG
>> +   virtual void dump();
>> + #endif
>> + };
>> +
>> + // 
>> ===------------------------------------------------------------------ 
>> ----===//
>> + /// BasicTypeDesc - This class packages debug information  
>> associated with a
>> + /// basic type (eg. int, bool, double.)
>> + class BasicTypeDesc : public TypeDesc {
>> + private:
>> +   unsigned Encoding;                    // Type encoding.
>> +
>> + public:
>> +   BasicTypeDesc();
>> +
>> +   // Accessors
>> +   unsigned getEncoding()                     const { return  
>> Encoding; }
>> +   void setEncoding(unsigned E)                     { Encoding =  
>> E; }
>> +
>> +   // Implement isa/cast/dyncast.
>> +   static bool classof(const BasicTypeDesc *) { return true; }
>> +   static bool classof(const DebugInfoDesc *D);
>> +
>> +   /// ApplyToFields - Target the visitor to the fields of the  
>> BasicTypeDesc.
>> +   ///
>> +   virtual void ApplyToFields(DIVisitor *Visitor);
>> +
>> +   /// getDescString - Return a string used to compose global  
>> names and labels.
>> +   ///
>> +   virtual const char *getDescString() const;
>> +
>> +   /// getTypeString - Return a string used to label this  
>> descriptor's type.
>> +   ///
>> +   virtual const char *getTypeString() const;
>> +
>> + #ifndef NDEBUG
>> +   virtual void dump();
>> + #endif
>> + };
>> +
>> +
>> + // 
>> ===------------------------------------------------------------------ 
>> ----===//
>> + /// DerivedTypeDesc - This class packages debug information  
>> associated with a
>> + /// derived types (eg., typedef, pointer, reference.)
>> + class DerivedTypeDesc : public TypeDesc {
>> + private:
>> +   DebugInfoDesc *FromType;              // Type derived from.
>> +
>> + public:
>> +   DerivedTypeDesc(unsigned T);
>> +
>> +   // Accessors
>> +   TypeDesc *getFromType() const {
>> +     return static_cast<TypeDesc *>(FromType);
>> +   }
>> +   void setFromType(TypeDesc *F) {
>> +     FromType = static_cast<DebugInfoDesc *>(F);
>> +   }
>> +
>> +   // Implement isa/cast/dyncast.
>> +   static bool classof(const DerivedTypeDesc *) { return true; }
>> +   static bool classof(const DebugInfoDesc *D);
>> +
>> +   /// ApplyToFields - Target the visitor to the fields of the  
>> DerivedTypeDesc.
>> +   ///
>> +   virtual void ApplyToFields(DIVisitor *Visitor);
>> +
>> +   /// getDescString - Return a string used to compose global  
>> names and labels.
>> +   ///
>> +   virtual const char *getDescString() const;
>> +
>> +   /// getTypeString - Return a string used to label this  
>> descriptor's type.
>> +   ///
>> +   virtual const char *getTypeString() const;
>> +
>> + #ifndef NDEBUG
>> +   virtual void dump();
>> + #endif
>> + };
>> +
>> + // 
>> ===------------------------------------------------------------------ 
>> ----===//
>> + /// CompositeTypeDesc - This class packages debug information  
>> associated with a
>> + /// array/struct types (eg., arrays, struct, union, enums.)
>> + class CompositeTypeDesc : public DerivedTypeDesc {
>> + private:
>> +   std::vector<DebugInfoDesc *> Elements;// Information used to  
>> compose type.
>> +
>> + public:
>> +   CompositeTypeDesc(unsigned T);
>> +
>> +   // Accessors
>> +   std::vector<DebugInfoDesc *> &getElements() { return Elements; }
>> +
>> +   // Implement isa/cast/dyncast.
>> +   static bool classof(const CompositeTypeDesc *) { return true; }
>> +   static bool classof(const DebugInfoDesc *D);
>> +
>> +   /// ApplyToFields - Target the visitor to the fields of the  
>> CompositeTypeDesc.
>> +   ///
>> +   virtual void ApplyToFields(DIVisitor *Visitor);
>> +
>> +   /// getDescString - Return a string used to compose global  
>> names and labels.
>> +   ///
>> +   virtual const char *getDescString() const;
>> +
>> +   /// getTypeString - Return a string used to label this  
>> descriptor's type.
>> +   ///
>> +   virtual const char *getTypeString() const;
>> +
>> + #ifndef NDEBUG
>> +   virtual void dump();
>> + #endif
>> + };
>> +
>> + // 
>> ===------------------------------------------------------------------ 
>> ----===//
>> + /// SubrangeDesc - This class packages debug information  
>> associated with integer
>> + /// value ranges.
>> + class SubrangeDesc : public DebugInfoDesc {
>> + private:
>> +   int64_t Lo;                           // Low value of range.
>> +   int64_t Hi;                           // High value of range.
>> +
>> + public:
>> +   SubrangeDesc();
>> +
>> +   // Accessors
>> +   int64_t getLo()                            const { return Lo; }
>> +   int64_t getHi()                            const { return Hi; }
>> +   void setLo(int64_t L)                            { Lo = L; }
>> +   void setHi(int64_t H)                            { Hi = H; }
>> +
>> +   // Implement isa/cast/dyncast.
>> +   static bool classof(const SubrangeDesc *) { return true; }
>> +   static bool classof(const DebugInfoDesc *D);
>> +
>> +   /// ApplyToFields - Target the visitor to the fields of the  
>> SubrangeDesc.
>> +   ///
>> +   virtual void ApplyToFields(DIVisitor *Visitor);
>> +
>> +   /// getDescString - Return a string used to compose global  
>> names and labels.
>> +   ///
>> +   virtual const char *getDescString() const;
>> +
>> +   /// getTypeString - Return a string used to label this  
>> descriptor's type.
>> +   ///
>> +   virtual const char *getTypeString() const;
>> +
>> + #ifndef NDEBUG
>> +   virtual void dump();
>> + #endif
>> + };
>> +
>> + // 
>> ===------------------------------------------------------------------ 
>> ----===//
>> + /// EnumeratorDesc - This class packages debug information  
>> associated with
>> + /// named integer constants.
>> + class EnumeratorDesc : public DebugInfoDesc {
>> + private:
>> +   std::string Name;                     // Enumerator name.
>> +   int64_t Value;                        // Enumerator value.
>> +
>> + public:
>> +   EnumeratorDesc();
>> +
>> +   // Accessors
>> +   const std::string &getName()               const { return Name; }
>> +   int64_t getValue()                         const { return  
>> Value; }
>> +   void setName(const std::string &N)               { Name = N; }
>> +   void setValue(int64_t V)                         { Value = V; }
>> +
>> +   // Implement isa/cast/dyncast.
>> +   static bool classof(const EnumeratorDesc *) { return true; }
>> +   static bool classof(const DebugInfoDesc *D);
>> +
>> +   /// ApplyToFields - Target the visitor to the fields of the  
>> EnumeratorDesc.
>> +   ///
>> +   virtual void ApplyToFields(DIVisitor *Visitor);
>> +
>> +   /// getDescString - Return a string used to compose global  
>> names and labels.
>> +   ///
>> +   virtual const char *getDescString() const;
>> +
>> +   /// getTypeString - Return a string used to label this  
>> descriptor's type.
>> +   ///
>> +   virtual const char *getTypeString() const;
>> +
>> + #ifndef NDEBUG
>> +   virtual void dump();
>> + #endif
>> + };
>> +
>> + // 
>> ===------------------------------------------------------------------ 
>> ----===//
>> + /// VariableDesc - This class packages debug information  
>> associated with a
>> + /// subprogram variable.
>> + ///
>> + class VariableDesc : public DebugInfoDesc {
>> + private:
>> +   DebugInfoDesc *Context;               // Context debug  
>> descriptor.
>> +   std::string Name;                     // Type name (may be  
>> empty.)
>> +   DebugInfoDesc *File;                  // Defined compile unit  
>> (may be NULL.)
>> +   unsigned Line;                        // Defined line# (may be  
>> zero.)
>> +   DebugInfoDesc *TyDesc;                // Type of variable.
>> +
>> + public:
>> +   VariableDesc(unsigned T);
>> +
>> +   // Accessors
>> +   DebugInfoDesc *getContext()                const { return  
>> Context; }
>> +   const std::string &getName()               const { return Name; }
>> +   CompileUnitDesc *getFile() const {
>> +     return static_cast<CompileUnitDesc *>(File);
>> +   }
>> +   unsigned getLine()                         const { return Line; }
>> +   TypeDesc *getType() const {
>> +     return static_cast<TypeDesc *>(TyDesc);
>> +   }
>> +   void setContext(DebugInfoDesc *C)                { Context = C; }
>> +   void setName(const std::string &N)               { Name = N; }
>> +   void setFile(CompileUnitDesc *U) {
>> +     File = static_cast<DebugInfoDesc *>(U);
>> +   }
>> +   void setLine(unsigned L)                         { Line = L; }
>> +   void setType(TypeDesc *T) {
>> +     TyDesc = static_cast<DebugInfoDesc *>(T);
>> +   }
>> +
>> +   // Implement isa/cast/dyncast.
>> +   static bool classof(const VariableDesc *) { return true; }
>> +   static bool classof(const DebugInfoDesc *D);
>> +
>> +   /// ApplyToFields - Target the visitor to the fields of the  
>> VariableDesc.
>> +   ///
>> +   virtual void ApplyToFields(DIVisitor *Visitor);
>> +
>> +   /// getDescString - Return a string used to compose global  
>> names and labels.
>> +   ///
>> +   virtual const char *getDescString() const;
>> +
>> +   /// getTypeString - Return a string used to label this  
>> descriptor's type.
>> +   ///
>> +   virtual const char *getTypeString() const;
>> +
>> + #ifndef NDEBUG
>> +   virtual void dump();
>> + #endif
>> + };
>> +
>> + // 
>> ===------------------------------------------------------------------ 
>> ----===//
>> + /// GlobalDesc - This class is the base descriptor for global  
>> functions and
>> + /// variables.
>> + class GlobalDesc : public AnchoredDesc {
>> + private:
>> +   DebugInfoDesc *Context;               // Context debug  
>> descriptor.
>> +   std::string Name;                     // Global name.
>> +   std::string FullName;                 // Fully qualified name.
>> +   std::string LinkageName;              // Name for binding to  
>> MIPS linkage.
>> +   DebugInfoDesc *File;                  // Defined compile unit  
>> (may be NULL.)
>> +   unsigned Line;                        // Defined line# (may be  
>> zero.)
>> +   DebugInfoDesc *TyDesc;                // Type debug descriptor.
>> +   bool IsStatic;                        // Is the global a static.
>> +   bool IsDefinition;                    // Is the global defined  
>> in context.
>> +
>> + protected:
>> +   GlobalDesc(unsigned T);
>> +
>> + public:
>> +   // Accessors
>> +   DebugInfoDesc *getContext()                const { return  
>> Context; }
>> +   const std::string &getName()               const { return Name; }
>> +   const std::string &getFullName()           const { return  
>> FullName; }
>> +   const std::string &getLinkageName()        const { return  
>> LinkageName; }
>> +   CompileUnitDesc *getFile() const {
>> +     return static_cast<CompileUnitDesc *>(File);
>> +   }
>> +   unsigned getLine()                         const { return Line; }
>> +   TypeDesc *getType() const {
>> +     return static_cast<TypeDesc *>(TyDesc);
>> +   }
>> +   bool isStatic()                            const { return  
>> IsStatic; }
>> +   bool isDefinition()                        const { return  
>> IsDefinition; }
>> +   void setContext(DebugInfoDesc *C)                { Context = C; }
>> +   void setName(const std::string &N)               { Name = N; }
>> +   void setFullName(const std::string &N)           { FullName =  
>> N; }
>> +   void setLinkageName(const std::string &N)        { LinkageName  
>> = N; }
>> +   void setFile(CompileUnitDesc *U) {
>> +     File = static_cast<DebugInfoDesc *>(U);
>> +   }
>> +   void setLine(unsigned L)                         { Line = L; }
>> +   void setType(TypeDesc *T) {
>> +     TyDesc = static_cast<DebugInfoDesc *>(T);
>> +   }
>> +   void setIsStatic(bool IS)                        { IsStatic =  
>> IS; }
>> +   void setIsDefinition(bool ID)                     
>> { IsDefinition = ID; }
>> +
>> +   /// ApplyToFields - Target the visitor to the fields of the  
>> GlobalDesc.
>> +   ///
>> +   virtual void ApplyToFields(DIVisitor *Visitor);
>> + };
>> +
>> + // 
>> ===------------------------------------------------------------------ 
>> ----===//
>> + /// GlobalVariableDesc - This class packages debug information  
>> associated with a
>> + /// GlobalVariable.
>> + class GlobalVariableDesc : public GlobalDesc {
>> + private:
>> +   GlobalVariable *Global;               // llvm global.
>> +
>> + public:
>> +   GlobalVariableDesc();
>> +
>> +   // Accessors.
>> +   GlobalVariable *getGlobalVariable()        const { return  
>> Global; }
>> +   void setGlobalVariable(GlobalVariable *GV)       { Global = GV; }
>> +
>> +   // Implement isa/cast/dyncast.
>> +   static bool classof(const GlobalVariableDesc *) { return true; }
>> +   static bool classof(const DebugInfoDesc *D);
>> +
>> +   /// ApplyToFields - Target the visitor to the fields of the
>> +   /// GlobalVariableDesc.
>> +   virtual void ApplyToFields(DIVisitor *Visitor);
>> +
>> +   /// getDescString - Return a string used to compose global  
>> names and labels.
>> +   ///
>> +   virtual const char *getDescString() const;
>> +
>> +   /// getTypeString - Return a string used to label this  
>> descriptor's type.
>> +   ///
>> +   virtual const char *getTypeString() const;
>> +
>> +   /// getAnchorString - Return a string used to label this  
>> descriptor's anchor.
>> +   ///
>> +   static const char *AnchorString;
>> +   virtual const char *getAnchorString() const;
>> +
>> + #ifndef NDEBUG
>> +   virtual void dump();
>> + #endif
>> + };
>> +
>> + // 
>> ===------------------------------------------------------------------ 
>> ----===//
>> + /// SubprogramDesc - This class packages debug information  
>> associated with a
>> + /// subprogram/function.
>> + class SubprogramDesc : public GlobalDesc {
>> + private:
>> +
>> + public:
>> +   SubprogramDesc();
>> +
>> +   // Accessors
>> +
>> +   // Implement isa/cast/dyncast.
>> +   static bool classof(const SubprogramDesc *) { return true; }
>> +   static bool classof(const DebugInfoDesc *D);
>> +
>> +   /// ApplyToFields - Target the visitor to the fields of the  
>> SubprogramDesc.
>> +   ///
>> +   virtual void ApplyToFields(DIVisitor *Visitor);
>> +
>> +   /// getDescString - Return a string used to compose global  
>> names and labels.
>> +   ///
>> +   virtual const char *getDescString() const;
>> +
>> +   /// getTypeString - Return a string used to label this  
>> descriptor's type.
>> +   ///
>> +   virtual const char *getTypeString() const;
>> +
>> +   /// getAnchorString - Return a string used to label this  
>> descriptor's anchor.
>> +   ///
>> +   static const char *AnchorString;
>> +   virtual const char *getAnchorString() const;
>> +
>> + #ifndef NDEBUG
>> +   virtual void dump();
>> + #endif
>> + };
>> +
>> + // 
>> ===------------------------------------------------------------------ 
>> ----===//
>> + /// BlockDesc - This descriptor groups variables and blocks  
>> nested in a block.
>> + ///
>> + class BlockDesc : public DebugInfoDesc {
>> + private:
>> +   DebugInfoDesc *Context;               // Context debug  
>> descriptor.
>> +
>> + public:
>> +   BlockDesc();
>> +
>> +   // Accessors
>> +   DebugInfoDesc *getContext()                const { return  
>> Context; }
>> +   void setContext(DebugInfoDesc *C)                { Context = C; }
>> +
>> +   // Implement isa/cast/dyncast.
>> +   static bool classof(const BlockDesc *) { return true; }
>> +   static bool classof(const DebugInfoDesc *D);
>> +
>> +   /// ApplyToFields - Target the visitor to the fields of the  
>> BlockDesc.
>> +   ///
>> +   virtual void ApplyToFields(DIVisitor *Visitor);
>> +
>> +   /// getDescString - Return a string used to compose global  
>> names and labels.
>> +   ///
>> +   virtual const char *getDescString() const;
>> +
>> +   /// getTypeString - Return a string used to label this  
>> descriptor's type.
>> +   ///
>> +   virtual const char *getTypeString() const;
>> +
>> + #ifndef NDEBUG
>> +   virtual void dump();
>> + #endif
>> + };
>> +
>> + // 
>> ===------------------------------------------------------------------ 
>> ----===//
>> + /// DIDeserializer - This class is responsible for casting  
>> GlobalVariables
>> + /// into DebugInfoDesc objects.
>> + class DIDeserializer {
>> + private:
>> +   std::map<GlobalVariable *, DebugInfoDesc *> GlobalDescs;
>> +                                         // Previously defined  
>> gloabls.
>> +
>> + public:
>> +   DIDeserializer() {}
>> +   ~DIDeserializer() {}
>> +
>> +   /// Deserialize - Reconstitute a GlobalVariable into it's  
>> component
>> +   /// DebugInfoDesc objects.
>> +   DebugInfoDesc *Deserialize(Value *V);
>> +   DebugInfoDesc *Deserialize(GlobalVariable *GV);
>> + };
>> +
>> + // 
>> ===------------------------------------------------------------------ 
>> ----===//
>> + /// DISerializer - This class is responsible for casting  
>> DebugInfoDesc objects
>> + /// into GlobalVariables.
>> + class DISerializer {
>> + private:
>> +   Module *M;                            // Definition space module.
>> +   PointerType *StrPtrTy;                // A "sbyte *" type.   
>> Created lazily.
>> +   PointerType *EmptyStructPtrTy;        // A "{ }*" type.   
>> Created lazily.
>> +   std::map<unsigned, StructType *> TagTypes;
>> +                                         // Types per Tag.   
>> Created lazily.
>> +   std::map<DebugInfoDesc *, GlobalVariable *> DescGlobals;
>> +                                         // Previously defined  
>> descriptors.
>> +   std::map<const std::string, Constant *> StringCache;
>> +                                         // Previously defined  
>> strings.
>> +
>> + public:
>> +   DISerializer()
>> +   : M(NULL)
>> +   , StrPtrTy(NULL)
>> +   , EmptyStructPtrTy(NULL)
>> +   , TagTypes()
>> +   , DescGlobals()
>> +   , StringCache()
>> +   {}
>> +   ~DISerializer() {}
>> +
>> +   // Accessors
>> +   Module *getModule()        const { return M; };
>> +   void setModule(Module *module)  { M = module; }
>> +
>> +   /// getStrPtrType - Return a "sbyte *" type.
>> +   ///
>> +   const PointerType *getStrPtrType();
>> +
>> +   /// getEmptyStructPtrType - Return a "{ }*" type.
>> +   ///
>> +   const PointerType *getEmptyStructPtrType();
>> +
>> +   /// getTagType - Return the type describing the specified  
>> descriptor (via
>> +   /// tag.)
>> +   const StructType *getTagType(DebugInfoDesc *DD);
>> +
>> +   /// getString - Construct the string as constant string global.
>> +   ///
>> +   Constant *getString(const std::string &String);
>> +
>> +   /// Serialize - Recursively cast the specified descriptor into a
>> +   /// GlobalVariable so that it can be serialized to a .bc  
>> or .ll file.
>> +   GlobalVariable *Serialize(DebugInfoDesc *DD);
>> + };
>> +
>> + // 
>> ===------------------------------------------------------------------ 
>> ----===//
>> + /// DIVerifier - This class is responsible for verifying the  
>> given network of
>> + /// GlobalVariables are valid as DebugInfoDesc objects.
>> + class DIVerifier {
>> + private:
>> +   enum {
>> +     Unknown = 0,
>> +     Invalid,
>> +     Valid
>> +   };
>> +   std::map<GlobalVariable *, unsigned> Validity;// Tracks prior  
>> results.
>> +   std::map<unsigned, unsigned> Counts;  // Count of fields per  
>> Tag type.
>> +
>> + public:
>> +   DIVerifier()
>> +   : Validity()
>> +   , Counts()
>> +   {}
>> +   ~DIVerifier() {}
>> +
>> +   /// Verify - Return true if the GlobalVariable appears to be a  
>> valid
>> +   /// serialization of a DebugInfoDesc.
>> +   bool Verify(Value *V);
>> +   bool Verify(GlobalVariable *GV);
>> + };
>> +
>> + // 
>> ===------------------------------------------------------------------ 
>> ----===//
>> + /// SourceLineInfo - This class is used to record source line  
>> correspondence.
>> + ///
>> + class SourceLineInfo {
>> + private:
>> +   unsigned Line;                        // Source line number.
>> +   unsigned Column;                      // Source column.
>> +   unsigned SourceID;                    // Source ID number.
>> +   unsigned LabelID;                     // Label in code ID number.
>> +
>> + public:
>> +   SourceLineInfo(unsigned L, unsigned C, unsigned S, unsigned I)
>> +   : Line(L), Column(C), SourceID(S), LabelID(I) {}
>> +
>> +   // Accessors
>> +   unsigned getLine()     const { return Line; }
>> +   unsigned getColumn()   const { return Column; }
>> +   unsigned getSourceID() const { return SourceID; }
>> +   unsigned getLabelID()  const { return LabelID; }
>> + };
>> +
>> + // 
>> ===------------------------------------------------------------------ 
>> ----===//
>> + /// SourceFileInfo - This class is used to track source  
>> information.
>> + ///
>> + class SourceFileInfo {
>> + private:
>> +   unsigned DirectoryID;                 // Directory ID number.
>> +   std::string Name;                     // File name (not  
>> including directory.)
>> +
>> + public:
>> +   SourceFileInfo(unsigned D, const std::string &N) : DirectoryID 
>> (D), Name(N) {}
>> +
>> +   // Accessors
>> +   unsigned getDirectoryID()    const { return DirectoryID; }
>> +   const std::string &getName() const { return Name; }
>> +
>> +   /// operator== - Used by UniqueVector to locate entry.
>> +   ///
>> +   bool operator==(const SourceFileInfo &SI) const {
>> +     return getDirectoryID() == SI.getDirectoryID() && getName()  
>> == SI.getName();
>> +   }
>> +
>> +   /// operator< - Used by UniqueVector to locate entry.
>> +   ///
>> +   bool operator<(const SourceFileInfo &SI) const {
>> +     return getDirectoryID() < SI.getDirectoryID() ||
>> +           (getDirectoryID() == SI.getDirectoryID() && getName()  
>> < SI.getName());
>> +   }
>> + };
>> +
>> + // 
>> ===------------------------------------------------------------------ 
>> ----===//
>> + /// DebugVariable - This class is used to track local variable  
>> information.
>> + ///
>> + class DebugVariable {
>> + private:
>> +   VariableDesc *Desc;                   // Variable Descriptor.
>> +   unsigned FrameIndex;                  // Variable frame index.
>> +
>> + public:
>> +   DebugVariable(VariableDesc *D, unsigned I)
>> +   : Desc(D)
>> +   , FrameIndex(I)
>> +   {}
>> +
>> +   // Accessors.
>> +   VariableDesc *getDesc()  const { return Desc; }
>> +   unsigned getFrameIndex() const { return FrameIndex; }
>> + };
>> +
>> + // 
>> ===------------------------------------------------------------------ 
>> ----===//
>> + /// DebugScope - This class is used to track scope information.
>> + ///
>> + class DebugScope {
>> + private:
>> +   DebugScope *Parent;                   // Parent to this scope.
>> +   DebugInfoDesc *Desc;                  // Debug info descriptor  
>> for scope.
>> +                                         // Either subprogram or  
>> block.
>> +   unsigned StartLabelID;                // Label ID of the  
>> beginning of scope.
>> +   unsigned EndLabelID;                  // Label ID of the end  
>> of scope.
>> +   std::vector<DebugScope *> Scopes;     // Scopes defined in scope.
>> +   std::vector<DebugVariable *> Variables;// Variables declared  
>> in scope.
>> +
>> + public:
>> +   DebugScope(DebugScope *P, DebugInfoDesc *D)
>> +   : Parent(P)
>> +   , Desc(D)
>> +   , StartLabelID(0)
>> +   , EndLabelID(0)
>> +   , Scopes()
>> +   , Variables()
>> +   {}
>> +   ~DebugScope();
>> +
>> +   // Accessors.
>> +   DebugScope *getParent()        const { return Parent; }
>> +   DebugInfoDesc *getDesc()       const { return Desc; }
>> +   unsigned getStartLabelID()     const { return StartLabelID; }
>> +   unsigned getEndLabelID()       const { return EndLabelID; }
>> +   std::vector<DebugScope *> &getScopes() { return Scopes; }
>> +   std::vector<DebugVariable *> &getVariables() { return  
>> Variables; }
>> +   void setStartLabelID(unsigned S) { StartLabelID = S; }
>> +   void setEndLabelID(unsigned E)   { EndLabelID = E; }
>> +
>> +   /// AddScope - Add a scope to the scope.
>> +   ///
>> +   void AddScope(DebugScope *S) { Scopes.push_back(S); }
>> +
>> +   /// AddVariable - Add a variable to the scope.
>> +   ///
>> +   void AddVariable(DebugVariable *V) { Variables.push_back(V); }
>> + };
>> +
>> + // 
>> ===------------------------------------------------------------------ 
>> ----===//
>> + /// MachineModuleInfo - This class contains meta information  
>> specific to a
>> + /// module.  Queries can be made by different debugging and  
>> exception handling
>> + /// schemes and reformated for specific use.
>> + ///
>> + class MachineModuleInfo : public ImmutablePass {
>> + private:
>> +   // Use the same deserializer/verifier for the module.
>> +   DIDeserializer DR;
>> +   DIVerifier VR;
>> +
>> +   // CompileUnits - Uniquing vector for compile units.
>> +   UniqueVector<CompileUnitDesc *> CompileUnits;
>> +
>> +   // Directories - Uniquing vector for directories.
>> +   UniqueVector<std::string> Directories;
>> +
>> +   // SourceFiles - Uniquing vector for source files.
>> +   UniqueVector<SourceFileInfo> SourceFiles;
>> +
>> +   // Lines - List of of source line correspondence.
>> +   std::vector<SourceLineInfo> Lines;
>> +
>> +   // LabelIDList - One entry per assigned label.  Normally the  
>> entry is equal to
>> +   // the list index(+1).  If the entry is zero then the label  
>> has been deleted.
>> +   // Any other value indicates the label has been deleted by is  
>> mapped to
>> +   // another label.
>> +   std::vector<unsigned> LabelIDList;
>> +
>> +   // ScopeMap - Tracks the scopes in the current function.
>> +   std::map<DebugInfoDesc *, DebugScope *> ScopeMap;
>> +
>> +   // RootScope - Top level scope for the current function.
>> +   //
>> +   DebugScope *RootScope;
>> +
>> +   // FrameMoves - List of moves done by a function's prolog.   
>> Used to construct
>> +   // frame maps by debug and exception handling consumers.
>> +   std::vector<MachineMove> FrameMoves;
>> +
>> + public:
>> +   MachineModuleInfo();
>> +   ~MachineModuleInfo();
>> +
>> +   /// doInitialization - Initialize the state for a new module.
>> +   ///
>> +   bool doInitialization();
>> +
>> +   /// doFinalization - Tear down the state after completion of a  
>> module.
>> +   ///
>> +   bool doFinalization();
>> +
>> +   /// BeginFunction - Begin gathering function meta information.
>> +   ///
>> +   void BeginFunction(MachineFunction *MF);
>> +
>> +   /// EndFunction - Discard function meta information.
>> +   ///
>> +   void EndFunction();
>> +
>> +   /// getDescFor - Convert a Value to a debug information  
>> descriptor.
>> +   ///
>> +   // FIXME - use new Value type when available.
>> +   DebugInfoDesc *getDescFor(Value *V);
>> +
>> +   /// Verify - Verify that a Value is debug information descriptor.
>> +   ///
>> +   bool Verify(Value *V);
>> +
>> +   /// AnalyzeModule - Scan the module for global debug information.
>> +   ///
>> +   void AnalyzeModule(Module &M);
>> +
>> +   /// hasDebugInfo - Returns true if valid debug info is present.
>> +   ///
>> +   bool hasDebugInfo() const { return !CompileUnits.empty(); }
>> +
>> +   /// NextLabelID - Return the next unique label id.
>> +   ///
>> +   unsigned NextLabelID() {
>> +     unsigned ID = LabelIDList.size() + 1;
>> +     LabelIDList.push_back(ID);
>> +     return ID;
>> +   }
>> +
>> +   /// RecordLabel - Records location information and associates  
>> it with a
>> +   /// label.  Returns a unique label ID used to generate a label  
>> and
>> +   /// provide correspondence to the source line list.
>> +   unsigned RecordLabel(unsigned Line, unsigned Column, unsigned  
>> Source);
>> +
>> +   /// InvalidateLabel - Inhibit use of the specified label # from
>> +   /// MachineModuleInfo, for example because the code was deleted.
>> +   void InvalidateLabel(unsigned LabelID) {
>> +     // Remap to zero to indicate deletion.
>> +     RemapLabel(LabelID, 0);
>> +   }
>> +
>> +   /// RemapLabel - Indicate that a label has been merged into  
>> another.
>> +   ///
>> +   void RemapLabel(unsigned OldLabelID, unsigned NewLabelID) {
>> +     assert(0 < OldLabelID && OldLabelID <= LabelIDList.size() &&
>> +           "Old label ID out of range.");
>> +     assert(NewLabelID <= LabelIDList.size() &&
>> +           "New label ID out of range.");
>> +     LabelIDList[OldLabelID - 1] = NewLabelID;
>> +   }
>> +
>> +   /// MappedLabel - Find out the label's final ID.  Zero  
>> indicates deletion.
>> +   /// ID != Mapped ID indicates that the label was folded into  
>> another label.
>> +   unsigned MappedLabel(unsigned LabelID) const {
>> +     assert(LabelID <= LabelIDList.size() && "Debug label ID out  
>> of range.");
>> +     return LabelID ? LabelIDList[LabelID - 1] : 0;
>> +   }
>> +
>> +   /// RecordSource - Register a source file with debug info.  
>> Returns an source
>> +   /// ID.
>> +   unsigned RecordSource(const std::string &Directory,
>> +                         const std::string &Source);
>> +   unsigned RecordSource(const CompileUnitDesc *CompileUnit);
>> +
>> +   /// getDirectories - Return the UniqueVector of std::string  
>> representing
>> +   /// directories.
>> +   const UniqueVector<std::string> &getDirectories() const {
>> +     return Directories;
>> +   }
>> +
>> +   /// getSourceFiles - Return the UniqueVector of source files.
>> +   ///
>> +   const UniqueVector<SourceFileInfo> &getSourceFiles() const {
>> +     return SourceFiles;
>> +   }
>> +
>> +   /// getSourceLines - Return a vector of source lines.
>> +   ///
>> +   const std::vector<SourceLineInfo> &getSourceLines() const {
>> +     return Lines;
>> +   }
>> +
>> +   // FIXME: nuke this.
>> +   void ClearLineInfo() {
>> +     Lines.clear();
>> +   }
>> +
>> +   /// SetupCompileUnits - Set up the unique vector of compile  
>> units.
>> +   ///
>> +   void SetupCompileUnits(Module &M);
>> +
>> +   /// getCompileUnits - Return a vector of debug compile units.
>> +   ///
>> +   const UniqueVector<CompileUnitDesc *> getCompileUnits() const;
>> +
>> +   /// getGlobalVariablesUsing - Return all of the  
>> GlobalVariables that use the
>> +   /// named GlobalVariable.
>> +   std::vector<GlobalVariable*>
>> +   getGlobalVariablesUsing(Module &M, const std::string &RootName);
>> +
>> +   /// getAnchoredDescriptors - Return a vector of anchored debug  
>> descriptors.
>> +   ///
>> +   template <class T>std::vector<T *> getAnchoredDescriptors 
>> (Module &M) {
>> +     T Desc;
>> +     std::vector<GlobalVariable *> Globals =
>> +                              getGlobalVariablesUsing(M,  
>> Desc.getAnchorString());
>> +     std::vector<T *> AnchoredDescs;
>> +     for (unsigned i = 0, N = Globals.size(); i < N; ++i) {
>> +       GlobalVariable *GV = Globals[i];
>> +
>> +       // FIXME - In the short term, changes are too drastic to  
>> continue.
>> +       if (DebugInfoDesc::TagFromGlobal(GV) == Desc.getTag() &&
>> +           DebugInfoDesc::VersionFromGlobal(GV) ==  
>> LLVMDebugVersion) {
>> +         AnchoredDescs.push_back(cast<T>(DR.Deserialize(GV)));
>> +       }
>> +     }
>> +
>> +     return AnchoredDescs;
>> +   }
>> +
>> +   /// RecordRegionStart - Indicate the start of a region.
>> +   ///
>> +   unsigned RecordRegionStart(Value *V);
>> +
>> +   /// RecordRegionEnd - Indicate the end of a region.
>> +   ///
>> +   unsigned RecordRegionEnd(Value *V);
>> +
>> +   /// RecordVariable - Indicate the declaration of  a local  
>> variable.
>> +   ///
>> +   void RecordVariable(Value *V, unsigned FrameIndex);
>> +
>> +   /// getRootScope - Return current functions root scope.
>> +   ///
>> +   DebugScope *getRootScope() { return RootScope; }
>> +
>> +   /// getOrCreateScope - Returns the scope associated with the  
>> given descriptor.
>> +   ///
>> +   DebugScope *getOrCreateScope(DebugInfoDesc *ScopeDesc);
>> +
>> +   /// getFrameMoves - Returns a reference to a list of moves  
>> done in the current
>> +   /// function's prologue.  Used to construct frame maps for  
>> debug and exception
>> +   /// handling comsumers.
>> +   std::vector<MachineMove> &getFrameMoves() { return FrameMoves; }
>> +
>> + }; // End class MachineModuleInfo
>> +
>> + } // End llvm namespace
>> +
>> + #endif
>>
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>

-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 2417 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20070126/0f3448db/attachment.bin>


More information about the llvm-commits mailing list