<br><br><div class="gmail_quote">On Wed, Nov 24, 2010 at 2:16 AM, Jakob Stoklund Olesen <span dir="ltr"><<a href="mailto:stoklund@2pi.dk">stoklund@2pi.dk</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div class="im"><br>
On Nov 23, 2010, at 9:27 PM, Cameron Zwarich wrote:<br>
<br>
> There aren't very many good use cases for std::set. Most dominance frontiers are small, so a SmallPtrSet seemed like a good choice. I experimented with different small values of the inline capacity and found that 2 was best for performance.<br>

<br>
</div>Does the majority of sets really have only 2 or less members? Otherwise, a DenseSet might be better.<br></blockquote><div><br></div><div>Dominance frontiers for each CFG node tend to be quite small in most CFG's.  Remember that the the dominance frontier of node N is the set of nodes that n dominates an immediate predecessor of, but not that node itself.</div>
<div>IE the set of nodes where n's dominance stops.</div><div><br></div><div>The common case of this is a merge point in the CFG.  Most merge points only have two predecessors, and thus, the max set size of the dominance frontier is usually 2.</div>
<div><br></div><div>You can probably get a good guess at max size by using the maximum number of incoming edges any node has, though in theory the dominance frontier for a given CFG node could contain every other CFG node minus some constant factor (Without thinking too hard, i believe you can achieve this with a really large switch statement being the only thing in the function).</div>
<div><br></div><div>--Dan</div></div>