erichkeane added a comment.

On the face, this seems to be a nice patch.  Removing extra allocations and 
replacing them with the stack is a good thing IMO. This is clearly an example 
of PIMPL, which while it has its advantages, performance is typically a hit.  
My 2 concerns with this are:

1- The increased size of DeclarationNameTable will cause a performance 
regression in the case where these folding sets are used rarely.  Copies (which 
are obviously deleted, unless memcpy'ed somewhere)/moves of 
DeclarationNameTable are now more expensive.  Based on your analysis, it seems 
that this is a 'net win', but I'd like to see if we can disallow 'move' as well.

2- The advantage of PIMPL is a reduction in compile time.  Now, every file that 
uses DeclarationName.h (an extensive list of .cpp files, but more importantly, 
Decl.h, DeclBase.h, and Sema.h).  Could you perhaps do a clean build both 
before/after this change with 'time' 
(http://man7.org/linux/man-pages/man1/time.1.html) and show the results?  I 
hope it ends up being a small enough change to be acceptable, but it would be 
nice to have an informed decision here.



================
Comment at: include/clang/AST/DeclarationName.h:450
   DeclarationNameTable &operator=(const DeclarationNameTable &) = delete;
 
   /// getIdentifier - Create a declaration name that is a simple
----------------
DeclarationNameTable should definitely have the move operators dealt with here. 
 I suspect/hope the answer is 'deleted', but I don't think it matters generally.

Additionally, I'd like to see the destructor line left and set to 'default', 
since those 2 would complete the 'rule of 5'.


Repository:
  rC Clang

https://reviews.llvm.org/D50261



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to