]> granicus.if.org Git - clang/commitdiff
Optimize IdentifierInfo storage within the precompiled header. We've
authorDouglas Gregor <dgregor@apple.com>
Tue, 28 Apr 2009 21:32:13 +0000 (21:32 +0000)
committerDouglas Gregor <dgregor@apple.com>
Tue, 28 Apr 2009 21:32:13 +0000 (21:32 +0000)
now gotten back about 180k of the 500k we lost.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70326 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Frontend/PCHReader.cpp
lib/Frontend/PCHWriter.cpp

index 64929dcb1db99cc6f3dcec102dda1c7b8d6210f7..4e3f50db2e67de8d9e604ed52f877a3169b77556 100644 (file)
@@ -237,7 +237,7 @@ public:
       return II;
     }
 
-    uint32_t Bits = ReadUnalignedLE32(d);
+    unsigned Bits = ReadUnalignedLE16(d);
     bool CPlusPlusOperatorKeyword = Bits & 0x01;
     Bits >>= 1;
     bool Poisoned = Bits & 0x01;
@@ -248,11 +248,9 @@ public:
     Bits >>= 1;
     unsigned ObjCOrBuiltinID = Bits & 0x3FF;
     Bits >>= 10;
-    unsigned TokenID = Bits & 0xFF;
-    Bits >>= 8;
     
     assert(Bits == 0 && "Extra bits in the identifier?");
-    DataLen -= 8;
+    DataLen -= 6;
 
     // Build the IdentifierInfo itself and link the identifier ID with
     // the new IdentifierInfo.
@@ -264,9 +262,6 @@ public:
 
     // Set or check the various bits in the IdentifierInfo structure.
     // FIXME: Load token IDs lazily, too?
-    assert((unsigned)II->getTokenID() == TokenID && 
-           "Incorrect token ID loaded"); 
-    (void)TokenID;
     II->setObjCOrBuiltinID(ObjCOrBuiltinID);
     assert(II->isExtensionToken() == ExtensionToken && 
            "Incorrect extension token flag");
@@ -279,9 +274,9 @@ public:
     // If this identifier is a macro, deserialize the macro
     // definition.
     if (hasMacroDefinition) {
-      uint32_t Offset = ReadUnalignedLE64(d);
+      uint32_t Offset = ReadUnalignedLE32(d);
       Reader.ReadMacroRecord(Offset);
-      DataLen -= 8;
+      DataLen -= 4;
     }
 
     // Read all of the declarations visible at global scope with this
index 4870b4933a818f25f2e7242c26da0d6f6c4314a1..04b552a488e764a13dded729d09977a9e2277289 100644 (file)
@@ -1322,10 +1322,10 @@ public:
     unsigned KeyLen = strlen(II->getName()) + 1;
     unsigned DataLen = 4; // 4 bytes for the persistent ID << 1
     if (isInterestingIdentifier(II)) {
-      DataLen += 4; // 4 bytes for token ID, builtin, flags
+      DataLen += 2; // 2 bytes for builtin ID, flags
       if (II->hasMacroDefinition() && 
           !PP.getMacroInfo(const_cast<IdentifierInfo *>(II))->isBuiltinMacro())
-        DataLen += 8;
+        DataLen += 4;
       for (IdentifierResolver::iterator D = IdentifierResolver::begin(II),
                                      DEnd = IdentifierResolver::end();
            D != DEnd; ++D)
@@ -1353,21 +1353,21 @@ public:
       clang::io::Emit32(Out, ID << 1);
       return;
     }
+
     clang::io::Emit32(Out, (ID << 1) | 0x01);
     uint32_t Bits = 0;
     bool hasMacroDefinition = 
       II->hasMacroDefinition() && 
       !PP.getMacroInfo(const_cast<IdentifierInfo *>(II))->isBuiltinMacro();
-    Bits = Bits | (uint32_t)II->getTokenID();
-    Bits = (Bits << 10) | (uint32_t)II->getObjCOrBuiltinID();
+    Bits = (uint32_t)II->getObjCOrBuiltinID();
     Bits = (Bits << 1) | hasMacroDefinition;
     Bits = (Bits << 1) | II->isExtensionToken();
     Bits = (Bits << 1) | II->isPoisoned();
     Bits = (Bits << 1) | II->isCPlusPlusOperatorKeyword();
-    clang::io::Emit32(Out, Bits);
+    clang::io::Emit16(Out, Bits);
 
     if (hasMacroDefinition)
-      clang::io::Emit64(Out, Writer.getMacroOffset(II));
+      clang::io::Emit32(Out, Writer.getMacroOffset(II));
 
     // Emit the declaration IDs in reverse order, because the
     // IdentifierResolver provides the declarations as they would be