summaryrefslogtreecommitdiffstats
path: root/clang/lib/Lex/PTHLexer.cpp
Commit message (Collapse)AuthorAgeFilesLines
* Enhance PTH 'getSpelling' caching:Ted Kremenek2009-01-091-15/+104
| | | | | | | | | | | | | | - Refactor caching logic into a helper class PTHSpellingSearch - Allow "random accesses" in the spelling cache, thus catching the remaining cases where 'getSpelling' wasn't hitting the PTH cache For -Eonly, PTH, Cocoa.h: - This reduces wall time by 3% (user time unchanged, sys time reduced) - This reduces the amount of paged source by 1112K. The remaining 1112K still being paged in is from somewhere else (investigating). llvm-svn: 62009
* Invert assertion condition.Ted Kremenek2009-01-091-1/+1
| | | | llvm-svn: 61961
* PTH: Hook up getSpelling() caching in PTHLexer. This results in a niceTed Kremenek2009-01-081-4/+62
| | | | | | | | | | | | | | | | | | | | performance gain. Here's what we see for -Eonly on Cocoa.h (using PTH): - wall time decreases by 21% (26% speedup overall) - system time decreases by 35% - user time decreases by 6% These reductions are due to not paging source files just to get spellings for literals. The solution in place doesn't appear to be 100% yet, as we still see some of the pages for source files getting mapped in. Using -print-stats, we see that SourceManager maps in 7179K less bytes of source text (reduction of 75%). Will investigate why the remaining 25% are getting paged in. With these changes, here's how PTH compares to non-PTH on Cocoa.h: -Eonly: PTH takes 64% of the time as non-PTH (54% speedup) -fsyntax-only: PTH takes 89% of the time as non-PTH (11% speedup) llvm-svn: 61913
* PTH:Ted Kremenek2009-01-081-6/+22
| | | | | | | | | | - Added stub PTHLexer::getSpelling() that will be used for fetching cached spellings from the PTH file. This doesn't do anything yet. - Added a hook in Preprocessor::getSpelling() to call PTHLexer::getSpelling() when using a PTHLexer. - Updated PTHLexer to read the offsets of spelling tables in the PTH file. llvm-svn: 61911
* PTH: Remove some methods and simplify some conditions in PTHLexer::Lex(). ↵Ted Kremenek2008-12-231-58/+30
| | | | | | No big functionality change. llvm-svn: 61381
* PTH: Use 3 bytes instead of 4 bytes to encode the persistent ID for a token.Ted Kremenek2008-12-231-9/+8
| | | | | | | - This reduces the PTH size for Cocoa.h by 7%. - The increases PTH -Eonly speed for Cocoa.h by 0.8%. llvm-svn: 61377
* Cosmetics: rename a variable and tighten spacing. No functionality change.Ted Kremenek2008-12-231-4/+2
| | | | llvm-svn: 61375
* PTH:Ted Kremenek2008-12-231-4/+2
| | | | | | | | - Encode the token length with 2 bytes instead of 4. - This reduces the size of the .pth file for Cocoa.h by 12%. - This speeds up PTH time (-Eonly) on Cocoa.h by 1.6%. llvm-svn: 61364
* PTH:Ted Kremenek2008-12-231-30/+39
| | | | | | | | | | | | | - In PTHLexer::Lex read all of the token data from PTH file before constructing the token. The idea is to enhance locality. - Do not use Read8/Read32 in PTHLexer::Lex. Inline these operations manually. - Change PTHManager::ReadIdentifierInfo() to PTHManager::GetIdentifierInfo(). They are functionally the same except that PTHLexer::Lex() reads the persistent id. These changes result in a 3.3% speedup for PTH on Cocoa.h (-Eonly). llvm-svn: 61363
* PTH:Ted Kremenek2008-12-231-111/+92
| | | | | | | | | | | | - Embed 'eom' tokens in PTH file. - Use embedded 'eom' tokens to not lazily generate them in the PTHLexer. This means that PTHLexer can always advance to the next token after reading a token (instead of buffering tokens using a copy). - Moved logic of 'ReadToken' into Lex. GetToken & ReadToken no longer exist. - These changes result in a 3.3% speedup (-Eonly) on Cocoa.h. - The code is a little gross. Many cleanups are possible and should be done. llvm-svn: 61360
* Use '&' to test StartOfLine flag.Ted Kremenek2008-12-181-1/+1
| | | | llvm-svn: 61205
* Rewrite PTHLexer::DiscardToEndOfLine() to not use GetToken and instead only ↵Ted Kremenek2008-12-171-9/+18
| | | | | | read the bytes needed to determine if a token is not at the start of the line. llvm-svn: 61172
* Change PTHLexer::getSourceLocation() to not call GetToken() and instead just ↵Ted Kremenek2008-12-171-0/+15
| | | | | | read the file offset in the token data buffer directly. llvm-svn: 61170
* add a dropped word backChris Lattner2008-12-171-1/+1
| | | | llvm-svn: 61152
* Shadow CurPtr with a local variable in ReadToken.Ted Kremenek2008-12-171-6/+12
| | | | llvm-svn: 61145
* PTH: Added minor 'sibling jumping' optimization for iterating over the side ↵Ted Kremenek2008-12-121-9/+37
| | | | | | table used for fast preprocessor block skipping. This has a minor performance improvement when preprocessing Cocoa.h, but can have some wins in pathologic cases. llvm-svn: 60966
* Added PTH optimization to not process entire blocks of tokens that appear in ↵Ted Kremenek2008-12-121-13/+98
| | | | | | skipped preprocessor blocks. This improves PTH speed by 6%. The code for this optimization itself is not very optimized, and will get cleaned up. llvm-svn: 60956
* PTH:Ted Kremenek2008-12-111-12/+18
| | | | | | | - Added a side-table per each token-cached file with the preprocessor conditional stack. This tracks what #if's are matched with what #endifs and where their respective tokens are in the PTH file. This will allow for quick skipping of excluded conditional branches in the Preprocessor. - Performance testing shows the addition of this information (without actually utilizing it) leads to no performance regressions. llvm-svn: 60911
* PTHLexer: Keep track of the location of the last '#' token and provide the ↵Ted Kremenek2008-12-111-6/+9
| | | | | | means to jump ahead in the token stream. llvm-svn: 60905
* Remove unused ivar CurTokenIdx.Ted Kremenek2008-12-111-1/+1
| | | | llvm-svn: 60896
* Declare PerIDCache as IdentifierInfo** instead of void*. This is just ↵Ted Kremenek2008-12-101-2/+2
| | | | | | cleaner. No performance change. llvm-svn: 60843
* Remove unneeded assertion.Ted Kremenek2008-12-041-1/+1
| | | | llvm-svn: 60559
* Use 'free' to release PerIDCache since it was allocated using calloc().Ted Kremenek2008-12-041-1/+1
| | | | llvm-svn: 60556
* PTH:Ted Kremenek2008-12-031-13/+23
| | | | | | Use an array instead of a DenseMap to cache persistent IDs -> IdentifierInfo*. This leads to a 4% speedup at -fsyntax-only using PTH. llvm-svn: 60452
* - Remove PTHManager.cpp. Move all of its functions to PTHLexer.cpp since ↵Ted Kremenek2008-12-031-7/+241
| | | | | | | | some of the internal methods are used by PTHLexer (their implementations are intertwined.) This enables some important inlining opportunities at -O3. - Don't construct an std::vector<Token> prior to feeding PTH tokens to the Preprocessor. Stream them off the PTH file directly. llvm-svn: 60447
* PTHLexer now owns the Token vector.Ted Kremenek2008-11-271-11/+4
| | | | llvm-svn: 60136
* In PTHLexer::DiscardToEndOfLine() use Lex() instead of AdvanceToken(). This ↵Ted Kremenek2008-11-211-1/+2
| | | | | | handles transitions in the preprocessor state. llvm-svn: 59845
* PTHLexer:Ted Kremenek2008-11-211-14/+26
| | | | | | - Move out logic for handling the end-of-file to LexEndOfFile (to match the Lexer) class. The logic now mirrors the Lexer class more, which allows us to pass most of the Preprocessor test cases. llvm-svn: 59768
* PTHLexer:Ted Kremenek2008-11-201-0/+12
| | | | | | | - Move PTHLexer::GetToken() to be inside PTHLexer.cpp. - When lexing in raw mode, null out identifiers. llvm-svn: 59744
* PTHLexer:Ted Kremenek2008-11-201-19/+11
| | | | | | | | | | - Rename 'CurToken' and 'LastToken' to 'CurTokenIdx' and 'LastTokenIdx' respectively. - Add helper methods GetToken(), AdvanceToken(), AtLastToken() to abstract away details of the token stream. This also allows us to easily replace their implementation later. llvm-svn: 59733
* Rewrote PTHLexer::Lex by digging through the sources of Lexer again. Now we ↵Ted Kremenek2008-11-201-28/+37
| | | | | | can do basic macro expansion using the PTHLexer. llvm-svn: 59724
* - Default initialize ParsingPreprocessorDirective, ParsingFilename, andTed Kremenek2008-11-201-15/+12
| | | | | | | | LexingRawMode in the ctor of PreprocessorLexer. - PTHLexer: Use "LastToken" instead of "NumToken" llvm-svn: 59690
* Add (untested) implementation of PTHLexer::isNextPPTokenLParen() and ↵Ted Kremenek2008-11-201-4/+14
| | | | | | PTHLexer::DiscardToEndOfLine(). llvm-svn: 59687
* Add stub for PTHLexer::isNextPPTokenLParen().Ted Kremenek2008-11-191-1/+6
| | | | llvm-svn: 59670
* When using a PTHLexer, use DiscardToEndOfLine() instead of ReadToEndOfLine().Ted Kremenek2008-11-191-0/+7
| | | | llvm-svn: 59668
* - Move static function IsNonPragmaNonMacroLexer into Preprocessor.h.Ted Kremenek2008-11-191-2/+2
| | | | | | | | | | | | | - Add variants of IsNonPragmaNonMacroLexer to accept an IncludeMacroStack entry (simplifies some uses). - Use IsNonPragmaNonMacroLexer in Preprocessor::LookupFile. - Add 'FileID' to PreprocessorLexer, and have Preprocessor query this fileid when looking up the FileEntry for a file Performance testing of -Eonly on Cocoa.h shows no performance regression because of this patch. llvm-svn: 59666
* Trivial tidyingChris Lattner2008-11-161-2/+0
| | | | llvm-svn: 59424
* Move some diagnostic handling to PreprocessorLexer.Ted Kremenek2008-11-121-4/+5
| | | | llvm-svn: 59191
* Add skeleton for PTH lexer.Ted Kremenek2008-11-121-0/+79
llvm-svn: 59169
OpenPOWER on IntegriCloud