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

Jim Laskey jlaskey at apple.com
Fri Feb 10 17:01:44 PST 2006



Changes in directory llvm/include/llvm/CodeGen:

MachineDebugInfo.h updated: 1.13 -> 1.14
---
Log message:

Reorg for integration with gcc4.  Old style debug info will not be passed though
to SelIDAG.




---
Diffs of the changes:  (+169 -59)

 MachineDebugInfo.h |  228 +++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 169 insertions(+), 59 deletions(-)


Index: llvm/include/llvm/CodeGen/MachineDebugInfo.h
diff -u llvm/include/llvm/CodeGen/MachineDebugInfo.h:1.13 llvm/include/llvm/CodeGen/MachineDebugInfo.h:1.14
--- llvm/include/llvm/CodeGen/MachineDebugInfo.h:1.13	Mon Feb  6 15:54:05 2006
+++ llvm/include/llvm/CodeGen/MachineDebugInfo.h	Fri Feb 10 19:01:30 2006
@@ -32,6 +32,7 @@
 
 #include "llvm/Support/Dwarf.h"
 #include "llvm/ADT/UniqueVector.h"
+#include "llvm/GlobalValue.h"
 #include "llvm/Pass.h"
 #include "llvm/User.h"
 
@@ -42,6 +43,7 @@
 
 //===----------------------------------------------------------------------===//
 // Forward declarations.
+class Constant;
 class DebugInfoDesc;
 class GlobalVariable;
 class Module;
@@ -57,12 +59,13 @@
   
   // DebugInfoDesc type identifying tags.
   // FIXME - Change over with gcc4.
+  DI_TAG_anchor = 0,
 #if 1
   DI_TAG_compile_unit = DW_TAG_compile_unit,
   DI_TAG_global_variable = DW_TAG_variable,
   DI_TAG_subprogram = DW_TAG_subprogram
 #else
-  DI_TAG_compile_unit = 1,
+  DI_TAG_compile_unit,
   DI_TAG_global_variable,
   DI_TAG_subprogram
 #endif
@@ -117,6 +120,10 @@
   /// 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.
   
@@ -128,11 +135,15 @@
   
   /// ApplyToFields - Target the vistor to the fields of the descriptor.
   ///
-  virtual void ApplyToFields(DIVisitor *Visitor) = 0;
+  virtual void ApplyToFields(DIVisitor *Visitor);
 
-  /// TypeString - Return a string used to compose globalnames and labels.
+  /// getDescString - Return a string used to compose global names and labels.
   ///
-  virtual const char *TypeString() const = 0;
+  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;
@@ -141,27 +152,90 @@
 
 
 //===----------------------------------------------------------------------===//
+/// AnchorDesc - Descriptors of this class act as markers for identifying
+/// descriptors of certain groups.
+class AnchorDesc : public DebugInfoDesc {
+private:  
+  std::string Name;                     // Anchor type string.
+  
+public:
+  AnchorDesc()
+  : DebugInfoDesc(DI_TAG_anchor)
+  , Name("")
+  {}
+  AnchorDesc(const std::string &N)
+  : DebugInfoDesc(DI_TAG_anchor)
+  , Name(N)
+  {}
+  
+  // Accessors
+  const std::string &getName() const { return Name; }
+
+  // Implement isa/cast/dyncast.
+  static bool classof(const AnchorDesc *) { return true; }
+  static bool classof(const DebugInfoDesc *D) {
+    return D->getTag() == DI_TAG_anchor;
+  }
+
+  /// 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:  
+  AnchorDesc *Anchor;                   // Anchor for all descriptors of the
+                                        // same type.
+
+protected:
+
+  AnchoredDesc(unsigned T);
+
+public:  
+  // Accessors.
+  AnchorDesc *getAnchor() const { return Anchor; }
+  void setAnchor(AnchorDesc *A) { Anchor = A; }
+
+  //===--------------------------------------------------------------------===//
+  // Subclasses should supply the following virtual methods.
+  
+  /// 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 DebugInfoDesc {
+class CompileUnitDesc : public AnchoredDesc {
 private:  
   unsigned DebugVersion;                // LLVM debug version when produced.
   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.
-  GlobalVariable *TransUnit;            // Translation unit - ignored.
   
 public:
-  CompileUnitDesc()
-  : DebugInfoDesc(DI_TAG_compile_unit)
-  , DebugVersion(LLVMDebugVersion)
-  , Language(0)
-  , FileName("")
-  , Directory("")
-  , Producer("")
-  , TransUnit(NULL)
-  {}
+  CompileUnitDesc();
   
   // Accessors
   unsigned getDebugVersion()              const { return DebugVersion; }
@@ -173,6 +247,7 @@
   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.
@@ -189,9 +264,17 @@
   ///
   virtual void ApplyToFields(DIVisitor *Visitor);
 
-  /// TypeString - Return a string used to compose globalnames and labels.
+  /// 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.
   ///
-  virtual const char *TypeString() const;
+  virtual const char *getAnchorString() const;
     
 #ifndef NDEBUG
   virtual void dump();
@@ -199,42 +282,49 @@
 };
 
 //===----------------------------------------------------------------------===//
-/// GlobalVariableDesc - This class packages debug information associated with a
-/// GlobalVariable.
-class GlobalVariableDesc : public DebugInfoDesc {
+/// 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.
-  GlobalVariable *TransUnit;            // Translation unit - ignored.
   // FIXME - Use a descriptor.
   GlobalVariable *TyDesc;               // Type debug descriptor.
   bool IsStatic;                        // Is the global a static.
   bool IsDefinition;                    // Is the global defined in context.
-  GlobalVariable *Global;               // llvm global.
   
+protected:
+  GlobalDesc(unsigned T);
+
 public:
-  GlobalVariableDesc()
-  : DebugInfoDesc(DI_TAG_global_variable)
-  , Context(0)
-  , Name("")
-  , TransUnit(NULL)
-  , TyDesc(NULL)
-  , IsStatic(false)
-  , IsDefinition(false)
-  , Global(NULL)
-  {}
-  
   // Accessors
   DebugInfoDesc *getContext()                const { return Context; }
   const std::string &getName()               const { return Name; }
   bool isStatic()                            const { return IsStatic; }
   bool isDefinition()                        const { return IsDefinition; }
-  GlobalVariable *getGlobalVariable()        const { return Global; }
+  void setContext(DebugInfoDesc *C)                { Context = C; }
   void setName(const std::string &N)               { Name = N; }
   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; }
-  // FIXME - Other getters/setters.
   
   // Implement isa/cast/dyncast.
   static bool classof(const GlobalVariableDesc *)  { return true; }
@@ -246,10 +336,18 @@
   /// GlobalVariableDesc.
   virtual void ApplyToFields(DIVisitor *Visitor);
 
-  /// TypeString - Return a string used to compose globalnames and labels.
+  /// getDescString - Return a string used to compose global names and labels.
   ///
-  virtual const char *TypeString() const;
+  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.
+  ///
+  virtual const char *getAnchorString() const;
+    
 #ifndef NDEBUG
   virtual void dump();
 #endif
@@ -258,32 +356,24 @@
 //===----------------------------------------------------------------------===//
 /// SubprogramDesc - This class packages debug information associated with a
 /// subprogram/function.
-class SubprogramDesc : public DebugInfoDesc {
+class SubprogramDesc : public GlobalDesc {
 private:
   DebugInfoDesc *Context;               // Context debug descriptor.
   std::string Name;                     // Subprogram name.
-  GlobalVariable *TransUnit;            // Translation unit - ignored.
   // FIXME - Use a descriptor.
   GlobalVariable *TyDesc;               // Type debug descriptor.
   bool IsStatic;                        // Is the subprogram a static.
   bool IsDefinition;                    // Is the subprogram defined in context.
   
 public:
-  SubprogramDesc()
-  : DebugInfoDesc(DI_TAG_subprogram)
-  , Context(0)
-  , Name("")
-  , TransUnit(NULL)
-  , TyDesc(NULL)
-  , IsStatic(false)
-  , IsDefinition(false)
-  {}
+  SubprogramDesc();
   
   // Accessors
   DebugInfoDesc *getContext()                const { return Context; }
   const std::string &getName()               const { return Name; }
   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 setIsStatic(bool IS)                        { IsStatic = IS; }
   void setIsDefinition(bool ID)                    { IsDefinition = ID; }
@@ -299,10 +389,18 @@
   ///
   virtual void ApplyToFields(DIVisitor *Visitor);
 
-  /// TypeString - Return a string used to compose globalnames and labels.
+  /// getDescString - Return a string used to compose global names and labels.
   ///
-  virtual const char *TypeString() const;
+  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.
+  ///
+  virtual const char *getAnchorString() const;
+    
 #ifndef NDEBUG
   virtual void dump();
 #endif
@@ -313,18 +411,15 @@
 /// into DebugInfoDesc objects.
 class DIDeserializer {
 private:
-  Module *M;                            // Definition space module.
   unsigned DebugVersion;                // Version of debug information in use.
   std::map<GlobalVariable *, DebugInfoDesc *> GlobalDescs;
                                         // Previously defined gloabls.
   
 public:
-  DIDeserializer() : M(NULL), DebugVersion(LLVMDebugVersion) {}
+  DIDeserializer() : DebugVersion(LLVMDebugVersion) {}
   ~DIDeserializer() {}
   
   // Accessors
-  Module *getModule()        const { return M; };
-  void setModule(Module *module)   { M = module; }
   unsigned getDebugVersion() const { return DebugVersion; }
   
   /// Deserialize - Reconstitute a GlobalVariable into it's component
@@ -345,10 +440,18 @@
                                         // Types per Tag.  Created lazily.
   std::map<DebugInfoDesc *, GlobalVariable *> DescGlobals;
                                         // Previously defined descriptors.
-  std::map<const std::string, GlobalVariable*> StringCache;
+  std::map<const std::string, Constant *> StringCache;
                                         // Previously defined strings.
+                                          
 public:
-  DISerializer() : M(NULL) {}
+  DISerializer()
+  : M(NULL)
+  , StrPtrTy(NULL)
+  , EmptyStructPtrTy(NULL)
+  , TagTypes()
+  , DescGlobals()
+  , StringCache()
+  {}
   ~DISerializer() {}
   
   // Accessors
@@ -369,7 +472,7 @@
   
   /// getString - Construct the string as constant string global.
   ///
-  GlobalVariable *getString(const std::string &String);
+  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.
@@ -395,6 +498,7 @@
   
   /// Verify - Return true if the GlobalVariable appears to be a valid
   /// serialization of a DebugInfoDesc.
+  bool Verify(Value *V);
   bool Verify(GlobalVariable *GV);
 };
 
@@ -454,9 +558,7 @@
 class MachineDebugInfo : public ImmutablePass {
 private:
   // Use the same serializer/deserializer/verifier for the module.
-  DISerializer SR;
   DIDeserializer DR;
-  DIVerifier VR;
 
   // CompileUnits - Uniquing vector for compile units.
   UniqueVector<CompileUnitDesc *> CompileUnits;
@@ -482,6 +584,14 @@
   ///
   bool doFinalization();
   
+  /// Deserialize - Convert a Value to a debug information descriptor.
+  ///
+  DebugInfoDesc *Deserialize(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);






More information about the llvm-commits mailing list