Previously, we would add entries to DataInCodeSection in the order they
appeared in input files. Because of this, entries would not be sorted if
sections were reordered due to e.g. -order_file or call graph profile
sorting.
This commit also fixes an incorrect assertion. The original assertion
from D103006 used to check that data-in-code entries are sorted in the
input objects -- likely because we use binary search on that data. In
D115556, the assertion was moved into collectDataInCodeEntries, but
the checked variable's name was not changed, so it ended up checking the
final contents of the DataInCodeSection. While this section is
guaranteed to be sorted as of this commit, we should still check that
inputs are not malformed.
This fixes a crash when building LLVM with PGO using an asserts build of
LLD as the linker.
Numbers for linking the Chromium Framework reproducer from #48001, which
has 6829 data-in-code entries:
x before + after N Min Max Median Avg Stddev x 20 2.1076453 2.3059683 2.1132485 2.1350302 0.049905767 + 20 2.1069031 2.3915262 2.14465 2.1728429 0.084065898 No difference proven at 95.0% confidence
add a comment mentioning that ld64 emits the table in sorted order too? could even link directly to https://reviews.llvm.org/D133581#3781121