Optimize GSymCreator::finalize.
authorGreg Clayton <gclayton@fb.com>
Wed, 12 May 2021 20:20:31 +0000 (13:20 -0700)
committerGreg Clayton <gclayton@fb.com>
Wed, 12 May 2021 22:18:07 +0000 (15:18 -0700)
commite5bdacba2e185034979fddd8bff2695bfcdd3056
treecc6e1ec5e80f73c7f09c9d8a3b9ae00e3af3a0f0
parentfb3a00c327df78eaa534e53ac6f07112e0585121
Optimize GSymCreator::finalize.

The algorithm removing duplicates from the Funcs list used to have
amortized quadratic time complexity because it was potentially
removing each entry using std::vector::erase individually. This
patch is now using a erase-remove idiom with an adapted
removeIfBinary algorithm.

Probably this was made under the assumption that these removals are
rare, but there are cases where the case of duplicate entries is
occurring frequently. In these cases, the actual runtime was very
poor, taking hours to process a single binary of around 1 GiB size
including debug info. Another factor contributing to that is the
frequent output of the warning, which is now removed.

It seems this is particularly an issue with GCC-compiled binaries,
rather than clang-built binaries.

Reviewed By: clayborg

Differential Revision: https://reviews.llvm.org/D102219
llvm/lib/DebugInfo/GSYM/GsymCreator.cpp