smallvector.h: bake reserve() into the non-boost SmallVector implementation
#4385
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This changes bakes the
reserve()call into the non-boost implementationSmallVectorconstruction as it would cause a performance regression with theboost::small_vectorimplementation (see #3919).I tested the build with Clang, GCC, MinGW and Visual Studio.
Replacing the
std::vector+resreve()appraoch withSmallVectorinvisitAstNodes()will now yield the same performance when using Clang.In case of GCC the code actually gets faster since (according to valgrind) it was previously using
std::vector<>::reserve(unsigned long)whereas it now usesoperator new(unsigned long)just like Clang does. Possibly another issue to report upstream.Clang 14
2,481,264,505->2,481,270,375GCC 12
2,388,141,113->2,359,483,453This patch does not replace the usage yet - that still requires a few more tests and is handled via #3919.