gecko-dev/build/build-clang/partial-revert-llvmorg-16-init-15775-g1ae7d83803e4.patch
Mike Hommey 2fe409322f Bug 1813356 - Partially revert clang upstream change to index profile data files. r=firefox-build-system-reviewers,ahochheiden
In bug 1811960, the change was fully reverted, but that now conflicts with
more recent changes to clang trunk. So instead, we only revert the part that
affects the writing of the profile data files.

Differential Revision: https://phabricator.services.mozilla.com/D168404
2023-01-31 17:17:17 +00:00

107 lines
4.4 KiB
Diff

The change in https://github.com/llvm/llvm-project/commit/1ae7d83803e45f6053ec6a606f259653846926b8
makes rustc unable to read the profiles that `llvm-profdata merge` outputs,
further causing some problems (e.g. bug 1811960).
diff --git a/llvm/lib/ProfileData/InstrProfWriter.cpp b/llvm/lib/ProfileData/InstrProfWriter.cpp
index af3c27ebac76..a6da1e0f3aec 100644
--- a/llvm/lib/ProfileData/InstrProfWriter.cpp
+++ b/llvm/lib/ProfileData/InstrProfWriter.cpp
@@ -291,10 +291,6 @@ void InstrProfWriter::mergeRecordsFromWriter(InstrProfWriter &&IPW,
for (auto &Func : I.getValue())
addRecord(I.getKey(), Func.first, std::move(Func.second), 1, Warn);
- BinaryIds.reserve(BinaryIds.size() + IPW.BinaryIds.size());
- for (auto &I : IPW.BinaryIds)
- addBinaryIds(I);
-
MemProfFrameData.reserve(IPW.MemProfFrameData.size());
for (auto &I : IPW.MemProfFrameData) {
// If we weren't able to add the frame mappings then it doesn't make sense
@@ -339,7 +335,6 @@ static void setSummary(IndexedInstrProf::Summary *TheSummary,
Error InstrProfWriter::writeImpl(ProfOStream &OS) {
using namespace IndexedInstrProf;
- using namespace support;
OnDiskChainedHashTableGenerator<InstrProfRecordWriterTrait> Generator;
@@ -356,7 +351,7 @@ Error InstrProfWriter::writeImpl(ProfOStream &OS) {
// Write the header.
IndexedInstrProf::Header Header;
Header.Magic = IndexedInstrProf::Magic;
- Header.Version = IndexedInstrProf::ProfVersion::CurrentVersion;
+ Header.Version = IndexedInstrProf::ProfVersion::Version8;
if (static_cast<bool>(ProfileKind & InstrProfKind::IRInstrumentation))
Header.Version |= VARIANT_MASK_IR_PROF;
if (static_cast<bool>(ProfileKind & InstrProfKind::ContextSensitive))
@@ -396,12 +389,6 @@ Error InstrProfWriter::writeImpl(ProfOStream &OS) {
// profile contains memory profile information.
OS.write(0);
- // Save the location of binary ids section.
- uint64_t BinaryIdSectionOffset = OS.tell();
- // Reserve space for the BinaryIdOffset field to be patched later if this
- // profile contains binary ids.
- OS.write(0);
-
// Reserve space to write profile summary data.
uint32_t NumEntries = ProfileSummaryBuilder::DefaultCutoffs.size();
uint32_t SummarySize = Summary::getSize(Summary::NumKinds, NumEntries);
@@ -478,43 +465,6 @@ Error InstrProfWriter::writeImpl(ProfOStream &OS) {
OS.patch(PatchItems, 3);
}
- // BinaryIdSection has two parts:
- // 1. uint64_t BinaryIdsSectionSize
- // 2. list of binary ids that consist of:
- // a. uint64_t BinaryIdLength
- // b. uint8_t BinaryIdData
- // c. uint8_t Padding (if necessary)
- uint64_t BinaryIdSectionStart = OS.tell();
- // Calculate size of binary section.
- uint64_t BinaryIdsSectionSize = 0;
-
- // Remove duplicate binary ids.
- llvm::sort(BinaryIds);
- BinaryIds.erase(std::unique(BinaryIds.begin(), BinaryIds.end()),
- BinaryIds.end());
-
- for (auto BI : BinaryIds) {
- // Increment by binary id length data type size.
- BinaryIdsSectionSize += sizeof(uint64_t);
- // Increment by binary id data length, aligned to 8 bytes.
- BinaryIdsSectionSize += alignToPowerOf2(BI.size(), sizeof(uint64_t));
- }
- // Write binary ids section size.
- OS.write(BinaryIdsSectionSize);
-
- for (auto BI : BinaryIds) {
- uint64_t BILen = BI.size();
- // Write binary id length.
- OS.write(BILen);
- // Write binary id data.
- for (unsigned K = 0; K < BILen; K++)
- OS.writeByte(BI[K]);
- // Write padding if necessary.
- uint64_t PaddingSize = alignToPowerOf2(BILen, sizeof(uint64_t)) - BILen;
- for (unsigned K = 0; K < PaddingSize; K++)
- OS.writeByte(0);
- }
-
// Allocate space for data to be serialized out.
std::unique_ptr<IndexedInstrProf::Summary> TheSummary =
IndexedInstrProf::allocSummary(SummarySize);
@@ -537,11 +487,8 @@ Error InstrProfWriter::writeImpl(ProfOStream &OS) {
PatchItem PatchItems[] = {
// Patch the Header.HashOffset field.
{HashTableStartFieldOffset, &HashTableStart, 1},
- // Patch the Header.MemProfOffset (=0 for profiles without MemProf
- // data).
+ // Patch the Header.MemProfOffset (=0 for profiles without MemProf data).
{MemProfSectionOffset, &MemProfSectionStart, 1},
- // Patch the Header.BinaryIdSectionOffset.
- {BinaryIdSectionOffset, &BinaryIdSectionStart, 1},
// Patch the summary data.
{SummaryOffset, reinterpret_cast<uint64_t *>(TheSummary.get()),
(int)(SummarySize / sizeof(uint64_t))},