mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-25 21:18:19 +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:
@@ -25,12 +25,7 @@ setupMemoryBuffer(std::string Path) {
|
||||
MemoryBuffer::getFileOrSTDIN(Path);
|
||||
if (std::error_code EC = BufferOrErr.getError())
|
||||
return EC;
|
||||
auto Buffer = std::move(BufferOrErr.get());
|
||||
|
||||
// Sanity check the file.
|
||||
if (Buffer->getBufferSize() > std::numeric_limits<unsigned>::max())
|
||||
return instrprof_error::too_large;
|
||||
return std::move(Buffer);
|
||||
return std::move(BufferOrErr.get());
|
||||
}
|
||||
|
||||
static std::error_code initializeReader(InstrProfReader &Reader) {
|
||||
@@ -43,10 +38,16 @@ InstrProfReader::create(std::string Path) {
|
||||
auto BufferOrError = setupMemoryBuffer(Path);
|
||||
if (std::error_code EC = BufferOrError.getError())
|
||||
return EC;
|
||||
return InstrProfReader::create(std::move(BufferOrError.get()));
|
||||
}
|
||||
|
||||
ErrorOr<std::unique_ptr<InstrProfReader>>
|
||||
InstrProfReader::create(std::unique_ptr<MemoryBuffer> Buffer) {
|
||||
// Sanity check the buffer.
|
||||
if (Buffer->getBufferSize() > std::numeric_limits<unsigned>::max())
|
||||
return instrprof_error::too_large;
|
||||
|
||||
auto Buffer = std::move(BufferOrError.get());
|
||||
std::unique_ptr<InstrProfReader> Result;
|
||||
|
||||
// Create the reader.
|
||||
if (IndexedInstrProfReader::hasFormat(*Buffer))
|
||||
Result.reset(new IndexedInstrProfReader(std::move(Buffer)));
|
||||
@@ -70,14 +71,20 @@ IndexedInstrProfReader::create(std::string Path) {
|
||||
auto BufferOrError = setupMemoryBuffer(Path);
|
||||
if (std::error_code EC = BufferOrError.getError())
|
||||
return EC;
|
||||
return IndexedInstrProfReader::create(std::move(BufferOrError.get()));
|
||||
}
|
||||
|
||||
auto Buffer = std::move(BufferOrError.get());
|
||||
std::unique_ptr<IndexedInstrProfReader> Result;
|
||||
|
||||
ErrorOr<std::unique_ptr<IndexedInstrProfReader>>
|
||||
IndexedInstrProfReader::create(std::unique_ptr<MemoryBuffer> Buffer) {
|
||||
// Sanity check the buffer.
|
||||
if (Buffer->getBufferSize() > std::numeric_limits<unsigned>::max())
|
||||
return instrprof_error::too_large;
|
||||
|
||||
// Create the reader.
|
||||
if (!IndexedInstrProfReader::hasFormat(*Buffer))
|
||||
return instrprof_error::bad_magic;
|
||||
Result.reset(new IndexedInstrProfReader(std::move(Buffer)));
|
||||
auto Result = llvm::make_unique<IndexedInstrProfReader>(std::move(Buffer));
|
||||
|
||||
// Initialize the reader and return the result.
|
||||
if (std::error_code EC = initializeReader(*Result))
|
||||
|
||||
Reference in New Issue
Block a user