<div class="gmail_quote">On Tue, Aug 14, 2012 at 9:48 PM, Ted Kremenek <span dir="ltr"><<a href="mailto:kremenek@apple.com" target="_blank">kremenek@apple.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div style="word-wrap:break-word"><div><div><div>On Aug 14, 2012, at 2:32 PM, Richard Trieu <<a href="mailto:rtrieu@google.com" target="_blank">rtrieu@google.com</a>> wrote:</div><br><blockquote type="cite">
<blockquote class="gmail_quote" style="font-family:Helvetica;font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:-webkit-auto;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

<div style="word-wrap:break-word">At a high level, I honestly find this logic to be more complicated than I would have expected.  The sorting seems unnecessary, and will report diagnostics in an unnatural order (first based on enum constant value, then on declaration order).  A straight linear pass seems more naturally to me, and DenseMap is very efficient.</div>

</blockquote><div style="font-family:Helvetica;font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:-webkit-auto;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px">

Is there a comparison between the different containers in LLVM and the STL containers?</div></blockquote><br></div></div><div>This is a reasonable place to start:</div><div><br></div><div>  <a href="http://llvm.org/docs/ProgrammersManual.html#ds_map" target="_blank">http://llvm.org/docs/ProgrammersManual.html#ds_map</a></div>

<div><br></div><div>The key with DenseMap is that it is probed hashtable.  There is one big allocation for the entire table, instead of a bunch of buckets.  When applicable, it can be very fast, and feels like the right data structure to use here.</div>

</div></blockquote></div><br><div>Duplicate enum detection, now with DenseMap.  The DenseMap maps a int64_t to a vector pointer.  0 and 1 were special keys for the DenseMap, so two separate pointers special cased for them.   The vectors pointers are stored in another vector in declaration order.  One pass is made over the enums to find ones without initializers.  These are used to create vectors.  A second pass through the enums populates the vectors.  Finally, a pass over the vector of vectors is used to generate all the warnings and notes.</div>

<div><br></div><div>Run time is fairly consistent with the sorted vector implementation, which is max %3 difference against control.</div>