<div dir="ltr">Any sense of whether it's worth/possible to go the whole way and keep a list, rather than a range, for each one? (so that even if they're interleaved, it doesn't degenerate?) I may not be fully understanding the code to be clear on whether that's an option.<br><br>(this also assumes these args can be cleaned up for the real clang work occurs - so they don't increase the memory high water mark too much, though even with response-file.c, I would hope a list for each in-use flag group wouldn't be /too/ costly in the grand scheme of things)</div><br><div class="gmail_quote"><div dir="ltr">On Fri, Feb 17, 2017 at 5:34 PM Richard Smith via Phabricator <<a href="mailto:reviews@reviews.llvm.org">reviews@reviews.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">rsmith created this revision.<br class="gmail_msg">
<br class="gmail_msg">
Improve performance of argument list parsing with large numbers of IDs and large numbers of arguments, by tracking a conservative range of indexes within the argument list that might contain an argument with each ID. In the worst case (when the first and last argument with a given ID are at the opposite ends of the argument list), this still results in a linear-time walk of the list, but it helps substantially in the common case where each ID occurs only once, or a few times close together in the list.<br class="gmail_msg">
<br class="gmail_msg">
This gives a ~10x speedup to clang's `test/Driver/response-file.c`, which constructs a very large set of command line arguments and feeds them to the clang driver.<br class="gmail_msg">
<br class="gmail_msg">
In passing I also converted the interface to use variadic templates. I can split those changes into a separate patch if you'd prefer.<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
Repository:<br class="gmail_msg">
  rL LLVM<br class="gmail_msg">
<br class="gmail_msg">
<a href="https://reviews.llvm.org/D30130" rel="noreferrer" class="gmail_msg" target="_blank">https://reviews.llvm.org/D30130</a><br class="gmail_msg">
<br class="gmail_msg">
Files:<br class="gmail_msg">
  include/llvm/Option/ArgList.h<br class="gmail_msg">
  lib/Option/ArgList.cpp<br class="gmail_msg">
<br class="gmail_msg">
</blockquote></div>