Switch to using a numeric id for anchors.
authorJim Laskey <jlaskey@mac.com>
Tue, 7 Mar 2006 20:53:47 +0000 (20:53 +0000)
committerJim Laskey <jlaskey@mac.com>
Tue, 7 Mar 2006 20:53:47 +0000 (20:53 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@26598 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/CodeGen/MachineDebugInfo.h
lib/CodeGen/MachineDebugInfo.cpp
lib/Transforms/IPO/Internalize.cpp

index 3fad875415dafb80cb175d869998a6d124bfb864..f48e35727dd9ab780053d33390cd0188abfbf432 100644 (file)
@@ -142,16 +142,18 @@ public:
 //===----------------------------------------------------------------------===//
 /// AnchorDesc - Descriptors of this class act as markers for identifying
 /// descriptors of certain groups.
+class AnchoredDesc;
 class AnchorDesc : public DebugInfoDesc {
-private:  
-  std::string Name;                     // Anchor type string.
+private:
+  unsigned AnchorTag;                   // Tag number of descriptors anchored
+                                        // by this object.
   
 public:
   AnchorDesc();
-  AnchorDesc(const std::string &N);
+  AnchorDesc(AnchoredDesc *D);
   
   // Accessors
-  const std::string &getName() const { return Name; }
+  unsigned getAnchorTag() const { return AnchorTag; }
 
   // Implement isa/cast/dyncast.
   static bool classof(const AnchorDesc *) { return true; }
@@ -198,6 +200,10 @@ public:
   //===--------------------------------------------------------------------===//
   // 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);
@@ -217,6 +223,7 @@ private:
 public:
   CompileUnitDesc();
   
+  
   // Accessors
   unsigned getDebugVersion()              const { return DebugVersion; }
   unsigned getLanguage()                  const { return Language; }
@@ -252,6 +259,7 @@ public:
   
   /// getAnchorString - Return a string used to label this descriptor's anchor.
   ///
+  static const char *AnchorString;
   virtual const char *getAnchorString() const;
     
 #ifndef NDEBUG
@@ -553,6 +561,7 @@ public:
   
   /// getAnchorString - Return a string used to label this descriptor's anchor.
   ///
+  static const char *AnchorString;
   virtual const char *getAnchorString() const;
     
 #ifndef NDEBUG
@@ -591,6 +600,7 @@ public:
   
   /// getAnchorString - Return a string used to label this descriptor's anchor.
   ///
+  static const char *AnchorString;
   virtual const char *getAnchorString() const;
     
 #ifndef NDEBUG
index 8e1d8f22c25b841d7d812eede420a87f9f7839dc..ba5bf03b96f98c2f48d036053cb24115cf2dd3b3 100644 (file)
@@ -53,7 +53,7 @@ getGlobalVariablesUsing(Module &M, const std::string &RootName) {
   
   std::vector<const Type*> FieldTypes;
   FieldTypes.push_back(Type::UIntTy);
-  FieldTypes.push_back(PointerType::get(Type::SByteTy));
+  FieldTypes.push_back(Type::UIntTy);
 
   // Get the GlobalVariable root.
   GlobalVariable *UseRoot = M.getGlobalVariable(RootName,
@@ -539,11 +539,11 @@ void DebugInfoDesc::ApplyToFields(DIVisitor *Visitor) {
 
 AnchorDesc::AnchorDesc()
 : DebugInfoDesc(DW_TAG_anchor)
-, Name("")
+, AnchorTag(0)
 {}
-AnchorDesc::AnchorDesc(const std::string &N)
+AnchorDesc::AnchorDesc(AnchoredDesc *D)
 : DebugInfoDesc(DW_TAG_anchor)
-, Name(N)
+, AnchorTag(D->getTag())
 {}
 
 // Implement isa/cast/dyncast.
@@ -562,13 +562,26 @@ GlobalValue::LinkageTypes AnchorDesc::getLinkage() const {
 void AnchorDesc::ApplyToFields(DIVisitor *Visitor) {
   DebugInfoDesc::ApplyToFields(Visitor);
   
-  Visitor->Apply(Name);
+  Visitor->Apply(AnchorTag);
 }
 
-/// getDescString - Return a string used to compose global names and labels.
-///
+/// getDescString - Return a string used to compose global names and labels. A
+/// A global variable name needs to be defined for each debug descriptor that is
+/// anchored. NOTE: that each global variable name here also needs to be added
+/// to the list of names left external in the internalizer.
+///   ExternalNames.insert("llvm.dbg.compile_units");
+///   ExternalNames.insert("llvm.dbg.global_variables");
+///   ExternalNames.insert("llvm.dbg.subprograms");
 const char *AnchorDesc::getDescString() const {
-  return Name.c_str();
+  switch (AnchorTag) {
+  case DW_TAG_compile_unit: return CompileUnitDesc::AnchorString;
+  case DW_TAG_variable:     return GlobalVariableDesc::AnchorString;
+  case DW_TAG_subprogram:   return SubprogramDesc::AnchorString;
+  default: break;
+  }
+
+  assert(0 && "Tag does not have a case for anchor string");
+  return "";
 }
 
 /// getTypeString - Return a string used to label this descriptors type.
@@ -581,7 +594,7 @@ const char *AnchorDesc::getTypeString() const {
 void AnchorDesc::dump() {
   std::cerr << getDescString() << " "
             << "Tag(" << getTag() << "), "
-            << "Name(" << Name << ")\n";
+            << "AnchorTag(" << AnchorTag << ")\n";
 }
 #endif
 
@@ -649,8 +662,9 @@ const char *CompileUnitDesc::getTypeString() const {
 
 /// getAnchorString - Return a string used to label this descriptor's anchor.
 ///
+const char *CompileUnitDesc::AnchorString = "llvm.dbg.compile_units";
 const char *CompileUnitDesc::getAnchorString() const {
-  return "llvm.dbg.compile_units";
+  return AnchorString;
 }
 
 #ifndef NDEBUG
@@ -1014,8 +1028,9 @@ const char *GlobalVariableDesc::getTypeString() const {
 
 /// getAnchorString - Return a string used to label this descriptor's anchor.
 ///
+const char *GlobalVariableDesc::AnchorString = "llvm.dbg.global_variables";
 const char *GlobalVariableDesc::getAnchorString() const {
-  return "llvm.dbg.global_variables";
+  return AnchorString;
 }
 
 #ifndef NDEBUG
@@ -1063,8 +1078,9 @@ const char *SubprogramDesc::getTypeString() const {
 
 /// getAnchorString - Return a string used to label this descriptor's anchor.
 ///
+const char *SubprogramDesc::AnchorString = "llvm.dbg.subprograms";
 const char *SubprogramDesc::getAnchorString() const {
-  return "llvm.dbg.subprograms";
+  return AnchorString;
 }
 
 #ifndef NDEBUG
index 2f2f06b43b5980ce0e472b306418a635cc02674c..4bfc5a2186baa784cb2105b807f68fd1939fb840 100644 (file)
@@ -112,9 +112,10 @@ bool InternalizePass::runOnModule(Module &M) {
   ExternalNames.insert("llvm.used");
   
   // Never internalize anchors used by the debugger, else the debugger won't
-  // find them.
-  ExternalNames.insert("llvm.dbg.translation_units");
-  ExternalNames.insert("llvm.dbg.globals");
+  // find them.  (see MachineDebugInfo.)
+  ExternalNames.insert("llvm.dbg.compile_units");
+  ExternalNames.insert("llvm.dbg.global_variables");
+  ExternalNames.insert("llvm.dbg.subprograms");
       
   // Mark all global variables with initializers as internal as well.
   for (Module::global_iterator I = M.global_begin(), E = M.global_end();