summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen
diff options
context:
space:
mode:
authorUlrich Weigand <ulrich.weigand@de.ibm.com>2013-07-02 18:46:46 +0000
committerUlrich Weigand <ulrich.weigand@de.ibm.com>2013-07-02 18:46:46 +0000
commit8b3d22664e58e32095edfa58dfc3ce4ce2b7fd6f (patch)
treeb6a8a77cffe983837b49c7201a535b2668176196 /llvm/lib/CodeGen
parent396ba8b495640d7a1d8ff38e70f145bb25d109df (diff)
downloadbcm5719-llvm-8b3d22664e58e32095edfa58dfc3ce4ce2b7fd6f.tar.gz
bcm5719-llvm-8b3d22664e58e32095edfa58dfc3ce4ce2b7fd6f.zip
[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. llvm-svn: 185459
Diffstat (limited to 'llvm/lib/CodeGen')
-rw-r--r--llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp14
-rw-r--r--llvm/lib/CodeGen/AsmPrinter/DwarfDebug.h4
2 files changed, 9 insertions, 9 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
index 7195709cc80..40bfaaabe25 100644
--- a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
+++ b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
@@ -251,8 +251,8 @@ unsigned DwarfUnits::getAddrPoolIndex(const MCSymbol *Sym) {
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 MCSection *AddrSection) {
// 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 MCSection *AddrSection) {
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());
}
diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.h b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.h
index 893505c2540..60c6c3fa4c2 100644
--- a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.h
+++ b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.h
@@ -197,7 +197,7 @@ typedef StringMap<std::pair<MCSymbol*, unsigned>,
// 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.
OpenPOWER on IntegriCloud