r175906 - Replace some typically large vectors with SmallVector.

Jordan Rose jordan_rose at apple.com
Fri Feb 22 10:50:18 PST 2013


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 <benny.kra at googlemail.com> 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
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits




More information about the cfe-commits mailing list