[Clang options] Optimize optionMatches() runtime by removing mallocs
authorNadav Rotem <nadav256@gmail.com>
Thu, 13 Aug 2020 05:47:53 +0000 (22:47 -0700)
committerNadav Rotem <nadav256@gmail.com>
Thu, 13 Aug 2020 06:07:07 +0000 (23:07 -0700)
commitd54c252bc8a15bc80bb9f0a83b3bebc6d211144a
tree3e35f1ac7cd8a6e002821d6bd72ab94aca90e6c9
parentf902a7eccf30a762d9a533c3884edfb692c26a09
[Clang options] Optimize optionMatches() runtime by removing mallocs

The method optionMatches() constructs 9865 std::string instances when comparing different
options. Many of these instances exceed the size of the internal storage and force memory
allocations. This patch adds an early exit check that eliminates most of the string allocations
while keeping the code simple.

Example inputs:
Prefix: /, Name: Fr
Prefix: -, Name: Fr
Prefix: -, Name: fsanitize-address-field-padding=
Prefix: -, Name: fsanitize-address-globals-dead-stripping
Prefix: -, Name: fsanitize-address-poison-custom-array-cookie
Prefix: -, Name: fsanitize-address-use-after-scope
Prefix: -, Name: fsanitize-address-use-odr-indicator
Prefix: -, Name: fsanitize-blacklist=

Differential Revision: D85538
llvm/lib/Option/OptTable.cpp