From c732f5a4ae13a75b5dfa8f640a50f94db2d3092c Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Mon, 27 Apr 2009 18:24:17 +0000 Subject: [PATCH] encode the type and decl offsets with 32-bits for entry instead of 64 bits. This cuts 400KB off the PCH file for cocoa (7.1 -> 6.7MB): Before: Record Histogram: Count # Bits % Abv Record Kind 1 14296 SOURCE_LOCATION_PRELOADS 1 1699598 100.00 SOURCE_LOCATION_OFFSETS 1 1870766 100.00 METHOD_POOL 1 212988 100.00 SELECTOR_OFFSETS 1 88 STATISTICS 1 106 SPECIAL_TYPES 1 18033788 100.00 IDENTIFIER_TABLE 1 1806428 100.00 IDENTIFIER_OFFSET 1 170 100.00 TARGET_TRIPLE 1 268 LANGUAGE_OPTIONS 1 5168252 100.00 DECL_OFFSET 1 952700 100.00 TYPE_OFFSET After: Record Histogram: Count # Bits % Abv Record Kind 1 14296 SOURCE_LOCATION_PRELOADS 1 1699598 100.00 SOURCE_LOCATION_OFFSETS 1 1870766 100.00 METHOD_POOL 1 212988 100.00 SELECTOR_OFFSETS 1 88 STATISTICS 1 106 SPECIAL_TYPES 1 18033788 100.00 IDENTIFIER_TABLE 1 1806428 100.00 IDENTIFIER_OFFSET 1 170 100.00 TARGET_TRIPLE 1 268 LANGUAGE_OPTIONS 1 2584156 100.00 DECL_OFFSET 1 476380 100.00 TYPE_OFFSET git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70216 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Frontend/PCHReader.h | 4 ++-- include/clang/Frontend/PCHWriter.h | 4 ++-- lib/Frontend/PCHReader.cpp | 4 ++-- lib/Frontend/PCHWriter.cpp | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/include/clang/Frontend/PCHReader.h b/include/clang/Frontend/PCHReader.h index fed169354e..07f2bb260f 100644 --- a/include/clang/Frontend/PCHReader.h +++ b/include/clang/Frontend/PCHReader.h @@ -116,7 +116,7 @@ private: /// \brief Offset of each type within the bitstream, indexed by the /// type ID, or the representation of a Type*. - const uint64_t *TypeOffsets; + const uint32_t *TypeOffsets; /// \brief Types that have already been loaded from the PCH file. /// @@ -126,7 +126,7 @@ private: /// \brief Offset of each declaration within the bitstream, indexed /// by the declaration ID (-1). - const uint64_t *DeclOffsets; + const uint32_t *DeclOffsets; /// \brief Declarations that have already been loaded from the PCH file. /// diff --git a/include/clang/Frontend/PCHWriter.h b/include/clang/Frontend/PCHWriter.h index 4d1262223e..96c6c79de4 100644 --- a/include/clang/Frontend/PCHWriter.h +++ b/include/clang/Frontend/PCHWriter.h @@ -64,7 +64,7 @@ private: /// \brief Offset of each declaration in the bitstream, indexed by /// the declaration's ID. - llvm::SmallVector DeclOffsets; + std::vector DeclOffsets; /// \brief Queue containing the declarations that we still need to /// emit. @@ -81,7 +81,7 @@ private: /// \brief Offset of each type in the bitstream, indexed by /// the type's ID. - llvm::SmallVector TypeOffsets; + std::vector TypeOffsets; /// \brief The type ID that will be assigned to the next new type. pch::TypeID NextTypeID; diff --git a/lib/Frontend/PCHReader.cpp b/lib/Frontend/PCHReader.cpp index bace23ccc6..f26cd84f8d 100644 --- a/lib/Frontend/PCHReader.cpp +++ b/lib/Frontend/PCHReader.cpp @@ -793,7 +793,7 @@ PCHReader::ReadPCHBlock() { Error("Duplicate TYPE_OFFSET record in PCH file"); return Failure; } - TypeOffsets = (const uint64_t *)BlobStart; + TypeOffsets = (const uint32_t *)BlobStart; TypesLoaded.resize(Record[0]); break; @@ -802,7 +802,7 @@ PCHReader::ReadPCHBlock() { Error("Duplicate DECL_OFFSET record in PCH file"); return Failure; } - DeclOffsets = (const uint64_t *)BlobStart; + DeclOffsets = (const uint32_t *)BlobStart; DeclsLoaded.resize(Record[0]); break; diff --git a/lib/Frontend/PCHWriter.cpp b/lib/Frontend/PCHWriter.cpp index bb72f78546..82eb5dffe4 100644 --- a/lib/Frontend/PCHWriter.cpp +++ b/lib/Frontend/PCHWriter.cpp @@ -1565,7 +1565,7 @@ void PCHWriter::WritePCH(Sema &SemaRef) { Record.push_back(TypeOffsets.size()); Stream.EmitRecordWithBlob(TypeOffsetAbbrev, Record, (const char *)&TypeOffsets.front(), - TypeOffsets.size() * sizeof(uint64_t)); + TypeOffsets.size() * sizeof(TypeOffsets[0])); // Write the declaration offsets array Abbrev = new BitCodeAbbrev(); @@ -1578,7 +1578,7 @@ void PCHWriter::WritePCH(Sema &SemaRef) { Record.push_back(DeclOffsets.size()); Stream.EmitRecordWithBlob(DeclOffsetAbbrev, Record, (const char *)&DeclOffsets.front(), - DeclOffsets.size() * sizeof(uint64_t)); + DeclOffsets.size() * sizeof(DeclOffsets[0])); // Write the record of special types. Record.clear(); -- 2.50.1