[cfe-dev] Hitting LexIdentifier with a minor performance hit

Chris Lattner clattner at apple.com
Tue Dec 8 21:52:06 PST 2009

On Dec 8, 2009, at 9:21 PM, Sean Hunt wrote:

> Chris Lattner wrote:
>> On Dec 4, 2009, at 12:40 PM, Sean Hunt wrote:
>>> Hey,
>>> I'd like to split LexIdentifier into two functions so that the actual identifier lexing logic can be reused for user-defined literal suffixes. Since this is a change to the lexing code that will probably have a negative performance impact, however slight (one function call of overhead per identifier is added; one goto is removed per "nasty" identifier (a \, $, or ? is present)), I wanted to check it by first.
>>> The effective change is that the literal lexing code will be able to use LexIdentifierInternal to parse the suffix when I add that in.
>> This is one of the most performance sensitive pieces of the entire compiler.  Is there any other way to avoid this (e.g. through code duplication or macros)?  Have you measured the performance impact of this change?
>> -Chris
> Output of 'time make test' without patch:

make test isn't a very interesting way to test the performance of this, because it is dominated by other things.  Make sure you have a release-asserts build (do make ENABLE_OPTIMIZED=1 DISABLE_ASSERTIONS=1) then do something like this:

clang -E -P somethinglarge.m -o out.mi (or .cpp)
time clang-cc -Eonly out.mi


More information about the cfe-dev mailing list