<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Fri, May 15, 2015 at 3:56 PM, Duncan P. N. Exon Smith <span dir="ltr"><<a href="mailto:dexonsmith@apple.com" target="_blank">dexonsmith@apple.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: dexonsmith<br>
Date: Fri May 15 17:56:01 2015<br>
New Revision: 237487<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=237487&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=237487&view=rev</a><br>
Log:<br>
MC: Change MCAssembler::Symbols to a vector<br>
<br>
Instead of an intrusive double-linked linked list, use a<br>
`std::vector<>`.  </blockquote><div><br>Yay for fewer intrusive things! \o/<br> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">This saves a pointer per symbol and simplifies<br>
`MCSymbolData`.  Otherwise, no functionality change here.<br>
<br>
While I measured a memory drop from around 1047MB to 1040MB (0.6%) --<br>
and this is a decent cleanup in its own right -- it's primarily a<br>
preparation patch for merging `MCSymbol` and `MCSymbolData`.  I'll post<br>
an updated patch for that to the list in a moment.<br>
<br>
(I'm looking at `llc` memory usage on `verify-uselistorder.lto.opt.bc`;<br>
see r236629 for details.)<br>
<br>
Modified:<br>
    llvm/trunk/include/llvm/MC/MCAssembler.h<br>
<br>
Modified: llvm/trunk/include/llvm/MC/MCAssembler.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCAssembler.h?rev=237487&r1=237486&r2=237487&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCAssembler.h?rev=237487&r1=237486&r2=237487&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/include/llvm/MC/MCAssembler.h (original)<br>
+++ llvm/trunk/include/llvm/MC/MCAssembler.h Fri May 15 17:56:01 2015<br>
@@ -17,6 +17,7 @@<br>
 #include "llvm/ADT/SmallString.h"<br>
 #include "llvm/ADT/ilist.h"<br>
 #include "llvm/ADT/ilist_node.h"<br>
+#include "llvm/ADT/iterator.h"<br>
 #include "llvm/MC/MCDirectives.h"<br>
 #include "llvm/MC/MCFixup.h"<br>
 #include "llvm/MC/MCInst.h"<br>
@@ -657,7 +658,7 @@ public:<br>
 };<br>
<br>
 // FIXME: Same concerns as with SectionData.<br>
-class MCSymbolData : public ilist_node<MCSymbolData> {<br>
+class MCSymbolData {<br>
   const MCSymbol *Symbol;<br>
<br>
   /// Fragment - The fragment this symbol's value is relative to, if any. Also<br>
@@ -798,13 +799,14 @@ class MCAssembler {<br>
<br>
 public:<br>
   typedef iplist<MCSectionData> SectionDataListType;<br>
-  typedef iplist<MCSymbolData> SymbolDataListType;<br>
+  typedef std::vector<std::unique_ptr<MCSymbolData>> SymbolDataListType;<br>
<br>
   typedef SectionDataListType::const_iterator const_iterator;<br>
   typedef SectionDataListType::iterator iterator;<br>
<br>
-  typedef SymbolDataListType::const_iterator const_symbol_iterator;<br>
-  typedef SymbolDataListType::iterator symbol_iterator;<br>
+  typedef pointee_iterator<SymbolDataListType::const_iterator><br>
+  const_symbol_iterator;<br>
+  typedef pointee_iterator<SymbolDataListType::iterator> symbol_iterator;<br>
<br>
   typedef iterator_range<symbol_iterator> symbol_range;<br>
   typedef iterator_range<const_symbol_iterator> const_symbol_range;<br>
@@ -846,7 +848,7 @@ private:<br>
<br>
   iplist<MCSectionData> Sections;<br>
<br>
-  iplist<MCSymbolData> Symbols;<br>
+  SymbolDataListType Symbols;<br>
<br>
   DenseSet<const MCSymbol *> LocalsUsedInReloc;<br>
<br>
@@ -1181,8 +1183,8 @@ public:<br>
     if (Created)<br>
       *Created = !Entry;<br>
     if (!Entry) {<br>
-      Entry = new MCSymbolData(Symbol, nullptr, 0);<br>
-      Symbols.push_back(Entry);<br>
+      Symbols.emplace_back(new MCSymbolData(Symbol, nullptr, 0));<br>
+      Entry = Symbols.back().get();<br>
     }<br>
<br>
     return *Entry;<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div></div>