template <typename T>
class LargeVector : public SmallVector<T, 0> {};;-) Not saying this is actually a good idea. On Feb 22, 2013, at 10:29 , Benjamin Kramer <[email protected]> wrote: > Author: d0k > Date: Fri Feb 22 12:29:39 2013 > New Revision: 175906 > > URL: http://llvm.org/viewvc/llvm-project?rev=175906&view=rev > Log: > Replace some typically large vectors with SmallVector. > > This may seem counter-intuitive but the POD-like optimization helps when the > vectors grow into multimegabyte buffers. SmallVector calls realloc which knows > how to twiddle virtual memory bits and avoids large copies. > > Modified: > cfe/trunk/include/clang/AST/ASTContext.h > cfe/trunk/include/clang/Basic/SourceManager.h > cfe/trunk/lib/Basic/SourceManager.cpp > > Modified: cfe/trunk/include/clang/AST/ASTContext.h > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/ASTContext.h?rev=175906&r1=175905&r2=175906&view=diff > ============================================================================== > --- cfe/trunk/include/clang/AST/ASTContext.h (original) > +++ cfe/trunk/include/clang/AST/ASTContext.h Fri Feb 22 12:29:39 2013 > @@ -75,7 +75,7 @@ namespace clang { > class ASTContext : public RefCountedBase<ASTContext> { > ASTContext &this_() { return *this; } > > - mutable std::vector<Type*> Types; > + mutable SmallVector<Type *, 0> Types; > mutable llvm::FoldingSet<ExtQuals> ExtQualNodes; > mutable llvm::FoldingSet<ComplexType> ComplexTypes; > mutable llvm::FoldingSet<PointerType> PointerTypes; > @@ -748,7 +748,7 @@ public: > ASTMutationListener *getASTMutationListener() const { return Listener; } > > void PrintStats() const; > - const std::vector<Type*>& getTypes() const { return Types; } > + const SmallVectorImpl<Type *>& getTypes() const { return Types; } > > /// \brief Retrieve the declaration for the 128-bit signed integer type. > TypedefDecl *getInt128Decl() const; > @@ -1908,8 +1908,8 @@ public: > // Type Iterators. > > //===--------------------------------------------------------------------===// > > - typedef std::vector<Type*>::iterator type_iterator; > - typedef std::vector<Type*>::const_iterator const_type_iterator; > + typedef SmallVectorImpl<Type *>::iterator type_iterator; > + typedef SmallVectorImpl<Type *>::const_iterator const_type_iterator; > > type_iterator types_begin() { return Types.begin(); } > type_iterator types_end() { return Types.end(); } > > Modified: cfe/trunk/include/clang/Basic/SourceManager.h > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/SourceManager.h?rev=175906&r1=175905&r2=175906&view=diff > ============================================================================== > --- cfe/trunk/include/clang/Basic/SourceManager.h (original) > +++ cfe/trunk/include/clang/Basic/SourceManager.h Fri Feb 22 12:29:39 2013 > @@ -588,13 +588,13 @@ class SourceManager : public RefCountedB > /// > /// Positive FileIDs are indexes into this table. Entry 0 indicates an > invalid > /// expansion. > - std::vector<SrcMgr::SLocEntry> LocalSLocEntryTable; > + SmallVector<SrcMgr::SLocEntry, 0> LocalSLocEntryTable; > > /// \brief The table of SLocEntries that are loaded from other modules. > /// > /// Negative FileIDs are indexes into this table. To get from ID to an > index, > /// use (-ID - 2). > - mutable std::vector<SrcMgr::SLocEntry> LoadedSLocEntryTable; > + mutable SmallVector<SrcMgr::SLocEntry, 0> LoadedSLocEntryTable; > > /// \brief The starting offset of the next local SLocEntry. > /// > > Modified: cfe/trunk/lib/Basic/SourceManager.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/SourceManager.cpp?rev=175906&r1=175905&r2=175906&view=diff > ============================================================================== > --- cfe/trunk/lib/Basic/SourceManager.cpp (original) > +++ cfe/trunk/lib/Basic/SourceManager.cpp Fri Feb 22 12:29:39 2013 > @@ -721,7 +721,7 @@ FileID SourceManager::getFileIDLocal(uns > > // See if this is near the file point - worst case we start scanning from > the > // most newly created FileID. > - std::vector<SrcMgr::SLocEntry>::const_iterator I; > + const SrcMgr::SLocEntry *I; > > if (LastFileIDLookup.ID < 0 || > LocalSLocEntryTable[LastFileIDLookup.ID].getOffset() < SLocOffset) { > > > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
