<div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr">On Mon, Dec 19, 2016 at 9:24 PM Peter Collingbourne <<a href="mailto:peter@pcc.me.uk">peter@pcc.me.uk</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="auto" class="gmail_msg"><div class="gmail_msg">Sure, I understood what you meant. I meant that I wouldn't take a position on whether avoiding the cost of the capacity and the reserve area is worth it.</div><div dir="auto" class="gmail_msg"><br class="gmail_msg"></div><div dir="auto" class="gmail_msg">(If pressed I think I'd say no, the average tu doesn't have that many vtables, and there are far more egregious wastes of memory in llvm anyway (e.g. llvm::DIE) that we should be concentrating on first, but while I was adding another thing to vtables I figured it wouldn't hurt to be consistent with the others, then rule of three kicked in so seemed reasonable to add the abstraction.)</div></div></blockquote><div><br>Yeah, that's pretty much how I feel too.<br><br>Richard, Chandler - I seem to recall this has come up before (whether or not LLVM would benefit from a dynarray like abstraction) & I don't remember the backstory on the standards committee for dynarary (which I would've only heard second hand from one of you, I think). Any extra context/thoughts you could share here, briefly?<br><br>- Dave<br> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="auto" class="gmail_msg"><div dir="auto" class="gmail_msg"><br class="gmail_msg"></div><div dir="auto" class="gmail_msg"></div></div><div dir="auto" class="gmail_msg"><div dir="auto" class="gmail_msg">Peter</div></div><div dir="auto" class="gmail_msg"><div dir="auto" class="gmail_msg"><br class="gmail_msg"><div class="gmail_extra gmail_msg" dir="auto"><br class="gmail_msg"><div class="gmail_quote gmail_msg">On Dec 19, 2016 20:29, "David Blaikie" <<a href="mailto:dblaikie@gmail.com" class="gmail_msg" target="_blank">dblaikie@gmail.com</a>> wrote:<br type="attribution" class="gmail_msg"><blockquote class="m_-1977069340009011740quote gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="gmail_msg">What I mean is: compare OwningArrayRef to std::vector, not OwningArrayRef to manual memory management</div><div class="m_-1977069340009011740elided-text gmail_msg"><br class="gmail_msg"><div class="gmail_quote gmail_msg"><div dir="ltr" class="gmail_msg">On Mon, Dec 19, 2016 at 8:07 PM Peter Collingbourne <<a href="mailto:peter@pcc.me.uk" class="gmail_msg" target="_blank">peter@pcc.me.uk</a>> wrote:<br class="gmail_msg"></div><blockquote class="gmail_quote gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">I don't really have a strong opinion about it. It wraps up some manual memory management code we used to have in the vtable builder, although I couldn't say how beneficial that memory management really is.<div class="m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg"><br class="m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg"></div><div class="m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">Peter</div></div><div class="gmail_extra m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg"></div><div class="gmail_extra m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg"><br class="m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg"><div class="gmail_quote m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">On Mon, Dec 19, 2016 at 7:56 PM, David Blaikie <span dir="ltr" class="m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg"><<a href="mailto:dblaikie@gmail.com" class="m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg" target="_blank">dblaikie@gmail.com</a>></span> wrote:<br class="m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg"><blockquote class="gmail_quote m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">Is this really worth having compared to std::vector? std::dynarray was rejected from standardization for that reason, if I understand/heard correctly (& OwningArrayRef seems similar to std::dynarray)</div><div class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856HOEnZb m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg"><div class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856h5 m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg"><br class="m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg"><div class="gmail_quote m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg"><div dir="ltr" class="m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">On Tue, Dec 13, 2016 at 12:34 PM Peter Collingbourne via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" class="m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg" target="_blank">llvm-commits@lists.llvm.org</a>> wrote:<br class="m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg"></div><blockquote class="gmail_quote m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: pcc<br class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">
Date: Tue Dec 13 14:24:24 2016<br class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">
New Revision: 289579<br class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">
<br class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=289579&view=rev" rel="noreferrer" class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project?rev=289579&view=rev</a><br class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">
Log:<br class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">
ADT: Add OwningArrayRef class.<br class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">
<br class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">
This is a MutableArrayRef that owns its array.<br class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">
I plan to use this in D22296.<br class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">
<br class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">
Differential Revision: <a href="https://reviews.llvm.org/D27723" rel="noreferrer" class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg" target="_blank">https://reviews.llvm.org/D27723</a><br class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">
<br class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">
Modified:<br class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">
    llvm/trunk/include/llvm/ADT/ArrayRef.h<br class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">
<br class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">
Modified: llvm/trunk/include/llvm/ADT/ArrayRef.h<br class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/ArrayRef.h?rev=289579&r1=289578&r2=289579&view=diff" rel="noreferrer" class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/ArrayRef.h?rev=289579&r1=289578&r2=289579&view=diff</a><br class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">
==============================================================================<br class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">
--- llvm/trunk/include/llvm/ADT/ArrayRef.h (original)<br class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">
+++ llvm/trunk/include/llvm/ADT/ArrayRef.h Tue Dec 13 14:24:24 2016<br class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">
@@ -413,6 +413,25 @@ namespace llvm {<br class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">
     }<br class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">
   };<br class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">
<br class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">
+  /// This is a MutableArrayRef that owns its array.<br class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">
+  template <typename T> class OwningArrayRef : public MutableArrayRef<T> {<br class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">
+  public:<br class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">
+    OwningArrayRef() {}<br class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">
+    OwningArrayRef(size_t Size) : MutableArrayRef<T>(new T[Size], Size) {}<br class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">
+    OwningArrayRef(ArrayRef<T> Data)<br class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">
+        : MutableArrayRef<T>(new T[Data.size()], Data.size()) {<br class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">
+      std::copy(Data.begin(), Data.end(), this->begin());<br class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">
+    }<br class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">
+    OwningArrayRef(OwningArrayRef &&Other) { *this = Other; }<br class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">
+    OwningArrayRef &operator=(OwningArrayRef &&Other) {<br class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">
+      delete this->data();<br class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">
+      this->MutableArrayRef<T>::operator=(Other);<br class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">
+      Other.MutableArrayRef<T>::operator=(MutableArrayRef<T>());<br class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">
+      return *this;<br class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">
+    }<br class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">
+    ~OwningArrayRef() { delete this->data(); }<br class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">
+  };<br class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">
+<br class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">
   /// @name ArrayRef Convenience constructors<br class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">
   /// @{<br class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">
<br class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">
<br class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">
<br class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">
_______________________________________________<br class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">
llvm-commits mailing list<br class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">
<a href="mailto:llvm-commits@lists.llvm.org" class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg" target="_blank">llvm-commits@lists.llvm.org</a><br class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856m_5161534197004722112gmail_msg m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">
</blockquote></div>
</div></div></blockquote></div><br class="m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg"><br clear="all" class="m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg"><div class="m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg"><br class="m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg"></div></div><div class="gmail_extra m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">-- <br class="m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg"><div class="m_-1977069340009011740m_-6200793293137247653m_-7790276951637503856gmail_signature m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg" data-smartmail="gmail_signature"><div dir="ltr" class="m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">-- <div class="m_-1977069340009011740m_-6200793293137247653gmail_msg gmail_msg">Peter</div></div></div>
</div></blockquote></div>
</div></blockquote></div><br class="gmail_msg"></div></div></div></blockquote></div></div>