Rework adding function names to the dwarf accelerator tables, allow
multiple dies per function and support C++ basenames.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@144304 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/AsmPrinter/DwarfAccelTable.cpp b/lib/CodeGen/AsmPrinter/DwarfAccelTable.cpp
index 7c93dbf..a3a2488 100644
--- a/lib/CodeGen/AsmPrinter/DwarfAccelTable.cpp
+++ b/lib/CodeGen/AsmPrinter/DwarfAccelTable.cpp
@@ -75,9 +75,15 @@
 
 void DwarfAccelTable::FinalizeTable(AsmPrinter *Asm, const char *Prefix) {
   // Create the individual hash data outputs.
-  for (StringMap<DIEArray>::const_iterator
+  for (StringMap<DIEArray>::iterator
          EI = Entries.begin(), EE = Entries.end(); EI != EE; ++EI) {
     struct HashData *Entry = new HashData((*EI).getKeyData());
+
+    // Unique the entries.
+    std::sort((*EI).second.begin(), (*EI).second.end());
+    (*EI).second.erase(std::unique((*EI).second.begin(), (*EI).second.end()),
+                       (*EI).second.end());
+
     for (DIEArray::const_iterator DI = (*EI).second.begin(),
            DE = (*EI).second.end();
          DI != DE; ++DI)