[llvm] d54c252 - [Clang options] Optimize optionMatches() runtime by removing mallocs

Nadav Rotem via llvm-commits llvm-commits at lists.llvm.org
Wed Aug 12 23:10:18 PDT 2020


Author: Nadav Rotem
Date: 2020-08-12T23:07:07-07:00
New Revision: d54c252bc8a15bc80bb9f0a83b3bebc6d211144a

URL: https://github.com/llvm/llvm-project/commit/d54c252bc8a15bc80bb9f0a83b3bebc6d211144a
DIFF: https://github.com/llvm/llvm-project/commit/d54c252bc8a15bc80bb9f0a83b3bebc6d211144a.diff

LOG: [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

Added: 
    

Modified: 
    llvm/lib/Option/OptTable.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Option/OptTable.cpp b/llvm/lib/Option/OptTable.cpp
index 2b7fcf55a57c..740e02a9d2f0 100644
--- a/llvm/lib/Option/OptTable.cpp
+++ b/llvm/lib/Option/OptTable.cpp
@@ -198,8 +198,9 @@ static unsigned matchOption(const OptTable::Info *I, StringRef Str,
 static bool optionMatches(const OptTable::Info &In, StringRef Option) {
   if (In.Prefixes)
     for (size_t I = 0; In.Prefixes[I]; I++)
-      if (Option == std::string(In.Prefixes[I]) + In.Name)
-        return true;
+      if (Option.endswith(In.Name))
+        if (Option == std::string(In.Prefixes[I]) + In.Name)
+          return true;
   return false;
 }
 


        


More information about the llvm-commits mailing list