[llvm] r185459 - [DebugInfo] Hold generic MCExpr in AddrPool

Ulrich Weigand ulrich.weigand at de.ibm.com
Tue Jul 2 11:46:46 PDT 2013


Author: uweigand
Date: Tue Jul  2 13:46:46 2013
New Revision: 185459

URL: http://llvm.org/viewvc/llvm-project?rev=185459&view=rev
Log:

[DebugInfo] Hold generic MCExpr in AddrPool

This changes the AddrPool infrastructure to enable it to hold
generic MCExpr expressions, not just MCSymbolRefExpr.

This is in preparation for supporting debug info for TLS variables
on PowerPC, where we need to describe the variable location using
a more complex expression than just MCSymbolRefExpr.


Modified:
    llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
    llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h

Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp?rev=185459&r1=185458&r2=185459&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp (original)
+++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp Tue Jul  2 13:46:46 2013
@@ -251,8 +251,8 @@ unsigned DwarfUnits::getAddrPoolIndex(co
   return getAddrPoolIndex(MCSymbolRefExpr::Create(Sym, Asm->OutContext));
 }
 
-unsigned DwarfUnits::getAddrPoolIndex(const MCSymbolRefExpr *Sym) {
-  std::pair<DenseMap<const MCSymbolRefExpr *, unsigned>::iterator, bool> P =
+unsigned DwarfUnits::getAddrPoolIndex(const MCExpr *Sym) {
+  std::pair<DenseMap<const MCExpr *, unsigned>::iterator, bool> P =
       AddressPool.insert(std::make_pair(Sym, NextAddrPoolNumber));
   if (P.second)
     ++NextAddrPoolNumber;
@@ -2361,9 +2361,9 @@ void DwarfUnits::emitAddresses(const MCS
 
   // Get all of the address pool entries and put them in an array by their ID so
   // we can sort them.
-  SmallVector<std::pair<unsigned, const MCSymbolRefExpr *>, 64> Entries;
+  SmallVector<std::pair<unsigned, const MCExpr *>, 64> Entries;
 
-  for (DenseMap<const MCSymbolRefExpr *, unsigned>::iterator
+  for (DenseMap<const MCExpr *, unsigned>::iterator
            I = AddressPool.begin(),
            E = AddressPool.end();
        I != E; ++I)
@@ -2372,9 +2372,9 @@ void DwarfUnits::emitAddresses(const MCS
   array_pod_sort(Entries.begin(), Entries.end());
 
   for (unsigned i = 0, e = Entries.size(); i != e; ++i) {
-    // Emit a label for reference from debug information entries.
-    if (const MCSymbolRefExpr *Sym = Entries[i].second)
-      Asm->OutStreamer.EmitValue(Sym, Asm->getDataLayout().getPointerSize());
+    // Emit an expression for reference from debug information entries.
+    if (const MCExpr *Expr = Entries[i].second)
+      Asm->OutStreamer.EmitValue(Expr, Asm->getDataLayout().getPointerSize());
     else
       Asm->OutStreamer.EmitIntValue(0, Asm->getDataLayout().getPointerSize());
   }

Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h?rev=185459&r1=185458&r2=185459&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h (original)
+++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h Tue Jul  2 13:46:46 2013
@@ -197,7 +197,7 @@ typedef StringMap<std::pair<MCSymbol*, u
 
 // A Symbol->unsigned mapping of addresses used by indirect
 // references.
-typedef DenseMap<const MCSymbolRefExpr *, unsigned> AddrPool;
+typedef DenseMap<const MCExpr *, unsigned> AddrPool;
 
 /// \brief Collects and handles information specific to a particular
 /// collection of units.
@@ -270,7 +270,7 @@ public:
 
   /// \brief Returns the index into the address pool with the given
   /// label/symbol.
-  unsigned getAddrPoolIndex(const MCSymbolRefExpr *);
+  unsigned getAddrPoolIndex(const MCExpr *);
   unsigned getAddrPoolIndex(const MCSymbol *);
 
   /// \brief Returns the address pool.





More information about the llvm-commits mailing list