]> granicus.if.org Git - clang/commitdiff
switch the macroinfo argument lists from being allocated off the heap
authorChris Lattner <sabre@nondot.org>
Fri, 20 Feb 2009 22:46:43 +0000 (22:46 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 20 Feb 2009 22:46:43 +0000 (22:46 +0000)
to being allocated from the same bumpptr that the MacroInfo objects
themselves are.

This speeds up -Eonly cocoa.h pth by ~4%, fsyntax-only is barely measurable.

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

include/clang/Lex/MacroInfo.h
lib/Lex/PPDirectives.cpp
lib/Lex/Preprocessor.cpp

index 7c3136ac11e0eeef6e78b26c3780e2d2fb403280..ba1cfde405db3ef95d9941e767f2d7810855c04e 100644 (file)
@@ -16,6 +16,7 @@
 
 #include "clang/Lex/Token.h"
 #include "llvm/ADT/SmallVector.h"
+#include "llvm/Support/Allocator.h"
 #include <vector>
 #include <cassert>
 
@@ -82,15 +83,15 @@ public:
   
   /// FreeArgumentList - Free the argument list of the macro, restoring it to a
   /// state where it can be reused for other devious purposes.
-  void FreeArgumentList() {
-    delete[] ArgumentList;
+  void FreeArgumentList(llvm::BumpPtrAllocator &PPAllocator) {
+    PPAllocator.Deallocate(ArgumentList);
     ArgumentList = 0;
     NumArguments = 0;
   }
   
   /// Destroy - destroy this MacroInfo object.
-  void Destroy() {
-    FreeArgumentList();
+  void Destroy(llvm::BumpPtrAllocator &PPAllocator) {
+    FreeArgumentList(PPAllocator);
     this->~MacroInfo();
   }
   
@@ -117,13 +118,14 @@ public:
 
   /// setArgumentList - Set the specified list of identifiers as the argument
   /// list for this macro.
-  void setArgumentList(IdentifierInfo* const *List, unsigned NumArgs) {
+  void setArgumentList(IdentifierInfo* const *List, unsigned NumArgs,
+                       llvm::BumpPtrAllocator &PPAllocator) {
     assert(ArgumentList == 0 && NumArguments == 0 &&
            "Argument list already set!");
     if (NumArgs == 0) return;
     
     NumArguments = NumArgs;
-    ArgumentList = new IdentifierInfo*[NumArgs];
+    ArgumentList = PPAllocator.Allocate<IdentifierInfo*>(NumArgs);
     for (unsigned i = 0; i != NumArgs; ++i)
       ArgumentList[i] = List[i];
   }
index e6b2f8464d6862580c1b8b6d3a4f40b77419278b..ce68207eb3b87b0a2e03e6115f114a0dec214ee7 100644 (file)
@@ -40,7 +40,7 @@ MacroInfo *Preprocessor::AllocateMacroInfo(SourceLocation L) {
 ///  be reused for allocating new MacroInfo objects.
 void Preprocessor::ReleaseMacroInfo(MacroInfo* MI) {
   MICache.push_back(MI);
-  MI->FreeArgumentList();
+  MI->FreeArgumentList(BP);
 }
 
 
@@ -1115,7 +1115,7 @@ bool Preprocessor::ReadMacroDefinitionArgList(MacroInfo *MI) {
       // Add the __VA_ARGS__ identifier as an argument.
       Arguments.push_back(Ident__VA_ARGS__);
       MI->setIsC99Varargs();
-      MI->setArgumentList(&Arguments[0], Arguments.size());
+      MI->setArgumentList(&Arguments[0], Arguments.size(), BP);
       return false;
     case tok::eom:  // #define X(
       Diag(Tok, diag::err_pp_missing_rparen_in_macro_def);
@@ -1149,7 +1149,7 @@ bool Preprocessor::ReadMacroDefinitionArgList(MacroInfo *MI) {
         Diag(Tok, diag::err_pp_expected_comma_in_arg_list);
         return true;
       case tok::r_paren: // #define X(A)
-        MI->setArgumentList(&Arguments[0], Arguments.size());
+        MI->setArgumentList(&Arguments[0], Arguments.size(), BP);
         return false;
       case tok::comma:  // #define X(A,
         break;
@@ -1165,7 +1165,7 @@ bool Preprocessor::ReadMacroDefinitionArgList(MacroInfo *MI) {
         }
           
         MI->setIsGNUVarargs();
-        MI->setArgumentList(&Arguments[0], Arguments.size());
+        MI->setArgumentList(&Arguments[0], Arguments.size(), BP);
         return false;
       }
     }
index a85b5db6d6064f7cf705f2e8367df522689ecf7c..ccb179d1e4c274fa3e10d4b4e59ba0c3b418d300 100644 (file)
@@ -101,7 +101,7 @@ Preprocessor::~Preprocessor() {
     // will be released when the BumpPtrAllocator 'BP' object gets
     // destroyed. We still need to run the dstor, however, to free
     // memory alocated by MacroInfo.
-    I->second->Destroy();
+    I->second->Destroy(BP);
     I->first->setHasMacroDefinition(false);
   }