diff options
| author | Ted Kremenek <kremenek@apple.com> | 2008-12-23 02:52:12 +0000 |
|---|---|---|
| committer | Ted Kremenek <kremenek@apple.com> | 2008-12-23 02:52:12 +0000 |
| commit | 1bd0a550d0197ca3e336f8001357ad31d482713c (patch) | |
| tree | 331d7c68d1f8faddb3c3d598fe3c10959a2b4dac | |
| parent | 66076a964b811334c436964df1fb82501d4a9f32 (diff) | |
| download | bcm5719-llvm-1bd0a550d0197ca3e336f8001357ad31d482713c.tar.gz bcm5719-llvm-1bd0a550d0197ca3e336f8001357ad31d482713c.zip | |
PTH:
- 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
| -rw-r--r-- | clang/Driver/CacheTokens.cpp | 10 | ||||
| -rw-r--r-- | clang/lib/Lex/PTHLexer.cpp | 6 |
2 files changed, 10 insertions, 6 deletions
diff --git a/clang/Driver/CacheTokens.cpp b/clang/Driver/CacheTokens.cpp index d8c92497b6b..c97b2259d52 100644 --- a/clang/Driver/CacheTokens.cpp +++ b/clang/Driver/CacheTokens.cpp @@ -30,6 +30,10 @@ typedef uint32_t Offset; typedef llvm::DenseMap<const FileEntry*,std::pair<Offset,Offset> > PCHMap; typedef llvm::DenseMap<const IdentifierInfo*,uint32_t> IDMap; +static void Emit8(llvm::raw_ostream& Out, uint32_t V) { + Out << (unsigned char)(V); +} + static void Emit32(llvm::raw_ostream& Out, uint32_t V) { Out << (unsigned char)(V); Out << (unsigned char)(V >> 8); @@ -37,8 +41,10 @@ static void Emit32(llvm::raw_ostream& Out, uint32_t V) { Out << (unsigned char)(V >> 24); } -static void Emit8(llvm::raw_ostream& Out, uint32_t V) { +static void Emit16(llvm::raw_ostream& Out, uint32_t V) { Out << (unsigned char)(V); + Out << (unsigned char)(V >> 8); + assert((V >> 16) == 0); } static void EmitBuf(llvm::raw_ostream& Out, const char* I, const char* E) { @@ -69,7 +75,7 @@ static void EmitToken(llvm::raw_ostream& Out, const Token& T, Emit8(Out, T.getFlags()); Emit32(Out, ResolveID(IM, idcount, T.getIdentifierInfo())); Emit32(Out, SMgr.getFullFilePos(T.getLocation())); - Emit32(Out, T.getLength()); + Emit16(Out, T.getLength()); } struct IDData { diff --git a/clang/lib/Lex/PTHLexer.cpp b/clang/lib/Lex/PTHLexer.cpp index 1038e3b70cc..252e2f87daa 100644 --- a/clang/lib/Lex/PTHLexer.cpp +++ b/clang/lib/Lex/PTHLexer.cpp @@ -26,7 +26,7 @@ using namespace clang; -#define DISK_TOKEN_SIZE (2+3*4) +#define DISK_TOKEN_SIZE (2+4+4+2) //===----------------------------------------------------------------------===// // Utility methods for reading from the mmap'ed PTH file. @@ -79,9 +79,7 @@ LexNextToken: | (((uint32_t) CurPtrShadow[9]) << 24); uint32_t Len = ((uint32_t) CurPtrShadow[10]) - | (((uint32_t) CurPtrShadow[11]) << 8) - | (((uint32_t) CurPtrShadow[12]) << 16) - | (((uint32_t) CurPtrShadow[13]) << 24); + | (((uint32_t) CurPtrShadow[11]) << 8); CurPtr = (const char*) (CurPtrShadow + DISK_TOKEN_SIZE); |

