mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 04:02:41 +01:00
[Profile] Support raw/indexed profiles larger than 4GB
rdar://45955976 llvm-svn: 365565
This commit is contained in:
parent
a9d665ebb5
commit
9fc7728a1f
@ -62,7 +62,7 @@ InstrProfReader::create(const Twine &Path) {
|
||||
Expected<std::unique_ptr<InstrProfReader>>
|
||||
InstrProfReader::create(std::unique_ptr<MemoryBuffer> Buffer) {
|
||||
// Sanity check the buffer.
|
||||
if (uint64_t(Buffer->getBufferSize()) > std::numeric_limits<unsigned>::max())
|
||||
if (uint64_t(Buffer->getBufferSize()) > std::numeric_limits<uint64_t>::max())
|
||||
return make_error<InstrProfError>(instrprof_error::too_large);
|
||||
|
||||
if (Buffer->getBufferSize() == 0)
|
||||
@ -113,7 +113,7 @@ Expected<std::unique_ptr<IndexedInstrProfReader>>
|
||||
IndexedInstrProfReader::create(std::unique_ptr<MemoryBuffer> Buffer,
|
||||
std::unique_ptr<MemoryBuffer> RemappingBuffer) {
|
||||
// Sanity check the buffer.
|
||||
if (uint64_t(Buffer->getBufferSize()) > std::numeric_limits<unsigned>::max())
|
||||
if (uint64_t(Buffer->getBufferSize()) > std::numeric_limits<uint64_t>::max())
|
||||
return make_error<InstrProfError>(instrprof_error::too_large);
|
||||
|
||||
// Create the reader.
|
||||
|
@ -1044,4 +1044,25 @@ TEST_F(SparseInstrProfTest, preserve_no_records) {
|
||||
INSTANTIATE_TEST_CASE_P(MaybeSparse, MaybeSparseInstrProfTest,
|
||||
::testing::Bool(),);
|
||||
|
||||
#if defined(_LP64) && defined(EXPENSIVE_CHECKS)
|
||||
TEST(ProfileReaderTest, ReadsLargeFiles) {
|
||||
const size_t LargeSize = 1ULL << 32; // 4GB
|
||||
|
||||
auto RawProfile = WritableMemoryBuffer::getNewUninitMemBuffer(LargeSize);
|
||||
if (!RawProfile)
|
||||
return;
|
||||
auto RawProfileReaderOrErr = InstrProfReader::create(std::move(RawProfile));
|
||||
ASSERT_TRUE(InstrProfError::take(RawProfileReaderOrErr.takeError()) ==
|
||||
instrprof_error::unrecognized_format);
|
||||
|
||||
auto IndexedProfile = WritableMemoryBuffer::getNewUninitMemBuffer(LargeSize);
|
||||
if (!IndexedProfile)
|
||||
return;
|
||||
auto IndexedReaderOrErr =
|
||||
IndexedInstrProfReader::create(std::move(IndexedProfile), nullptr);
|
||||
ASSERT_TRUE(InstrProfError::take(IndexedReaderOrErr.takeError()) ==
|
||||
instrprof_error::bad_magic);
|
||||
}
|
||||
#endif
|
||||
|
||||
} // end anonymous namespace
|
||||
|
Loading…
Reference in New Issue
Block a user