kadircet added a comment.

Moreover, the most time consuming(well this might be subject to ltrace not 
counting IO wait times, as an openat above was only 5microsecs/call and a 
tolower call is 56 microsecs/call :D) bit actually seems like the string 
comparisons/manipulations done while parsing the command line args:

  % time     seconds  usecs/call     calls      function
  ------ ----------- ----------- --------- --------------------
   48.73    2.244680          56     39747 tolower
   21.88    1.008019          54     18522 strlen
    7.18    0.330929          54      6055 
_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_M_appendEPKcm
    5.45    0.251138          54      4605 _ZdlPv
    4.69    0.216144          54      3961 bcmp
    4.61    0.212397          54      3890 memcpy
    1.44    0.066164          54      1204 _Znwm

So caching the result of command line parsing might actually be better than 
caching IO. This also seems quite easy, as that part of the code is already 
isolated into a `clang::driver::Compilation`.
We can cache the result of command line parsing and invalidate it whenever 
compile commands changes(this is safe, as it is a pure function, (well maybe 
minus env variables, haven't checked in detail)). And later on use this for 
creating a compiler invocation.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D81719/new/

https://reviews.llvm.org/D81719



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to