mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-28 19:25:00 +00:00
Re-apply "InstrProf: Add unit tests for the profile reader and writer"
Have the InstrProfWriter return a MemoryBuffer instead of a std::string. This fixes the alignment issues the reader would hit, and it's a more appropriate type for this anyway. I've also removed an ugly helper function that's not needed since we're allowing initializer lists now, and updated some error code checks based on MSVC's issues with r229473. This reverts r229483, reapplying r229478. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@229602 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -106,7 +106,7 @@ InstrProfWriter::addFunctionCounts(StringRef FunctionName,
|
||||
return instrprof_error::success;
|
||||
}
|
||||
|
||||
void InstrProfWriter::write(raw_fd_ostream &OS) {
|
||||
std::pair<uint64_t, uint64_t> InstrProfWriter::writeImpl(raw_ostream &OS) {
|
||||
OnDiskChainedHashTableGenerator<InstrProfRecordTrait> Generator;
|
||||
|
||||
// Populate the hash table generator.
|
||||
@@ -128,7 +128,32 @@ void InstrProfWriter::write(raw_fd_ostream &OS) {
|
||||
// Write the hash table.
|
||||
uint64_t HashTableStart = Generator.Emit(OS);
|
||||
|
||||
// Go back and fill in the hash table start.
|
||||
OS.seek(HashTableStartLoc);
|
||||
LE.write<uint64_t>(HashTableStart);
|
||||
return std::make_pair(HashTableStartLoc, HashTableStart);
|
||||
}
|
||||
|
||||
void InstrProfWriter::write(raw_fd_ostream &OS) {
|
||||
// Write the hash table.
|
||||
auto TableStart = writeImpl(OS);
|
||||
|
||||
// Go back and fill in the hash table start.
|
||||
using namespace support;
|
||||
OS.seek(TableStart.first);
|
||||
endian::Writer<little>(OS).write<uint64_t>(TableStart.second);
|
||||
}
|
||||
|
||||
std::unique_ptr<MemoryBuffer> InstrProfWriter::writeBuffer() {
|
||||
std::string Data;
|
||||
llvm::raw_string_ostream OS(Data);
|
||||
// Write the hash table.
|
||||
auto TableStart = writeImpl(OS);
|
||||
OS.flush();
|
||||
|
||||
// Go back and fill in the hash table start.
|
||||
using namespace support;
|
||||
uint64_t Bytes = endian::byte_swap<uint64_t, little>(TableStart.second);
|
||||
Data.replace(TableStart.first, sizeof(uint64_t), (const char *)&Bytes,
|
||||
sizeof(uint64_t));
|
||||
|
||||
// Return this in an aligned memory buffer.
|
||||
return MemoryBuffer::getMemBufferCopy(Data);
|
||||
}
|
||||
|
Reference in New Issue
Block a user