]> granicus.if.org Git - clang/commitdiff
Reduce the amount of stack space we use in SmallVectors during
authorDouglas Gregor <dgregor@apple.com>
Fri, 29 May 2009 18:27:38 +0000 (18:27 +0000)
committerDouglas Gregor <dgregor@apple.com>
Fri, 29 May 2009 18:27:38 +0000 (18:27 +0000)
template instantiation. This helps reduce our stack footprint when
performing deep template instantiations.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@72582 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaTemplateInstantiate.cpp
lib/Sema/SemaTemplateInstantiateDecl.cpp
lib/Sema/SemaTemplateInstantiateExpr.cpp
lib/Sema/SemaTemplateInstantiateStmt.cpp

index 1546e39ee245df5cb87cd2cf0c6f0a7135b5942a..42f36d1e039e8ee395678f2837d4ad714a5f3c88 100644 (file)
@@ -378,7 +378,7 @@ InstantiateFunctionProtoType(const FunctionProtoType *T,
   if (ResultType.isNull())
     return ResultType;
 
-  llvm::SmallVector<QualType, 16> ParamTypes;
+  llvm::SmallVector<QualType, 4> ParamTypes;
   for (FunctionProtoType::arg_type_iterator Param = T->arg_type_begin(),
                                          ParamEnd = T->arg_type_end(); 
        Param != ParamEnd; ++Param) {
@@ -497,7 +497,7 @@ TemplateTypeInstantiator::
 InstantiateTemplateSpecializationType(
                                   const TemplateSpecializationType *T,
                                   unsigned Quals) const {
-  llvm::SmallVector<TemplateArgument, 16> InstantiatedTemplateArgs;
+  llvm::SmallVector<TemplateArgument, 4> InstantiatedTemplateArgs;
   InstantiatedTemplateArgs.reserve(T->getNumArgs());
   for (TemplateSpecializationType::iterator Arg = T->begin(), ArgEnd = T->end();
        Arg != ArgEnd; ++Arg) {
@@ -669,7 +669,7 @@ Sema::InstantiateBaseSpecifiers(CXXRecordDecl *Instantiation,
                                 CXXRecordDecl *Pattern,
                                 const TemplateArgumentList &TemplateArgs) {
   bool Invalid = false;
-  llvm::SmallVector<CXXBaseSpecifier*, 8> InstantiatedBases;
+  llvm::SmallVector<CXXBaseSpecifier*, 4> InstantiatedBases;
   for (ClassTemplateSpecializationDecl::base_class_iterator 
          Base = Pattern->bases_begin(), BaseEnd = Pattern->bases_end();
        Base != BaseEnd; ++Base) {
@@ -767,7 +767,7 @@ Sema::InstantiateClass(SourceLocation PointOfInstantiation,
   if (InstantiateBaseSpecifiers(Instantiation, Pattern, TemplateArgs))
     Invalid = true;
 
-  llvm::SmallVector<DeclPtrTy, 32> Fields;
+  llvm::SmallVector<DeclPtrTy, 4> Fields;
   for (RecordDecl::decl_iterator Member = Pattern->decls_begin(Context),
          MemberEnd = Pattern->decls_end(Context); 
        Member != MemberEnd; ++Member) {
index ef351f0954367a6b012068910776c42196cbec36..6d7dc2e6d5311343986de84f03d94ab980f23eb1 100644 (file)
@@ -214,7 +214,7 @@ Decl *TemplateDeclInstantiator::VisitEnumDecl(EnumDecl *D) {
   Owner->addDecl(SemaRef.Context, Enum);
   Enum->startDefinition();
 
-  llvm::SmallVector<Sema::DeclPtrTy, 16> Enumerators;
+  llvm::SmallVector<Sema::DeclPtrTy, 4> Enumerators;
 
   EnumConstantDecl *LastEnumConst = 0;
   for (EnumDecl::enumerator_iterator EC = D->enumerator_begin(SemaRef.Context),
@@ -288,7 +288,7 @@ Decl *TemplateDeclInstantiator::VisitCXXMethodDecl(CXXMethodDecl *D) {
 
   Sema::LocalInstantiationScope Scope(SemaRef);
 
-  llvm::SmallVector<ParmVarDecl *, 16> Params;
+  llvm::SmallVector<ParmVarDecl *, 4> Params;
   QualType T = InstantiateFunctionType(D, Params);
   if (T.isNull())
     return 0;
@@ -331,7 +331,7 @@ Decl *TemplateDeclInstantiator::VisitCXXMethodDecl(CXXMethodDecl *D) {
 Decl *TemplateDeclInstantiator::VisitCXXConstructorDecl(CXXConstructorDecl *D) {
   Sema::LocalInstantiationScope Scope(SemaRef);
 
-  llvm::SmallVector<ParmVarDecl *, 16> Params;
+  llvm::SmallVector<ParmVarDecl *, 4> Params;
   QualType T = InstantiateFunctionType(D, Params);
   if (T.isNull())
     return 0;
@@ -378,7 +378,7 @@ Decl *TemplateDeclInstantiator::VisitCXXConstructorDecl(CXXConstructorDecl *D) {
 Decl *TemplateDeclInstantiator::VisitCXXDestructorDecl(CXXDestructorDecl *D) {
   Sema::LocalInstantiationScope Scope(SemaRef);
 
-  llvm::SmallVector<ParmVarDecl *, 16> Params;
+  llvm::SmallVector<ParmVarDecl *, 4> Params;
   QualType T = InstantiateFunctionType(D, Params);
   if (T.isNull())
     return 0;
@@ -409,7 +409,7 @@ Decl *TemplateDeclInstantiator::VisitCXXDestructorDecl(CXXDestructorDecl *D) {
 Decl *TemplateDeclInstantiator::VisitCXXConversionDecl(CXXConversionDecl *D) {
   Sema::LocalInstantiationScope Scope(SemaRef);
 
-  llvm::SmallVector<ParmVarDecl *, 16> Params;
+  llvm::SmallVector<ParmVarDecl *, 4> Params;
   QualType T = InstantiateFunctionType(D, Params);
   if (T.isNull())
     return 0;
@@ -505,7 +505,7 @@ TemplateDeclInstantiator::InstantiateFunctionType(FunctionDecl *D,
 
   // Instantiate the function parameters
   TemplateDeclInstantiator ParamInstantiator(SemaRef, 0, TemplateArgs);
-  llvm::SmallVector<QualType, 16> ParamTys;
+  llvm::SmallVector<QualType, 4> ParamTys;
   for (FunctionDecl::param_iterator P = D->param_begin(), 
                                  PEnd = D->param_end();
        P != PEnd; ++P) {
index 31bb91def2cf04960ff8ac5dd3b9c8cf66c88911..c312bb8542001561ccd4ef0434404cbadba41156 100644 (file)
@@ -575,7 +575,7 @@ Sema::OwningExprResult TemplateExprInstantiator::VisitVAArgExpr(VAArgExpr *E) {
 
 Sema::OwningExprResult 
 TemplateExprInstantiator::VisitInitListExpr(InitListExpr *E) {
-  ExprVector Inits(SemaRef);
+  ASTOwningVector<&ActionBase::DeleteExpr, 4> Inits(SemaRef);
   for (unsigned I = 0, N = E->getNumInits(); I != N; ++I) {
     OwningExprResult Init = Visit(E->getInit(I));
     if (Init.isInvalid())
@@ -597,7 +597,7 @@ TemplateExprInstantiator::VisitDesignatedInitExpr(DesignatedInitExpr *E) {
     return SemaRef.ExprError();
 
   // Instantiate the designators.
-  ExprVector ArrayExprs(SemaRef); // Expresses used in array designators
+  ASTOwningVector<&ActionBase::DeleteExpr, 4> ArrayExprs(SemaRef);
   for (DesignatedInitExpr::designators_iterator D = E->designators_begin(),
                                              DEnd = E->designators_end();
        D != DEnd; ++D) {
index a62607d116ab1eae68f810f5ad9747d1db191ee5..91807c3e6a230cba3b6cbab5a3d3cd859e2f3de0 100644 (file)
@@ -60,7 +60,7 @@ namespace {
 //  Common/C statements
 //===----------------------------------------------------------------------===/
 Sema::OwningStmtResult TemplateStmtInstantiator::VisitDeclStmt(DeclStmt *S) {
-  llvm::SmallVector<Decl *, 8> Decls;
+  llvm::SmallVector<Decl *, 4> Decls;
   for (DeclStmt::decl_iterator D = S->decl_begin(), DEnd = S->decl_end();
        D != DEnd; ++D) {
     Decl *Instantiated = SemaRef.InstantiateDecl(*D, SemaRef.CurContext,