Ok, thanks for the stats! -- Sean Silva
On Tue, Nov 13, 2012 at 5:52 PM, Argyrios Kyrtzidis <[email protected]> wrote: > On Nov 12, 2012, at 6:48 PM, Sean Silva <[email protected]> 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 <[email protected]> >> 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 >>> [email protected] >>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits > _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
