[PATCH] D19956: [profile] Remove unnecessary field in raw profile reader
David Li via llvm-commits
llvm-commits at lists.llvm.org
Thu May 5 12:47:27 PDT 2016
This revision was automatically updated to reflect the committed changes.
Closed by commit rL268667: [profile] Remove unneeded field in raw profile reader (authored by davidxl).
Changed prior to commit:
http://reviews.llvm.org/D19956?vs=56240&id=56325#toc
Repository:
rL LLVM
http://reviews.llvm.org/D19956
Files:
llvm/trunk/include/llvm/ProfileData/InstrProfReader.h
llvm/trunk/lib/ProfileData/InstrProfReader.cpp
Index: llvm/trunk/include/llvm/ProfileData/InstrProfReader.h
===================================================================
--- llvm/trunk/include/llvm/ProfileData/InstrProfReader.h
+++ llvm/trunk/include/llvm/ProfileData/InstrProfReader.h
@@ -170,8 +170,9 @@
const uint64_t *CountersStart;
const char *NamesStart;
uint64_t NamesSize;
+ // After value profile is all read, this pointer points to
+ // the header of next profile data (if exists)
const uint8_t *ValueDataStart;
- const char *ProfileEnd;
uint32_t ValueKindLast;
uint32_t CurValueDataSize;
@@ -224,6 +225,10 @@
Data++;
ValueDataStart += CurValueDataSize;
}
+ const char *getNextHeaderPos() const {
+ assert(atEnd());
+ return (const char *)ValueDataStart;
+ }
const uint64_t *getCounter(IntPtrT CounterPtr) const {
ptrdiff_t Offset = (swap(CounterPtr) - CountersDelta) / sizeof(uint64_t);
Index: llvm/trunk/lib/ProfileData/InstrProfReader.cpp
===================================================================
--- llvm/trunk/lib/ProfileData/InstrProfReader.cpp
+++ llvm/trunk/lib/ProfileData/InstrProfReader.cpp
@@ -324,7 +324,6 @@
auto DataSize = swap(Header.DataSize);
auto CountersSize = swap(Header.CountersSize);
NamesSize = swap(Header.NamesSize);
- auto ValueDataSize = swap(Header.ValueDataSize);
ValueKindLast = swap(Header.ValueKindLast);
auto DataSizeInBytes = DataSize * sizeof(RawInstrProf::ProfileData<IntPtrT>);
@@ -334,19 +333,17 @@
ptrdiff_t CountersOffset = DataOffset + DataSizeInBytes;
ptrdiff_t NamesOffset = CountersOffset + sizeof(uint64_t) * CountersSize;
ptrdiff_t ValueDataOffset = NamesOffset + NamesSize + PaddingSize;
- size_t ProfileSize = ValueDataOffset + ValueDataSize;
auto *Start = reinterpret_cast<const char *>(&Header);
- if (Start + ProfileSize > DataBuffer->getBufferEnd())
+ if (Start + ValueDataOffset > DataBuffer->getBufferEnd())
return error(instrprof_error::bad_header);
Data = reinterpret_cast<const RawInstrProf::ProfileData<IntPtrT> *>(
Start + DataOffset);
DataEnd = Data + DataSize;
CountersStart = reinterpret_cast<const uint64_t *>(Start + CountersOffset);
NamesStart = Start + NamesOffset;
ValueDataStart = reinterpret_cast<const uint8_t *>(Start + ValueDataOffset);
- ProfileEnd = Start + ProfileSize;
std::unique_ptr<InstrProfSymtab> NewSymtab = make_unique<InstrProfSymtab>();
if (auto EC = createSymtab(*NewSymtab.get()))
@@ -411,9 +408,9 @@
return success();
ErrorOr<std::unique_ptr<ValueProfData>> VDataPtrOrErr =
- ValueProfData::getValueProfData(ValueDataStart,
- (const unsigned char *)ProfileEnd,
- getDataEndianness());
+ ValueProfData::getValueProfData(
+ ValueDataStart, (const unsigned char *)DataBuffer->getBufferEnd(),
+ getDataEndianness());
if (VDataPtrOrErr.getError())
return VDataPtrOrErr.getError();
@@ -430,7 +427,8 @@
std::error_code
RawInstrProfReader<IntPtrT>::readNextRecord(InstrProfRecord &Record) {
if (atEnd())
- if (std::error_code EC = readNextHeader(ProfileEnd))
+ // At this point, ValueDataStart field points to the next header.
+ if (std::error_code EC = readNextHeader(getNextHeaderPos()))
return EC;
// Read name ad set it in Record.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D19956.56325.patch
Type: text/x-patch
Size: 3375 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160505/931541eb/attachment.bin>
More information about the llvm-commits
mailing list