[cfe-commits] r167800 - /cfe/trunk/lib/Lex/Lexer.cpp

Sean Silva silvas at purdue.edu
Tue Nov 13 15:59:42 PST 2012


Ok, thanks for the stats!

-- Sean Silva

On Tue, Nov 13, 2012 at 5:52 PM, Argyrios Kyrtzidis <akyrtzi at gmail.com> wrote:
> On Nov 12, 2012, at 6:48 PM, Sean Silva <silvas at purdue.edu> wrote:
>
>> Did you heed the comment above LexTokenInternal to carefully benchmark
>> any changes? If so, please cite the methodology and the results
>> obtained.
>
> I got the statistics from 80 runs of "clang -cc1 -Eonly -x objective-c++ t.m" where t.m is
>
> #import <Cocoa/Cocoa.h>
> #import <vector>
> #import <string>
> #import <map>
>
> r167799:
> name      avg     min     med     max      SD    total
> user     0.1176  0.1164  0.1174  0.1211  0.0008  9.4071
> sys             0.0503   0.0508  0.0501  0.0542  0.0008  4.0226
> wall            0.1705   0.1688  0.1697  0.1784  0.0015 13.6381
>
> r167800:
> name      avg     min     med     max      SD    total
> user     0.1175  0.1162  0.1174  0.1202  0.0008  9.3977
> sys             0.0501   0.0489  0.0497  0.0501  0.0007  4.0106
> wall            0.1703   0.1682  0.1703  0.1734  0.0014 13.6219
>
> r167801:
> name      avg     min     med     max      SD    total
> user     0.1181  0.1166  0.1180  0.1218  0.0009  9.4467
>  sys            0.0486   0.0488  0.0485  0.0508  0.0010  3.8909
> wall            0.1694   0.1673  0.1689  0.1757  0.0016 13.5489
>
>
>>
>> -- Sean Silva
>>
>> On Mon, Nov 12, 2012 at 8:02 PM, Argyrios Kyrtzidis <akyrtzi at gmail.com> wrote:
>>> Author: akirtzidis
>>> Date: Mon Nov 12 19:02:40 2012
>>> New Revision: 167800
>>>
>>> URL: http://llvm.org/viewvc/llvm-project?rev=167800&view=rev
>>> Log:
>>> In Lexer::LexTokenInternal, avoid code duplication; no functionality change.
>>>
>>> Modified:
>>>    cfe/trunk/lib/Lex/Lexer.cpp
>>>
>>> Modified: cfe/trunk/lib/Lex/Lexer.cpp
>>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/Lexer.cpp?rev=167800&r1=167799&r2=167800&view=diff
>>> ==============================================================================
>>> --- cfe/trunk/lib/Lex/Lexer.cpp (original)
>>> +++ cfe/trunk/lib/Lex/Lexer.cpp Mon Nov 12 19:02:40 2012
>>> @@ -3019,26 +3019,8 @@
>>>         // it's actually the start of a preprocessing directive.  Callback to
>>>         // the preprocessor to handle it.
>>>         // FIXME: -fpreprocessed mode??
>>> -        if (Result.isAtStartOfLine() && !LexingRawMode && !Is_PragmaLexer) {
>>> -          FormTokenWithChars(Result, CurPtr, tok::hash);
>>> -          PP->HandleDirective(Result);
>>> -
>>> -          // As an optimization, if the preprocessor didn't switch lexers, tail
>>> -          // recurse.
>>> -          if (PP->isCurrentLexer(this)) {
>>> -            // Start a new token. If this is a #include or something, the PP may
>>> -            // want us starting at the beginning of the line again.  If so, set
>>> -            // the StartOfLine flag and clear LeadingSpace.
>>> -            if (IsAtStartOfLine) {
>>> -              Result.setFlag(Token::StartOfLine);
>>> -              Result.clearFlag(Token::LeadingSpace);
>>> -              IsAtStartOfLine = false;
>>> -            }
>>> -            goto LexNextToken;   // GCC isn't tail call eliminating.
>>> -          }
>>> -
>>> -          return PP->Lex(Result);
>>> -        }
>>> +        if (Result.isAtStartOfLine() && !LexingRawMode && !Is_PragmaLexer)
>>> +          goto HandleDirective;
>>>
>>>         Kind = tok::hash;
>>>       }
>>> @@ -3203,25 +3185,8 @@
>>>       // it's actually the start of a preprocessing directive.  Callback to
>>>       // the preprocessor to handle it.
>>>       // FIXME: -fpreprocessed mode??
>>> -      if (Result.isAtStartOfLine() && !LexingRawMode && !Is_PragmaLexer) {
>>> -        FormTokenWithChars(Result, CurPtr, tok::hash);
>>> -        PP->HandleDirective(Result);
>>> -
>>> -        // As an optimization, if the preprocessor didn't switch lexers, tail
>>> -        // recurse.
>>> -        if (PP->isCurrentLexer(this)) {
>>> -          // Start a new token.  If this is a #include or something, the PP may
>>> -          // want us starting at the beginning of the line again.  If so, set
>>> -          // the StartOfLine flag and clear LeadingSpace.
>>> -          if (IsAtStartOfLine) {
>>> -            Result.setFlag(Token::StartOfLine);
>>> -            Result.clearFlag(Token::LeadingSpace);
>>> -            IsAtStartOfLine = false;
>>> -          }
>>> -          goto LexNextToken;   // GCC isn't tail call eliminating.
>>> -        }
>>> -        return PP->Lex(Result);
>>> -      }
>>> +      if (Result.isAtStartOfLine() && !LexingRawMode && !Is_PragmaLexer)
>>> +        goto HandleDirective;
>>>
>>>       Kind = tok::hash;
>>>     }
>>> @@ -3248,4 +3213,26 @@
>>>
>>>   // Update the location of token as well as BufferPtr.
>>>   FormTokenWithChars(Result, CurPtr, Kind);
>>> +  return;
>>> +
>>> +HandleDirective:
>>> +  // We parsed a # character and it's the start of a preprocessing directive.
>>> +
>>> +  FormTokenWithChars(Result, CurPtr, tok::hash);
>>> +  PP->HandleDirective(Result);
>>> +
>>> +  // As an optimization, if the preprocessor didn't switch lexers, tail
>>> +  // recurse.
>>> +  if (PP->isCurrentLexer(this)) {
>>> +    // Start a new token.  If this is a #include or something, the PP may
>>> +    // want us starting at the beginning of the line again.  If so, set
>>> +    // the StartOfLine flag and clear LeadingSpace.
>>> +    if (IsAtStartOfLine) {
>>> +      Result.setFlag(Token::StartOfLine);
>>> +      Result.clearFlag(Token::LeadingSpace);
>>> +      IsAtStartOfLine = false;
>>> +    }
>>> +    goto LexNextToken;   // GCC isn't tail call eliminating.
>>> +  }
>>> +  return PP->Lex(Result);
>>> }
>>>
>>>
>>> _______________________________________________
>>> cfe-commits mailing list
>>> cfe-commits at cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>



More information about the cfe-commits mailing list