[cfe-commits] r63153 - in /cfe/trunk: include/clang/AST/ASTContext.h lib/AST/ASTContext.cpp lib/AST/Decl.cpp lib/AST/DeclCXX.cpp lib/AST/DeclGroup.cpp lib/AST/Expr.cpp lib/Sema/ParseAST.cpp

Steve Naroff snaroff at apple.com
Tue Jan 27 15:20:32 PST 2009


Author: snaroff
Date: Tue Jan 27 17:20:32 2009
New Revision: 63153

URL: http://llvm.org/viewvc/llvm-project?rev=63153&view=rev
Log:
Finish making AST BumpPtrAllocation runtime configurable (based on -disable-free).

snaroff% time ../../Release-Asserts/bin/clang INPUTS/Cocoa_h.m
0.179u 0.051s 0:00.23 95.6%	0+0k 0+0io 0pf+0w
snaroff% time ../../Release-Asserts/bin/clang INPUTS/Cocoa_h.m -disable-free
0.169u 0.052s 0:00.22 95.4%	0+0k 0+0io 0pf+0w

Modified:
    cfe/trunk/include/clang/AST/ASTContext.h
    cfe/trunk/lib/AST/ASTContext.cpp
    cfe/trunk/lib/AST/Decl.cpp
    cfe/trunk/lib/AST/DeclCXX.cpp
    cfe/trunk/lib/AST/DeclGroup.cpp
    cfe/trunk/lib/AST/Expr.cpp
    cfe/trunk/lib/Sema/ParseAST.cpp

Modified: cfe/trunk/include/clang/AST/ASTContext.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/ASTContext.h?rev=63153&r1=63152&r2=63153&view=diff

==============================================================================
--- cfe/trunk/include/clang/AST/ASTContext.h (original)
+++ cfe/trunk/include/clang/AST/ASTContext.h Tue Jan 27 17:20:32 2009
@@ -118,9 +118,10 @@
   ///  this ASTContext object.
   LangOptions LangOpts;
 
-  /// Allocator - The allocator object used to create AST objects.
-  llvm::MallocAllocator Allocator;
-
+  /// MallocAlloc/BumpAlloc - The allocator objects used to create AST objects.
+  bool FreeMemory;
+  llvm::MallocAllocator MallocAlloc;
+  llvm::BumpPtrAllocator BumpAlloc;
 public:
   TargetInfo &Target;
   IdentifierTable &Idents;
@@ -128,9 +129,14 @@
   DeclarationNameTable DeclarationNames;
 
   SourceManager& getSourceManager() { return SourceMgr; }
-  llvm::MallocAllocator &getAllocator() { return Allocator; }  
-  void Deallocate(void *Ptr) { Allocator.Deallocate(Ptr); }
-  
+  void *Allocate(unsigned Size, unsigned Align = 8) {
+    return FreeMemory ? MallocAlloc.Allocate(Size, Align) :
+                        BumpAlloc.Allocate(Size, Align);
+  }
+  void Deallocate(void *Ptr) { 
+    if (FreeMemory)
+      MallocAlloc.Deallocate(Ptr); 
+  }
   const LangOptions& getLangOptions() const { return LangOpts; }
   
   FullSourceLoc getFullLoc(SourceLocation Loc) const { 
@@ -159,8 +165,8 @@
   QualType DependentTy;
 
   ASTContext(const LangOptions& LOpts, SourceManager &SM, TargetInfo &t,
-             IdentifierTable &idents, SelectorTable &sels,
-             unsigned size_reserve=0);
+             IdentifierTable &idents, SelectorTable &sels, 
+             bool FreeMemory = true, unsigned size_reserve=0);
 
   ~ASTContext();
   
@@ -600,7 +606,7 @@
 /// @return The allocated memory. Could be NULL.
 inline void *operator new(size_t Bytes, clang::ASTContext &C,
                           size_t Alignment = 16) throw () {
-  return C.getAllocator().Allocate(Bytes, Alignment);
+  return C.Allocate(Bytes, Alignment);
 }
 /// @brief Placement delete companion to the new above.
 ///
@@ -610,7 +616,7 @@
 /// the ASTContext throws in the object constructor.
 inline void operator delete(void *Ptr, clang::ASTContext &C)
               throw () {
-  C.getAllocator().Deallocate(Ptr);
+  C.Deallocate(Ptr);
 }
 
 #endif

Modified: cfe/trunk/lib/AST/ASTContext.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ASTContext.cpp?rev=63153&r1=63152&r2=63153&view=diff

==============================================================================
--- cfe/trunk/lib/AST/ASTContext.cpp (original)
+++ cfe/trunk/lib/AST/ASTContext.cpp Tue Jan 27 17:20:32 2009
@@ -31,9 +31,9 @@
 ASTContext::ASTContext(const LangOptions& LOpts, SourceManager &SM,
                        TargetInfo &t,
                        IdentifierTable &idents, SelectorTable &sels,
-                       unsigned size_reserve) : 
+                       bool FreeMem, unsigned size_reserve) : 
   CFConstantStringTypeDecl(0), ObjCFastEnumerationStateTypeDecl(0),
-  SourceMgr(SM), LangOpts(LOpts), Target(t), 
+  SourceMgr(SM), LangOpts(LOpts), FreeMemory(FreeMem), Target(t), 
   Idents(idents), Selectors(sels)
 {  
   if (size_reserve > 0) Types.reserve(size_reserve);    
@@ -1126,8 +1126,8 @@
   // FunctionTypeProto objects are allocated with extra bytes after them
   // for a variable size array (for parameter types) at the end of them.
   FunctionTypeProto *FTP = 
-    (FunctionTypeProto*)Allocator.Allocate(sizeof(FunctionTypeProto) + 
-                                           NumArgs*sizeof(QualType), 8);
+    (FunctionTypeProto*)Allocate(sizeof(FunctionTypeProto) + 
+                                 NumArgs*sizeof(QualType), 8);
   new (FTP) FunctionTypeProto(ResultTy, ArgArray, NumArgs, isVariadic,
                               TypeQuals, Canonical);
   Types.push_back(FTP);

Modified: cfe/trunk/lib/AST/Decl.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/Decl.cpp?rev=63153&r1=63152&r2=63153&view=diff

==============================================================================
--- cfe/trunk/lib/AST/Decl.cpp (original)
+++ cfe/trunk/lib/AST/Decl.cpp Tue Jan 27 17:20:32 2009
@@ -118,8 +118,7 @@
 EnumDecl *EnumDecl::Create(ASTContext &C, DeclContext *DC, SourceLocation L,
                            IdentifierInfo *Id,
                            EnumDecl *PrevDecl) {
-  void *Mem = C.getAllocator().Allocate<EnumDecl>();
-  EnumDecl *Enum = new (Mem) EnumDecl(DC, L, Id);
+  EnumDecl *Enum = new (C) EnumDecl(DC, L, Id);
   C.getTypeDeclType(Enum, PrevDecl);
   return Enum;
 }
@@ -229,7 +228,7 @@
   
   // Zero params -> null pointer.
   if (NumParams) {
-    void *Mem = C.getAllocator().Allocate<ParmVarDecl*>(NumParams);
+    void *Mem = C.Allocate(sizeof(ParmVarDecl*)*NumParams);
     ParamInfo = new (Mem) ParmVarDecl*[NumParams];
     memcpy(ParamInfo, NewParamInfo, sizeof(ParmVarDecl*)*NumParams);
   }

Modified: cfe/trunk/lib/AST/DeclCXX.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/DeclCXX.cpp?rev=63153&r1=63152&r2=63153&view=diff

==============================================================================
--- cfe/trunk/lib/AST/DeclCXX.cpp (original)
+++ cfe/trunk/lib/AST/DeclCXX.cpp Tue Jan 27 17:20:32 2009
@@ -47,7 +47,7 @@
   // FIXME: how do I pass in Size to ASTContext::new?
   unsigned Size = sizeof(TemplateParameterList) + sizeof(Decl *) * NumParams;
   unsigned Align = llvm::AlignOf<TemplateParameterList>::Alignment;
-  void *Mem = C.getAllocator().Allocate(Size, Align);
+  void *Mem = C.Allocate(Size, Align);
   return new (Mem) TemplateParameterList(Params, NumParams);
 }
 

Modified: cfe/trunk/lib/AST/DeclGroup.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/DeclGroup.cpp?rev=63153&r1=63152&r2=63153&view=diff

==============================================================================
--- cfe/trunk/lib/AST/DeclGroup.cpp (original)
+++ cfe/trunk/lib/AST/DeclGroup.cpp Tue Jan 27 17:20:32 2009
@@ -24,7 +24,7 @@
   assert (numdecls > 0);
   unsigned size = sizeof(DeclGroup) + sizeof(Decl*) * numdecls;
   unsigned alignment = llvm::AlignOf<DeclGroup>::Alignment;  
-  void* mem = C.getAllocator().Allocate(size, alignment);
+  void* mem = C.Allocate(size, alignment);
   new (mem) DeclGroup(numdecls, decls);
   return static_cast<DeclGroup*>(mem);
 }
@@ -40,7 +40,7 @@
   unsigned NumDecls = (unsigned) D.ReadInt();
   unsigned size = sizeof(DeclGroup) + sizeof(Decl*) * NumDecls;
   unsigned alignment = llvm::AlignOf<DeclGroup>::Alignment;  
-  DeclGroup* DG = (DeclGroup*) C.getAllocator().Allocate(size, alignment);
+  DeclGroup* DG = (DeclGroup*) C.Allocate(size, alignment);
   new (DG) DeclGroup();
   DG->NumDecls = NumDecls;
   D.BatchReadOwnedPtrs(NumDecls, &(*DG)[0], C);

Modified: cfe/trunk/lib/AST/Expr.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/Expr.cpp?rev=63153&r1=63152&r2=63153&view=diff

==============================================================================
--- cfe/trunk/lib/AST/Expr.cpp (original)
+++ cfe/trunk/lib/AST/Expr.cpp Tue Jan 27 17:20:32 2009
@@ -1387,10 +1387,9 @@
                            Expr **IndexExprs, unsigned NumIndexExprs,
                            SourceLocation ColonOrEqualLoc,
                            bool UsesColonSyntax, Expr *Init) {
-  void *Mem = C.getAllocator().Allocate(sizeof(DesignatedInitExpr) +
-                                        sizeof(Designator) * NumDesignators +
-                                        sizeof(Stmt *) * (NumIndexExprs + 1),
-                                        8);
+  void *Mem = C.Allocate(sizeof(DesignatedInitExpr) +
+                         sizeof(Designator) * NumDesignators +
+                         sizeof(Stmt *) * (NumIndexExprs + 1), 8);
   DesignatedInitExpr *DIE 
     = new (Mem) DesignatedInitExpr(C.VoidTy, NumDesignators,
                                    ColonOrEqualLoc, UsesColonSyntax,

Modified: cfe/trunk/lib/Sema/ParseAST.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/ParseAST.cpp?rev=63153&r1=63152&r2=63153&view=diff

==============================================================================
--- cfe/trunk/lib/Sema/ParseAST.cpp (original)
+++ cfe/trunk/lib/Sema/ParseAST.cpp Tue Jan 27 17:20:32 2009
@@ -39,7 +39,8 @@
   ASTContext *Context = 
     new ASTContext(PP.getLangOptions(), PP.getSourceManager(),
                    PP.getTargetInfo(),
-                   PP.getIdentifierTable(), PP.getSelectorTable());
+                   PP.getIdentifierTable(), PP.getSelectorTable(),
+                   FreeMemory);
   TranslationUnit *TU = new TranslationUnit(*Context);
   Sema S(PP, *Context, *Consumer);
   Parser P(PP, S);





More information about the cfe-commits mailing list