dexonsmith added a comment.

In D136624#3893001 <https://reviews.llvm.org/D136624#3893001>, @jansvoboda11 
wrote:

> I tried implementing your suggestion (merging ranges of adjacent 
> non-affecting files and avoiding `FileID` lookups), but the numbers from 
> `-ftime-trace` are very noisy. I got more stable data by measuring clock 
> cycles and instruction counts, but nothing conclusive yet.
>
> Compilation of `CompilerInvocation.cpp` with implicit modules.
>
> - previous approach with vector + `FileID` lookup: +0.64% cycles and +1.68% 
> instructions,
> - current approach with merged `SourceRange`s: +0.38% cycles and +1.11% 
> instructions.
>
> I'll post here as I experiment more and get more data.

Nice; that seems like a bit of an improvement.

I'm curious; are system modules allowed to be non-affecting yet, or are they 
still assumed to be affecting? (It's the system modules that I think are most 
likely to be adjacent.)

My intuition is that there is likely some peephole that would be quite 
effective, that might not be useful for general `getFileID()` lookups.

- I already suggested "same as last lookup?"... I'm curious if that'll help. 
Maybe that's already in `getFileID()`, but now that you've factored out that 
call, it could be useful to replicate.
- You could also try: "past the the last non-affecting module?"
- You could also try: "before the first non-affecting module?"

I suspect you could collect some data to guide this, such as, for loaded 
locations (you could ignore "local" locations since they already have a 
peephole):

- Histogram of "loaded" vs. "between" vs. "after" non-affecting modules.
- Histogram of "same as last" vs. "same as last-1" vs. "different from last 2".
- [...]

Other things that might be useful to know:

- What effect is the merging having (or would it have)? (i.e., what's the 
histogram of "adjacent" non-affecting files? (e.g.: 9 ranges of non-affecting 
files, with two blocks of 5 files and seven blocks of 1 (which aren't adjacent 
to any others)))
- Is there a change in cycles/instructions when the module cache is hot? 
(presumably the common case)
- Are the PCM artifacts smaller?
- Are the PCMs bit-for-bit identical now when a non-affecting module is added 
to the input? (If not, why not?)
- What's the data for implicitly-discovered, explicitly-built modules?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D136624

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

Reply via email to