[llvm] r303707 - Don't do a full scan of the type stream before processing records.

Zachary Turner via llvm-commits llvm-commits at lists.llvm.org
Tue May 23 17:26:27 PDT 2017


Author: zturner
Date: Tue May 23 19:26:27 2017
New Revision: 303707

URL: http://llvm.org/viewvc/llvm-project?rev=303707&view=rev
Log:
Don't do a full scan of the type stream before processing records.

LazyRandomTypeCollection is designed for random access, and in
order to provide this it lazily indexes ranges of types.  In the
case of types from an object file, there is no partial index
to build off of, so it has to index the full stream up front.
However, merging types only requires sequential access, and when
that is needed, this extra work is simply wasted.  Changing the
algorithm to work on sequential arrays of types rather than
random access type collections eliminates this up front scan.

Modified:
    llvm/trunk/include/llvm/DebugInfo/CodeView/TypeStreamMerger.h
    llvm/trunk/lib/DebugInfo/CodeView/TypeStreamMerger.cpp

Modified: llvm/trunk/include/llvm/DebugInfo/CodeView/TypeStreamMerger.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/TypeStreamMerger.h?rev=303707&r1=303706&r2=303707&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/CodeView/TypeStreamMerger.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/CodeView/TypeStreamMerger.h Tue May 23 19:26:27 2017
@@ -40,7 +40,7 @@ class TypeTableBuilder;
 /// appropriate error code.
 Error mergeTypeRecords(TypeTableBuilder &Dest,
                        SmallVectorImpl<TypeIndex> &SourceToDest,
-                       TypeServerHandler *Handler, TypeCollection &Types);
+                       TypeServerHandler *Handler, const CVTypeArray &Types);
 
 /// \brief Merge one set of id records into another.  This method assumes
 /// that all records are id records, and there are no Type records present.
@@ -65,7 +65,7 @@ Error mergeTypeRecords(TypeTableBuilder
 /// appropriate error code.
 Error mergeIdRecords(TypeTableBuilder &Dest, ArrayRef<TypeIndex> Types,
                      SmallVectorImpl<TypeIndex> &SourceToDest,
-                     TypeCollection &Ids);
+  const CVTypeArray &Ids);
 
 /// \brief Merge a unified set of type and id records, splitting them into
 /// separate output streams.
@@ -89,7 +89,7 @@ Error mergeTypeAndIdRecords(TypeTableBui
                             TypeTableBuilder &DestTypes,
                             SmallVectorImpl<TypeIndex> &SourceToDest,
                             TypeServerHandler *Handler,
-                            TypeCollection &IdsAndTypes);
+  const CVTypeArray &IdsAndTypes);
 
 } // end namespace codeview
 } // end namespace llvm

Modified: llvm/trunk/lib/DebugInfo/CodeView/TypeStreamMerger.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/CodeView/TypeStreamMerger.cpp?rev=303707&r1=303706&r2=303707&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/CodeView/TypeStreamMerger.cpp (original)
+++ llvm/trunk/lib/DebugInfo/CodeView/TypeStreamMerger.cpp Tue May 23 19:26:27 2017
@@ -81,14 +81,14 @@ public:
   Error visitMemberEnd(CVMemberRecord &Record) override;
 
   Error mergeTypesAndIds(TypeTableBuilder &DestIds, TypeTableBuilder &DestTypes,
-                         TypeCollection &IdsAndTypes);
+    const CVTypeArray &IdsAndTypes);
   Error mergeIdRecords(TypeTableBuilder &Dest,
                        ArrayRef<TypeIndex> TypeSourceToDest,
-                       TypeCollection &Ids);
-  Error mergeTypeRecords(TypeTableBuilder &Dest, TypeCollection &Types);
+    const CVTypeArray &Ids);
+  Error mergeTypeRecords(TypeTableBuilder &Dest, const CVTypeArray &Types);
 
 private:
-  Error doit(TypeCollection &Types);
+  Error doit(const CVTypeArray &Types);
 
   void addMapping(TypeIndex Idx);
 
@@ -497,7 +497,7 @@ Error TypeStreamMerger::visitUnknownType
 }
 
 Error TypeStreamMerger::mergeTypeRecords(TypeTableBuilder &Dest,
-                                         TypeCollection &Types) {
+  const CVTypeArray &Types) {
   DestTypeStream = &Dest;
 
   return doit(Types);
@@ -505,7 +505,7 @@ Error TypeStreamMerger::mergeTypeRecords
 
 Error TypeStreamMerger::mergeIdRecords(TypeTableBuilder &Dest,
                                        ArrayRef<TypeIndex> TypeSourceToDest,
-                                       TypeCollection &Ids) {
+  const CVTypeArray &Ids) {
   DestIdStream = &Dest;
   TypeLookup = TypeSourceToDest;
 
@@ -514,14 +514,14 @@ Error TypeStreamMerger::mergeIdRecords(T
 
 Error TypeStreamMerger::mergeTypesAndIds(TypeTableBuilder &DestIds,
                                          TypeTableBuilder &DestTypes,
-                                         TypeCollection &IdsAndTypes) {
+  const CVTypeArray &IdsAndTypes) {
   DestIdStream = &DestIds;
   DestTypeStream = &DestTypes;
 
   return doit(IdsAndTypes);
 }
 
-Error TypeStreamMerger::doit(TypeCollection &Types) {
+Error TypeStreamMerger::doit(const CVTypeArray &Types) {
   LastError = Error::success();
 
   if (auto EC = codeview::visitTypeStream(Types, *this, Handler))
@@ -559,7 +559,7 @@ Error TypeStreamMerger::doit(TypeCollect
 Error llvm::codeview::mergeTypeRecords(TypeTableBuilder &Dest,
                                        SmallVectorImpl<TypeIndex> &SourceToDest,
                                        TypeServerHandler *Handler,
-                                       TypeCollection &Types) {
+  const CVTypeArray &Types) {
   TypeStreamMerger M(SourceToDest, Handler);
   return M.mergeTypeRecords(Dest, Types);
 }
@@ -567,7 +567,7 @@ Error llvm::codeview::mergeTypeRecords(T
 Error llvm::codeview::mergeIdRecords(TypeTableBuilder &Dest,
                                      ArrayRef<TypeIndex> TypeSourceToDest,
                                      SmallVectorImpl<TypeIndex> &SourceToDest,
-                                     TypeCollection &Ids) {
+  const CVTypeArray &Ids) {
   TypeStreamMerger M(SourceToDest, nullptr);
   return M.mergeIdRecords(Dest, TypeSourceToDest, Ids);
 }
@@ -575,7 +575,7 @@ Error llvm::codeview::mergeIdRecords(Typ
 Error llvm::codeview::mergeTypeAndIdRecords(
     TypeTableBuilder &DestIds, TypeTableBuilder &DestTypes,
     SmallVectorImpl<TypeIndex> &SourceToDest, TypeServerHandler *Handler,
-    TypeCollection &IdsAndTypes) {
+  const CVTypeArray &IdsAndTypes) {
 
   TypeStreamMerger M(SourceToDest, Handler);
   return M.mergeTypesAndIds(DestIds, DestTypes, IdsAndTypes);




More information about the llvm-commits mailing list