[llvm] r204204 - When destroying a StringMap, just iterate over the map and destroy the contained elements. Don't reset them back to 0 as their values aren't needed any more. This results in ~StringMap() being mostly empty for POD types in BumpPtrAllocators
Philip Reames
listmail at philipreames.com
Wed Mar 19 09:47:45 PDT 2014
Is there a good performance justification for this change? From what I
can tell, you're removing one assignment per Bucket + 2 assignments.
This seems hardly worth the code duplication.
Also, having destructed pointers be null is useful for catching
use-after-free bugs. I'm reluctant to give that up.
Unless you can justify this change from a performance standpoint, I'd
request that you revert it.
p.s. If there was a review for this, sorry for not catching it.
Philip
On 03/18/2014 05:23 PM, Pete Cooper wrote:
> Author: pete
> Date: Tue Mar 18 19:23:30 2014
> New Revision: 204204
>
> URL: http://llvm.org/viewvc/llvm-project?rev=204204&view=rev
> Log:
> When destroying a StringMap, just iterate over the map and destroy the contained elements. Don't reset them back to 0 as their values aren't needed any more. This results in ~StringMap() being mostly empty for POD types in BumpPtrAllocators
>
> Modified:
> llvm/trunk/include/llvm/ADT/StringMap.h
>
> Modified: llvm/trunk/include/llvm/ADT/StringMap.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/StringMap.h?rev=204204&r1=204203&r2=204204&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/ADT/StringMap.h (original)
> +++ llvm/trunk/include/llvm/ADT/StringMap.h Tue Mar 18 19:23:30 2014
> @@ -387,7 +387,17 @@ public:
> }
>
> ~StringMap() {
> - clear();
> + // Delete all the elements in the map, but don't reset the elements
> + // to default values. This is a copy of clear(), but avoids unnecessary
> + // work not required in the destructor.
> + if (!empty()) {
> + for (unsigned I = 0, E = NumBuckets; I != E; ++I) {
> + StringMapEntryBase *Bucket = TheTable[I];
> + if (Bucket && Bucket != getTombstoneVal()) {
> + static_cast<MapEntryTy*>(Bucket)->Destroy(Allocator);
> + }
> + }
> + }
> free(TheTable);
> }
> };
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list