]> granicus.if.org Git - clang/commitdiff
PTH: Emitted tokens now consist of 12 bytes that are loaded used 3 32-bit loads....
authorTed Kremenek <kremenek@apple.com>
Mon, 19 Jan 2009 23:13:15 +0000 (23:13 +0000)
committerTed Kremenek <kremenek@apple.com>
Mon, 19 Jan 2009 23:13:15 +0000 (23:13 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@62542 91177308-0d34-0410-b5e6-96231b3b80d8

Driver/CacheTokens.cpp
lib/Lex/PTHLexer.cpp

index 7aa63b3a38420a0484c51c7b11b4d19258351ec1..1d33105668fccf7856d77f3563e017beaaab358d 100644 (file)
@@ -133,12 +133,13 @@ uint32_t PTHWriter::ResolveID(const IdentifierInfo* II) {
 
 void PTHWriter::EmitToken(const Token& T) {
   uint32_t fpos = PP.getSourceManager().getFullFilePos(T.getLocation());
-  Emit8(T.getKind());
-  Emit8(T.getFlags());
-  Emit24(ResolveID(T.getIdentifierInfo()));
+  
+  Emit32(((uint32_t) T.getKind()) |
+         (((uint32_t) T.getFlags()) << 8) |
+         (((uint32_t) T.getLength()) << 16));
+  Emit32(ResolveID(T.getIdentifierInfo()));
   Emit32(fpos);
-  Emit16(T.getLength());
-
+  
   // For specific tokens we cache their spelling.
   if (T.getIdentifierInfo())
     return;
@@ -270,9 +271,10 @@ Offset PTHWriter::EmitFileTable() {
 }
 
 PCHEntry PTHWriter::LexTokens(Lexer& L) {
-
-  // Record the location within the token file.
-  Offset off = (Offset) Out.tell();
+  // Pad 0's so that we emit tokens to a 4-byte alignment.
+  // This speed up reading them back in.
+  Offset off = (Offset) Out.tell();  
+  for (unsigned Pad = off % 4 ; Pad != 0 ; --Pad, ++off) Emit8(0);
   
   // Keep track of matching '#if' ... '#endif'.
   typedef std::vector<std::pair<Offset, unsigned> > PPCondTable;
index 7df8e35986e184cf92096bacd3aea7d2523618d7..87eb255da10c02e3751b30e34ec94edd3cb732ef 100644 (file)
@@ -25,7 +25,7 @@
 #include "llvm/ADT/OwningPtr.h"
 using namespace clang;
 
-#define DISK_TOKEN_SIZE (1+1+3+4+2)
+#define DISK_TOKEN_SIZE (1+1+2+4+4)
 
 //===----------------------------------------------------------------------===//
 // Utility methods for reading from the mmap'ed PTH file.
@@ -107,11 +107,14 @@ LexNextToken:
   const unsigned char *CurPtrShadow = CurPtr;  
 
   // Read in the data for the token.
-  tok::TokenKind TKind = (tok::TokenKind) Read8(CurPtrShadow);
-  Token::TokenFlags TFlags = (Token::TokenFlags) Read8(CurPtrShadow);
-  uint32_t IdentifierID = Read24(CurPtrShadow);
+  unsigned Word0 = Read32(CurPtrShadow);
+  uint32_t IdentifierID = Read32(CurPtrShadow);
   uint32_t FileOffset = Read32(CurPtrShadow);
-  uint32_t Len = Read16(CurPtrShadow);
+  
+  tok::TokenKind TKind = (tok::TokenKind) (Word0 & 0xFF);
+  Token::TokenFlags TFlags = (Token::TokenFlags) ((Word0 >> 8) & 0xFF);
+  uint32_t Len = Word0 >> 16;
+
   CurPtr = CurPtrShadow;
   
   //===--------------------------------------==//