[PATCH] D30130: ArgList: cache index ranges containing arguments with each ID

Richard Smith via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Feb 17 17:34:27 PST 2017


rsmith created this revision.

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.

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.

In passing I also converted the interface to use variadic templates. I can split those changes into a separate patch if you'd prefer.


Repository:
  rL LLVM

https://reviews.llvm.org/D30130

Files:
  include/llvm/Option/ArgList.h
  lib/Option/ArgList.cpp

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D30130.89000.patch
Type: text/x-patch
Size: 21342 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170218/a6c0cdb0/attachment.bin>


More information about the llvm-commits mailing list