Implement a minor space optimization for the PCH identifier table,
which eliminates the storage for IdentifierInfo in the "uninteresting
identifier" cases. Sadly, this only brought back 7k of the 500k we
lost :(


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70325 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Frontend/PCHReader.cpp b/lib/Frontend/PCHReader.cpp
index 8324f8d..64929dc 100644
--- a/lib/Frontend/PCHReader.cpp
+++ b/lib/Frontend/PCHReader.cpp
@@ -220,6 +220,23 @@
                            const unsigned char* d,
                            unsigned DataLen) {
     using namespace clang::io;
+    pch::IdentID ID = ReadUnalignedLE32(d);
+    bool IsInteresting = ID & 0x01;
+
+    // Wipe out the "is interesting" bit.
+    ID = ID >> 1;
+
+    if (!IsInteresting) {
+      // For unintersting identifiers, just build the IdentifierInfo
+      // and associate it with the persistent ID.
+      IdentifierInfo *II = KnownII;
+      if (!II)
+        II = &Reader.getIdentifierTable().CreateIdentifierInfo(
+                                                 k.first, k.first + k.second);
+      Reader.SetIdentifierInfo(ID, II);
+      return II;
+    }
+
     uint32_t Bits = ReadUnalignedLE32(d);
     bool CPlusPlusOperatorKeyword = Bits & 0x01;
     Bits >>= 1;
@@ -233,8 +250,7 @@
     Bits >>= 10;
     unsigned TokenID = Bits & 0xFF;
     Bits >>= 8;
-
-    pch::IdentID ID = ReadUnalignedLE32(d);
+    
     assert(Bits == 0 && "Extra bits in the identifier?");
     DataLen -= 8;