https://github.com/erichkeane approved this pull request.

Interesting... this ends up just being a set-vector with a different identity 
being stored for the set.  So this ends up being ~4 ptr-sizes (IIRC you said 
that DynTypedNode is 3x the size of a pointer) per-record (though the extra 1 
is only for those with memoization data).

Did you run the space benchmark here from the original bug?  I definitely 
believe that this is an improvement (changes from 6x-ptr/element to < 
4x-ptr/element), and perhaps the deduplication makes up for the extra data 
(since it only has to remove ONE duplicate to make up for 3 elements).

AS FAR AS the `SmallVector`/`SmallDenseSet` vs `std::vector`/`std::set`, the 
decision here is interesting.  `SmallVector` has a pretty massive stack size in 
exchange for saving on an allocation (it isn't SSO-like, it is more, 
"size-of-vector + N, so that our allocation is on-stack unless size > N).  So 
it kinda depends on whether we think MOST uses of this are going to be '1' 
element, vs '0' or '1+' (that is, for the small-vector suggested by @cor3ntin 
of size 1).  If it is almost always going to be 1, I agree with him.  If it is 
almost always going to be 0 or more than 1, std::vector is probably correct (as 
in the 0 case, std::vector is smaller, and in the 1+ case, the allocation is 
happening anyway, and we just have dead stack space again).

https://github.com/llvm/llvm-project/pull/129934
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to