<div dir="ltr">FWIW: the traditional solution to this problem is the "double stack" approach (really a double queue), which is maintaining a current and next worklist.<div>After evaluating worklist algorithms and datastructures on  tons and tons and tons and tons testcases (and looking at the behaviors of all the existing worklists), this is what ended up being the final solution in gcc.<br></div><div><br></div><div>The practical performance and memory differences between the various  data structures are ... essentially nil on most cases.</div><div><br></div><div>Now, the algorithms and what tricks you use to avoid revisiting stuff and ordering, that matters.</div><div>(probably not so much here though :P)<br><br></div><div>Whether it's worth making a new ADT for worklists, i'd only do it if we thought it had API and maintenance benefits, because IMHO it's unlikely to have any significant performance benefits.</div><div><br></div><div><br></div><div><br></div><div><div><div><div> </div></div></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Aug 16, 2016 at 8:18 PM, Dean Michael Berris via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">dberris added a subscriber: dberris.<br>
dberris added a comment.<br>
<br>
How hard would it be to amortize the removal from the queue grows to a certain size? I ask because at some point the cost of copying around chunks of memory when a vector grows might outweigh the cost of just regularly trimming the queue if there are visited/stale entries at the beginning to the "current head" iterator.<br>
<div class="HOEnZb"><div class="h5"><br>
<br>
<a href="https://reviews.llvm.org/D23396" rel="noreferrer" target="_blank">https://reviews.llvm.org/<wbr>D23396</a><br>
<br>
<br>
<br>
______________________________<wbr>_________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-commits</a><br>
</div></div></blockquote></div><br></div>