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