mboehme added a comment.

In D128097#3604295 <https://reviews.llvm.org/D128097#3604295>, @yurai007 wrote:

> Disclaimer: I'm not front-end guy.
>
> After running 7zip benchmark under perf and comparing origin (7acc88be031 
> <https://reviews.llvm.org/rG7acc88be0312c721bc082ed9934e381d297f4707>) with 
> fix (0d300da799b0 
> <https://reviews.llvm.org/rG0d300da799b06931eb6b974198d683548a8c8392>) 
> following diff can be seen:

Thanks a lot for helping me out here!

> Instructions change  |        Symbol
> +0.12%                           |     clang::Preprocessor::getMacroDefinition

Hm, this surprises me. AFAICT, all of the relevant places that this gets called 
from are in the lexer… and I don’t think my patch should have affected what the 
parser does with the lexer. I almost suspect that this regression is due to 
some other change that happened between 7acc88be031 
<https://reviews.llvm.org/rG7acc88be0312c721bc082ed9934e381d297f4707> and 
0d300da799b0 
<https://reviews.llvm.org/rG0d300da799b06931eb6b974198d683548a8c8392>?

> +0.07%                           |     GetDeclSpecTypeForDeclarator

I think you may potentially have found the reason for this – see below.

> +0.04%                           |     clang::Parser::ParseDirectDeclarator 
> +0.03%                           |     clang::Sema::ActOnFunctionDeclarator 
> +0.03%                           |     clang::Sema::ProcessDeclAttributes

An increase here is expected as my patch did add new code to 
`ProcessDeclAttributes()` to handle the “sliding” logic; as such, this increase 
in time seems hard to avoid.

> In 8c7b64b5ae2a 
> <https://reviews.llvm.org/rG8c7b64b5ae2a09027c38db969a04fc9ddd0cd6bb> commit 
> those 2 code changes catch my eyes as (maybe) relevant to above perf diff:
>
> 1. Change in Parser::ParseDeclGroup. That function looks quite heavy and it's 
> caller of ParseDirectDeclarator/ActOnFunctionDeclarator (and even 
> getMacroDefinition?)

Here’s what changed in that function:

  -  ParsingDeclarator D(*this, DS, Context);
  +  // Consume all of the attributes from `Attrs` by moving them to our own 
local
  +  // list. This ensures that we will not attempt to interpret them as 
statement
  +  // attributes higher up the callchain.
  +  ParsedAttributes LocalAttrs(AttrFactory);
  +  LocalAttrs.takeAllFrom(Attrs);
  +  ParsingDeclarator D(*this, DS, LocalAttrs, Context);

(`Attrs` is a new parameter of `ParseDeclGroup()`.)

I’m not sure that this change per se had a significant impact on compile time 
though, as `ParseDeclGroup()` itself doesn’t show up in the diff above. The 
change also shouldn’t really affect how much time we spend in 
`ParseDirectDeclarator()` or `ActOnFunctionDeclarator()`.

I’m inclined to say that the extra time spent in `ParseDirectDeclarator()` and 
`ActOnFunctionDeclarator()` is due to some other change that happened in the 
meantime, even though I realize that this sounds like a cheap excuse…

> 2. Change in GetDeclSpecTypeForDeclarator. After 8c7b64b5ae2a 
> <https://reviews.llvm.org/rG8c7b64b5ae2a09027c38db969a04fc9ddd0cd6bb> 
> distributeTypeAttrsFromDeclarator is called unconditionally which maybe 
> matters.

Thanks for pointing this out to me – this could be the explanation for the 
0.07% slowdown that you saw in `GetDeclSpecTypeForDeclarator()`, as this is the 
only change in that function. Of course, the other possibility is that 
GetDeclSpecTypeForDeclarator() is now getting called more often, but I don’t 
immediately see why that should be the case.

I had removed the if statement because it’s superfluous from a behavioral point 
of view, but it may well be important for performance. I’ve prepared 
https://reviews.llvm.org/D128439 to re-add that statement.

I unfortunately haven’t yet been able to get the test suite running. Since you 
do have a running setup, do you think you could test the compile time impact of 
that patch on 7zip? Please do this only if it’s not a big deal – otherwise, 
I’ll just submit the patch for review, as it seems that it should have at least 
a small positive influence on performance.

Again, thanks for your input here!


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D128097

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

Reply via email to