[llvm-dev] RFC: Should SmallVectors be smaller?

Chris Lattner via llvm-dev llvm-dev at lists.llvm.org
Sat Jun 23 16:13:01 PDT 2018



> On Jun 23, 2018, at 11:48 AM, Duncan P. N. Exon Smith <dexonsmith at apple.com> wrote:
> 
> 
> 
>> On Jun 23, 2018, at 11:35, Duncan P. N. Exon Smith <dexonsmith at apple.com <mailto:dexonsmith at apple.com>> wrote:
>> 
>> 
>> 
>>> On Jun 23, 2018, at 11:27, Duncan P. N. Exon Smith <dexonsmith at apple.com <mailto:dexonsmith at apple.com>> wrote:
>>> 
>>>> The patch LGTM, but why would someone actually have a SmallVector with N = 0?  Isn’t that a vector?
>>> 
>>> It's a vector that can be passed as a SmallVectorImpl parameter.  But yeah, mostly misguided.
>>> 
>> 
>> There's another explanation given in llvm/include/llvm/ADT/IndexedMap.h:
>> ```
>> template <typename T, typename ToIndexT = identity<unsigned>>
>>   class IndexedMap {
>>     using IndexT = typename ToIndexT::argument_type;
>>     // Prefer SmallVector with zero inline storage over std::vector. IndexedMaps
>>     // can grow very large and SmallVector grows more efficiently as long as T
>>     // is trivially copyable.
>>     using StorageT = SmallVector<T, 0>;
>> 
>> ```
> 
> And another explanation in r266909, along the same lines:
> 
>     IR: Use SmallVector instead of std::vector of TrackingMDRef
>     
>     Don't use std::vector<TrackingMDRef>, since (at least in some versions
>     of libc++) std::vector apparently copies values on grow operations
>     instead of moving them.  Found this when I was temporarily deleting the
>     copy constructor for TrackingMDRef to investigate a performance
>     bottleneck.

Huh, ok, still seems dubious, but I’m certainly not opposed to making SmallVector<0> better!  Thanks Duncan,

-Chris

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20180623/2b59c2e3/attachment.html>


More information about the llvm-dev mailing list