weiwang created this revision. Herald added subscribers: hoy, wenlei. weiwang requested review of this revision. Herald added a project: clang. Herald added a subscriber: cfe-commits.
Reduce memory footprint of AST Reader/Writer: 1. Adjust internal data containers' element type. 2. Switch to set for deduplication of deferred diags. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D101793 Files: clang/include/clang/Serialization/ASTReader.h clang/include/clang/Serialization/ASTWriter.h clang/lib/Serialization/ASTReader.cpp clang/lib/Serialization/ASTWriter.cpp
Index: clang/lib/Serialization/ASTWriter.cpp =================================================================== --- clang/lib/Serialization/ASTWriter.cpp +++ clang/lib/Serialization/ASTWriter.cpp @@ -4733,9 +4733,9 @@ } // Build a record containing all of the DeclsToCheckForDeferredDiags. - RecordData DeclsToCheckForDeferredDiags; + SmallVector<serialization::DeclID, 64> DeclsToCheckForDeferredDiags; for (auto *D : SemaRef.DeclsToCheckForDeferredDiags) - AddDeclRef(D, DeclsToCheckForDeferredDiags); + DeclsToCheckForDeferredDiags.push_back(GetDeclRef(D)); RecordData DeclUpdatesOffsetsRecord; Index: clang/lib/Serialization/ASTReader.cpp =================================================================== --- clang/lib/Serialization/ASTReader.cpp +++ clang/lib/Serialization/ASTReader.cpp @@ -3835,7 +3835,7 @@ case DECLS_TO_CHECK_FOR_DEFERRED_DIAGS: for (unsigned I = 0, N = Record.size(); I != N; ++I) - DeclsToCheckForDeferredDiags.push_back(getGlobalDeclID(F, Record[I])); + DeclsToCheckForDeferredDiags.insert(getGlobalDeclID(F, Record[I])); break; } } @@ -8359,10 +8359,8 @@ void ASTReader::ReadDeclsToCheckForDeferredDiags( llvm::SmallVector<Decl *, 4> &Decls) { - for (unsigned I = 0, N = DeclsToCheckForDeferredDiags.size(); I != N; - ++I) { - auto *D = dyn_cast_or_null<Decl>( - GetDecl(DeclsToCheckForDeferredDiags[I])); + for (auto I : DeclsToCheckForDeferredDiags) { + auto *D = dyn_cast_or_null<Decl>(GetDecl(I)); if (D) Decls.push_back(D); } Index: clang/include/clang/Serialization/ASTWriter.h =================================================================== --- clang/include/clang/Serialization/ASTWriter.h +++ clang/include/clang/Serialization/ASTWriter.h @@ -402,8 +402,8 @@ /// headers. The declarations themselves are stored as declaration /// IDs, since they will be written out to an EAGERLY_DESERIALIZED_DECLS /// record. - SmallVector<uint64_t, 16> EagerlyDeserializedDecls; - SmallVector<uint64_t, 16> ModularCodegenDecls; + SmallVector<serialization::DeclID, 16> EagerlyDeserializedDecls; + SmallVector<serialization::DeclID, 16> ModularCodegenDecls; /// DeclContexts that have received extensions since their serialized /// form. Index: clang/include/clang/Serialization/ASTReader.h =================================================================== --- clang/include/clang/Serialization/ASTReader.h +++ clang/include/clang/Serialization/ASTReader.h @@ -767,21 +767,21 @@ /// This contains the data loaded from all EAGERLY_DESERIALIZED_DECLS blocks /// in the chain. The referenced declarations are deserialized and passed to /// the consumer eagerly. - SmallVector<uint64_t, 16> EagerlyDeserializedDecls; + SmallVector<serialization::DeclID, 16> EagerlyDeserializedDecls; /// The IDs of all tentative definitions stored in the chain. /// /// Sema keeps track of all tentative definitions in a TU because it has to /// complete them and pass them on to CodeGen. Thus, tentative definitions in /// the PCH chain must be eagerly deserialized. - SmallVector<uint64_t, 16> TentativeDefinitions; + SmallVector<serialization::DeclID, 16> TentativeDefinitions; /// The IDs of all CXXRecordDecls stored in the chain whose VTables are /// used. /// /// CodeGen has to emit VTables for these records, so they have to be eagerly /// deserialized. - SmallVector<uint64_t, 64> VTableUses; + SmallVector<serialization::DeclID, 64> VTableUses; /// A snapshot of the pending instantiations in the chain. /// @@ -789,7 +789,7 @@ /// end of the TU. It consists of a pair of values for every pending /// instantiation where the first value is the ID of the decl and the second /// is the instantiation location. - SmallVector<uint64_t, 64> PendingInstantiations; + SmallVector<serialization::DeclID, 64> PendingInstantiations; //@} @@ -799,24 +799,24 @@ /// A snapshot of Sema's unused file-scoped variable tracking, for /// generating warnings. - SmallVector<uint64_t, 16> UnusedFileScopedDecls; + SmallVector<serialization::DeclID, 16> UnusedFileScopedDecls; /// A list of all the delegating constructors we've seen, to diagnose /// cycles. - SmallVector<uint64_t, 4> DelegatingCtorDecls; + SmallVector<serialization::DeclID, 4> DelegatingCtorDecls; /// Method selectors used in a @selector expression. Used for /// implementation of -Wselector. - SmallVector<uint64_t, 64> ReferencedSelectorsData; + SmallVector<serialization::SelectorID, 64> ReferencedSelectorsData; /// A snapshot of Sema's weak undeclared identifier tracking, for /// generating warnings. - SmallVector<uint64_t, 64> WeakUndeclaredIdentifiers; + SmallVector<serialization::IdentifierID, 64> WeakUndeclaredIdentifiers; /// The IDs of type aliases for ext_vectors that exist in the chain. /// /// Used by Sema for finding sugared names for ext_vectors in diagnostics. - SmallVector<uint64_t, 4> ExtVectorDecls; + SmallVector<serialization::DeclID, 4> ExtVectorDecls; //@} @@ -827,7 +827,7 @@ /// The IDs of all potentially unused typedef names in the chain. /// /// Sema tracks these to emit warnings. - SmallVector<uint64_t, 16> UnusedLocalTypedefNameCandidates; + SmallVector<serialization::DeclID, 16> UnusedLocalTypedefNameCandidates; /// Our current depth in #pragma cuda force_host_device begin/end /// macros. @@ -836,18 +836,18 @@ /// The IDs of the declarations Sema stores directly. /// /// Sema tracks a few important decls, such as namespace std, directly. - SmallVector<uint64_t, 4> SemaDeclRefs; + SmallVector<serialization::DeclID, 4> SemaDeclRefs; /// The IDs of the types ASTContext stores directly. /// /// The AST context tracks a few important types, such as va_list, directly. - SmallVector<uint64_t, 16> SpecialTypes; + SmallVector<serialization::TypeID, 16> SpecialTypes; /// The IDs of CUDA-specific declarations ASTContext stores directly. /// /// The AST context tracks a few important decls, currently cudaConfigureCall, /// directly. - SmallVector<uint64_t, 2> CUDASpecialDeclRefs; + SmallVector<serialization::DeclID, 2> CUDASpecialDeclRefs; /// The floating point pragma option settings. SmallVector<uint64_t, 1> FPPragmaOptions; @@ -896,11 +896,11 @@ llvm::DenseMap<const Decl *, std::set<std::string>> OpenCLDeclExtMap; /// A list of the namespaces we've seen. - SmallVector<uint64_t, 4> KnownNamespaces; + SmallVector<serialization::DeclID, 4> KnownNamespaces; /// A list of undefined decls with internal linkage followed by the /// SourceLocation of a matching ODR-use. - SmallVector<uint64_t, 8> UndefinedButUsed; + SmallVector<serialization::DeclID, 8> UndefinedButUsed; /// Delete expressions to analyze at the end of translation unit. SmallVector<uint64_t, 8> DelayedDeleteExprs; @@ -912,8 +912,7 @@ /// The IDs of all decls to be checked for deferred diags. /// /// Sema tracks these to emit deferred diags. - SmallVector<uint64_t, 4> DeclsToCheckForDeferredDiags; - + llvm::SmallSetVector<serialization::DeclID, 4> DeclsToCheckForDeferredDiags; public: struct ImportedSubmodule {
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits