mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-21 18:22:53 +01:00
[profile] Fix profile merging with binary IDs
This fixes support for merging profiles which broke as a consequence of e50a38840dc3db5813f74b1cd2e10e6d984d0e67. The issue was missing adjustment in merge logic to account for the binary IDs which are now included in the raw profile just after header. In addition, this change also: * Includes the version in module signature that's used for merging to avoid accidental attempts to merge incompatible profiles. * Moves the binary IDs size field after version field in the header as was suggested in the review. Differential Revision: https://reviews.llvm.org/D107143 (cherry picked from commit 83302c84890e5e6cb74c7d6c9f8eaaa56db0077c)
This commit is contained in:
parent
681b643c07
commit
fd411b2b5d
@ -1104,6 +1104,7 @@ namespace RawInstrProf {
|
|||||||
// Version 5: Bit 60 of FuncHash is reserved for the flag for the context
|
// Version 5: Bit 60 of FuncHash is reserved for the flag for the context
|
||||||
// sensitive records.
|
// sensitive records.
|
||||||
// Version 6: Added binary id.
|
// Version 6: Added binary id.
|
||||||
|
// Version 7: Reorder binary id and include version in signature.
|
||||||
const uint64_t Version = INSTR_PROF_RAW_VERSION;
|
const uint64_t Version = INSTR_PROF_RAW_VERSION;
|
||||||
|
|
||||||
template <class IntPtrT> inline uint64_t getMagic();
|
template <class IntPtrT> inline uint64_t getMagic();
|
||||||
|
@ -129,6 +129,7 @@ INSTR_PROF_VALUE_NODE(PtrToNodeT, llvm::Type::getInt8PtrTy(Ctx), Next, \
|
|||||||
#endif
|
#endif
|
||||||
INSTR_PROF_RAW_HEADER(uint64_t, Magic, __llvm_profile_get_magic())
|
INSTR_PROF_RAW_HEADER(uint64_t, Magic, __llvm_profile_get_magic())
|
||||||
INSTR_PROF_RAW_HEADER(uint64_t, Version, __llvm_profile_get_version())
|
INSTR_PROF_RAW_HEADER(uint64_t, Version, __llvm_profile_get_version())
|
||||||
|
INSTR_PROF_RAW_HEADER(uint64_t, BinaryIdsSize, __llvm_write_binary_ids(NULL))
|
||||||
INSTR_PROF_RAW_HEADER(uint64_t, DataSize, DataSize)
|
INSTR_PROF_RAW_HEADER(uint64_t, DataSize, DataSize)
|
||||||
INSTR_PROF_RAW_HEADER(uint64_t, PaddingBytesBeforeCounters, PaddingBytesBeforeCounters)
|
INSTR_PROF_RAW_HEADER(uint64_t, PaddingBytesBeforeCounters, PaddingBytesBeforeCounters)
|
||||||
INSTR_PROF_RAW_HEADER(uint64_t, CountersSize, CountersSize)
|
INSTR_PROF_RAW_HEADER(uint64_t, CountersSize, CountersSize)
|
||||||
@ -137,7 +138,6 @@ INSTR_PROF_RAW_HEADER(uint64_t, NamesSize, NamesSize)
|
|||||||
INSTR_PROF_RAW_HEADER(uint64_t, CountersDelta, (uintptr_t)CountersBegin)
|
INSTR_PROF_RAW_HEADER(uint64_t, CountersDelta, (uintptr_t)CountersBegin)
|
||||||
INSTR_PROF_RAW_HEADER(uint64_t, NamesDelta, (uintptr_t)NamesBegin)
|
INSTR_PROF_RAW_HEADER(uint64_t, NamesDelta, (uintptr_t)NamesBegin)
|
||||||
INSTR_PROF_RAW_HEADER(uint64_t, ValueKindLast, IPVK_Last)
|
INSTR_PROF_RAW_HEADER(uint64_t, ValueKindLast, IPVK_Last)
|
||||||
INSTR_PROF_RAW_HEADER(uint64_t, BinaryIdsSize, __llvm_write_binary_ids(NULL))
|
|
||||||
#undef INSTR_PROF_RAW_HEADER
|
#undef INSTR_PROF_RAW_HEADER
|
||||||
/* INSTR_PROF_RAW_HEADER end */
|
/* INSTR_PROF_RAW_HEADER end */
|
||||||
|
|
||||||
@ -646,7 +646,7 @@ serializeValueProfDataFrom(ValueProfRecordClosure *Closure,
|
|||||||
(uint64_t)'f' << 16 | (uint64_t)'R' << 8 | (uint64_t)129
|
(uint64_t)'f' << 16 | (uint64_t)'R' << 8 | (uint64_t)129
|
||||||
|
|
||||||
/* Raw profile format version (start from 1). */
|
/* Raw profile format version (start from 1). */
|
||||||
#define INSTR_PROF_RAW_VERSION 6
|
#define INSTR_PROF_RAW_VERSION 7
|
||||||
/* Indexed profile format version (start from 1). */
|
/* Indexed profile format version (start from 1). */
|
||||||
#define INSTR_PROF_INDEX_VERSION 7
|
#define INSTR_PROF_INDEX_VERSION 7
|
||||||
/* Coverage mapping format version (start from 0). */
|
/* Coverage mapping format version (start from 0). */
|
||||||
|
@ -366,6 +366,7 @@ Error RawInstrProfReader<IntPtrT>::readHeader(
|
|||||||
if (GET_VERSION(Version) != RawInstrProf::Version)
|
if (GET_VERSION(Version) != RawInstrProf::Version)
|
||||||
return error(instrprof_error::unsupported_version);
|
return error(instrprof_error::unsupported_version);
|
||||||
|
|
||||||
|
BinaryIdsSize = swap(Header.BinaryIdsSize);
|
||||||
CountersDelta = swap(Header.CountersDelta);
|
CountersDelta = swap(Header.CountersDelta);
|
||||||
NamesDelta = swap(Header.NamesDelta);
|
NamesDelta = swap(Header.NamesDelta);
|
||||||
auto DataSize = swap(Header.DataSize);
|
auto DataSize = swap(Header.DataSize);
|
||||||
@ -374,7 +375,6 @@ Error RawInstrProfReader<IntPtrT>::readHeader(
|
|||||||
auto PaddingBytesAfterCounters = swap(Header.PaddingBytesAfterCounters);
|
auto PaddingBytesAfterCounters = swap(Header.PaddingBytesAfterCounters);
|
||||||
NamesSize = swap(Header.NamesSize);
|
NamesSize = swap(Header.NamesSize);
|
||||||
ValueKindLast = swap(Header.ValueKindLast);
|
ValueKindLast = swap(Header.ValueKindLast);
|
||||||
BinaryIdsSize = swap(Header.BinaryIdsSize);
|
|
||||||
|
|
||||||
auto DataSizeInBytes = DataSize * sizeof(RawInstrProf::ProfileData<IntPtrT>);
|
auto DataSizeInBytes = DataSize * sizeof(RawInstrProf::ProfileData<IntPtrT>);
|
||||||
auto PaddingSize = getNumPaddingBytes(NamesSize);
|
auto PaddingSize = getNumPaddingBytes(NamesSize);
|
||||||
|
Binary file not shown.
Binary file not shown.
@ -2,16 +2,17 @@
|
|||||||
//
|
//
|
||||||
// INSTR_PROF_RAW_HEADER(uint64_t, Magic, __llvm_profile_get_magic())
|
// INSTR_PROF_RAW_HEADER(uint64_t, Magic, __llvm_profile_get_magic())
|
||||||
// INSTR_PROF_RAW_HEADER(uint64_t, Version, __llvm_profile_get_version())
|
// INSTR_PROF_RAW_HEADER(uint64_t, Version, __llvm_profile_get_version())
|
||||||
|
// INSTR_PROF_RAW_HEADER(uint64_t, BinaryIdsSize, __llvm_write_binary_ids(NULL))
|
||||||
// INSTR_PROF_RAW_HEADER(uint64_t, DataSize, DataSize)
|
// INSTR_PROF_RAW_HEADER(uint64_t, DataSize, DataSize)
|
||||||
// INSTR_PROF_RAW_HEADER(uint64_t, CountersSize, CountersSize)
|
// INSTR_PROF_RAW_HEADER(uint64_t, CountersSize, CountersSize)
|
||||||
// INSTR_PROF_RAW_HEADER(uint64_t, NamesSize, NamesSize)
|
// INSTR_PROF_RAW_HEADER(uint64_t, NamesSize, NamesSize)
|
||||||
// INSTR_PROF_RAW_HEADER(uint64_t, CountersDelta, (uintptr_t)CountersBegin)
|
// INSTR_PROF_RAW_HEADER(uint64_t, CountersDelta, (uintptr_t)CountersBegin)
|
||||||
// INSTR_PROF_RAW_HEADER(uint64_t, NamesDelta, (uintptr_t)NamesBegin)
|
// INSTR_PROF_RAW_HEADER(uint64_t, NamesDelta, (uintptr_t)NamesBegin)
|
||||||
// INSTR_PROF_RAW_HEADER(uint64_t, ValueKindLast, IPVK_Last)
|
// INSTR_PROF_RAW_HEADER(uint64_t, ValueKindLast, IPVK_Last)
|
||||||
// INSTR_PROF_RAW_HEADER(uint64_t, BinaryIdsSize, __llvm_write_binary_ids(NULL))
|
|
||||||
|
|
||||||
RUN: printf '\201rforpl\377' > %t.profraw
|
RUN: printf '\201rforpl\377' > %t.profraw
|
||||||
RUN: printf '\6\0\0\0\0\0\0\0' >> %t.profraw
|
RUN: printf '\7\0\0\0\0\0\0\0' >> %t.profraw
|
||||||
|
RUN: printf '\0\0\0\0\0\0\0\0' >> %t.profraw
|
||||||
RUN: printf '\1\0\0\0\0\0\0\0' >> %t.profraw
|
RUN: printf '\1\0\0\0\0\0\0\0' >> %t.profraw
|
||||||
RUN: printf '\0\0\0\0\0\0\0\0' >> %t.profraw
|
RUN: printf '\0\0\0\0\0\0\0\0' >> %t.profraw
|
||||||
RUN: printf '\2\0\0\0\0\0\0\0' >> %t.profraw
|
RUN: printf '\2\0\0\0\0\0\0\0' >> %t.profraw
|
||||||
@ -20,7 +21,6 @@ RUN: printf '\10\0\0\0\0\0\0\0' >> %t.profraw
|
|||||||
RUN: printf '\0\0\6\0\1\0\0\0' >> %t.profraw
|
RUN: printf '\0\0\6\0\1\0\0\0' >> %t.profraw
|
||||||
RUN: printf '\0\0\6\0\2\0\0\0' >> %t.profraw
|
RUN: printf '\0\0\6\0\2\0\0\0' >> %t.profraw
|
||||||
RUN: printf '\0\0\0\0\0\0\0\0' >> %t.profraw
|
RUN: printf '\0\0\0\0\0\0\0\0' >> %t.profraw
|
||||||
RUN: printf '\0\0\0\0\0\0\0\0' >> %t.profraw
|
|
||||||
|
|
||||||
// Data Section
|
// Data Section
|
||||||
//
|
//
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
RUN: printf '\377lprofR\201' > %t
|
RUN: printf '\377lprofR\201' > %t
|
||||||
RUN: printf '\0\0\0\0\0\0\0\6' >> %t
|
RUN: printf '\0\0\0\0\0\0\0\7' >> %t
|
||||||
|
RUN: printf '\0\0\0\0\0\0\0\0' >> %t
|
||||||
RUN: printf '\0\0\0\0\0\0\0\2' >> %t
|
RUN: printf '\0\0\0\0\0\0\0\2' >> %t
|
||||||
RUN: printf '\0\0\0\0\0\0\0\0' >> %t
|
RUN: printf '\0\0\0\0\0\0\0\0' >> %t
|
||||||
RUN: printf '\0\0\0\0\0\0\0\3' >> %t
|
RUN: printf '\0\0\0\0\0\0\0\3' >> %t
|
||||||
@ -8,7 +9,6 @@ RUN: printf '\0\0\0\0\0\0\0\20' >> %t
|
|||||||
RUN: printf '\0\0\0\0\1\0\0\0' >> %t
|
RUN: printf '\0\0\0\0\1\0\0\0' >> %t
|
||||||
RUN: printf '\0\0\0\0\2\0\0\0' >> %t
|
RUN: printf '\0\0\0\0\2\0\0\0' >> %t
|
||||||
RUN: printf '\0\0\0\0\0\0\0\0' >> %t
|
RUN: printf '\0\0\0\0\0\0\0\0' >> %t
|
||||||
RUN: printf '\0\0\0\0\0\0\0\0' >> %t
|
|
||||||
|
|
||||||
RUN: printf '\134\370\302\114\333\030\275\254' >> %t
|
RUN: printf '\134\370\302\114\333\030\275\254' >> %t
|
||||||
RUN: printf '\0\0\0\0\0\0\0\1' >> %t
|
RUN: printf '\0\0\0\0\0\0\0\1' >> %t
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
RUN: printf '\201Rforpl\377' > %t
|
RUN: printf '\201Rforpl\377' > %t
|
||||||
RUN: printf '\6\0\0\0\0\0\0\0' >> %t
|
RUN: printf '\7\0\0\0\0\0\0\0' >> %t
|
||||||
|
RUN: printf '\0\0\0\0\0\0\0\0' >> %t
|
||||||
RUN: printf '\2\0\0\0\0\0\0\0' >> %t
|
RUN: printf '\2\0\0\0\0\0\0\0' >> %t
|
||||||
RUN: printf '\0\0\0\0\0\0\0\0' >> %t
|
RUN: printf '\0\0\0\0\0\0\0\0' >> %t
|
||||||
RUN: printf '\3\0\0\0\0\0\0\0' >> %t
|
RUN: printf '\3\0\0\0\0\0\0\0' >> %t
|
||||||
@ -8,7 +9,6 @@ RUN: printf '\20\0\0\0\0\0\0\0' >> %t
|
|||||||
RUN: printf '\0\0\0\1\0\0\0\0' >> %t
|
RUN: printf '\0\0\0\1\0\0\0\0' >> %t
|
||||||
RUN: printf '\0\0\0\2\0\0\0\0' >> %t
|
RUN: printf '\0\0\0\2\0\0\0\0' >> %t
|
||||||
RUN: printf '\0\0\0\0\0\0\0\0' >> %t
|
RUN: printf '\0\0\0\0\0\0\0\0' >> %t
|
||||||
RUN: printf '\0\0\0\0\0\0\0\0' >> %t
|
|
||||||
|
|
||||||
RUN: printf '\254\275\030\333\114\302\370\134' >> %t
|
RUN: printf '\254\275\030\333\114\302\370\134' >> %t
|
||||||
RUN: printf '\1\0\0\0\0\0\0\0' >> %t
|
RUN: printf '\1\0\0\0\0\0\0\0' >> %t
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
RUN: printf '\377lprofr\201' > %t
|
RUN: printf '\377lprofr\201' > %t
|
||||||
RUN: printf '\0\0\0\0\0\0\0\6' >> %t
|
RUN: printf '\0\0\0\0\0\0\0\7' >> %t
|
||||||
|
RUN: printf '\0\0\0\0\0\0\0\0' >> %t
|
||||||
RUN: printf '\0\0\0\0\0\0\0\2' >> %t
|
RUN: printf '\0\0\0\0\0\0\0\2' >> %t
|
||||||
RUN: printf '\0\0\0\0\0\0\0\0' >> %t
|
RUN: printf '\0\0\0\0\0\0\0\0' >> %t
|
||||||
RUN: printf '\0\0\0\0\0\0\0\3' >> %t
|
RUN: printf '\0\0\0\0\0\0\0\3' >> %t
|
||||||
@ -8,7 +9,6 @@ RUN: printf '\0\0\0\0\0\0\0\20' >> %t
|
|||||||
RUN: printf '\0\0\0\1\0\4\0\0' >> %t
|
RUN: printf '\0\0\0\1\0\4\0\0' >> %t
|
||||||
RUN: printf '\0\0\0\2\0\4\0\0' >> %t
|
RUN: printf '\0\0\0\2\0\4\0\0' >> %t
|
||||||
RUN: printf '\0\0\0\0\0\0\0\0' >> %t
|
RUN: printf '\0\0\0\0\0\0\0\0' >> %t
|
||||||
RUN: printf '\0\0\0\0\0\0\0\0' >> %t
|
|
||||||
|
|
||||||
RUN: printf '\134\370\302\114\333\030\275\254' >> %t
|
RUN: printf '\134\370\302\114\333\030\275\254' >> %t
|
||||||
RUN: printf '\0\0\0\0\0\0\0\1' >> %t
|
RUN: printf '\0\0\0\0\0\0\0\1' >> %t
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
RUN: printf '\201rforpl\377' > %t
|
RUN: printf '\201rforpl\377' > %t
|
||||||
RUN: printf '\6\0\0\0\0\0\0\0' >> %t
|
RUN: printf '\7\0\0\0\0\0\0\0' >> %t
|
||||||
|
RUN: printf '\0\0\0\0\0\0\0\0' >> %t
|
||||||
RUN: printf '\2\0\0\0\0\0\0\0' >> %t
|
RUN: printf '\2\0\0\0\0\0\0\0' >> %t
|
||||||
RUN: printf '\0\0\0\0\0\0\0\0' >> %t
|
RUN: printf '\0\0\0\0\0\0\0\0' >> %t
|
||||||
RUN: printf '\3\0\0\0\0\0\0\0' >> %t
|
RUN: printf '\3\0\0\0\0\0\0\0' >> %t
|
||||||
@ -8,7 +9,6 @@ RUN: printf '\20\0\0\0\0\0\0\0' >> %t
|
|||||||
RUN: printf '\0\0\4\0\1\0\0\0' >> %t
|
RUN: printf '\0\0\4\0\1\0\0\0' >> %t
|
||||||
RUN: printf '\0\0\4\0\2\0\0\0' >> %t
|
RUN: printf '\0\0\4\0\2\0\0\0' >> %t
|
||||||
RUN: printf '\0\0\0\0\0\0\0\0' >> %t
|
RUN: printf '\0\0\0\0\0\0\0\0' >> %t
|
||||||
RUN: printf '\0\0\0\0\0\0\0\0' >> %t
|
|
||||||
|
|
||||||
RUN: printf '\254\275\030\333\114\302\370\134' >> %t
|
RUN: printf '\254\275\030\333\114\302\370\134' >> %t
|
||||||
RUN: printf '\1\0\0\0\0\0\0\0' >> %t
|
RUN: printf '\1\0\0\0\0\0\0\0' >> %t
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
RUN: printf '\201rforpl\377' > %t-foo.profraw
|
RUN: printf '\201rforpl\377' > %t-foo.profraw
|
||||||
RUN: printf '\6\0\0\0\0\0\0\0' >> %t-foo.profraw
|
RUN: printf '\7\0\0\0\0\0\0\0' >> %t-foo.profraw
|
||||||
|
RUN: printf '\0\0\0\0\0\0\0\0' >> %t-foo.profraw
|
||||||
RUN: printf '\1\0\0\0\0\0\0\0' >> %t-foo.profraw
|
RUN: printf '\1\0\0\0\0\0\0\0' >> %t-foo.profraw
|
||||||
RUN: printf '\0\0\0\0\0\0\0\0' >> %t-foo.profraw
|
RUN: printf '\0\0\0\0\0\0\0\0' >> %t-foo.profraw
|
||||||
RUN: printf '\1\0\0\0\0\0\0\0' >> %t-foo.profraw
|
RUN: printf '\1\0\0\0\0\0\0\0' >> %t-foo.profraw
|
||||||
@ -8,7 +9,6 @@ RUN: printf '\10\0\0\0\0\0\0\0' >> %t-foo.profraw
|
|||||||
RUN: printf '\0\0\4\0\1\0\0\0' >> %t-foo.profraw
|
RUN: printf '\0\0\4\0\1\0\0\0' >> %t-foo.profraw
|
||||||
RUN: printf '\0\0\4\0\2\0\0\0' >> %t-foo.profraw
|
RUN: printf '\0\0\4\0\2\0\0\0' >> %t-foo.profraw
|
||||||
RUN: printf '\0\0\0\0\0\0\0\0' >> %t-foo.profraw
|
RUN: printf '\0\0\0\0\0\0\0\0' >> %t-foo.profraw
|
||||||
RUN: printf '\0\0\0\0\0\0\0\0' >> %t-foo.profraw
|
|
||||||
|
|
||||||
RUN: printf '\254\275\030\333\114\302\370\134' >> %t-foo.profraw
|
RUN: printf '\254\275\030\333\114\302\370\134' >> %t-foo.profraw
|
||||||
RUN: printf '\1\0\0\0\0\0\0\0' >> %t-foo.profraw
|
RUN: printf '\1\0\0\0\0\0\0\0' >> %t-foo.profraw
|
||||||
@ -21,7 +21,8 @@ RUN: printf '\023\0\0\0\0\0\0\0' >> %t-foo.profraw
|
|||||||
RUN: printf '\3\0foo\0\0\0' >> %t-foo.profraw
|
RUN: printf '\3\0foo\0\0\0' >> %t-foo.profraw
|
||||||
|
|
||||||
RUN: printf '\201rforpl\377' > %t-bar.profraw
|
RUN: printf '\201rforpl\377' > %t-bar.profraw
|
||||||
RUN: printf '\6\0\0\0\0\0\0\0' >> %t-bar.profraw
|
RUN: printf '\7\0\0\0\0\0\0\0' >> %t-bar.profraw
|
||||||
|
RUN: printf '\0\0\0\0\0\0\0\0' >> %t-bar.profraw
|
||||||
RUN: printf '\1\0\0\0\0\0\0\0' >> %t-bar.profraw
|
RUN: printf '\1\0\0\0\0\0\0\0' >> %t-bar.profraw
|
||||||
RUN: printf '\0\0\0\0\0\0\0\0' >> %t-bar.profraw
|
RUN: printf '\0\0\0\0\0\0\0\0' >> %t-bar.profraw
|
||||||
RUN: printf '\2\0\0\0\0\0\0\0' >> %t-bar.profraw
|
RUN: printf '\2\0\0\0\0\0\0\0' >> %t-bar.profraw
|
||||||
@ -30,7 +31,6 @@ RUN: printf '\10\0\0\0\0\0\0\0' >> %t-bar.profraw
|
|||||||
RUN: printf '\0\0\6\0\1\0\0\0' >> %t-bar.profraw
|
RUN: printf '\0\0\6\0\1\0\0\0' >> %t-bar.profraw
|
||||||
RUN: printf '\0\0\6\0\2\0\0\0' >> %t-bar.profraw
|
RUN: printf '\0\0\6\0\2\0\0\0' >> %t-bar.profraw
|
||||||
RUN: printf '\0\0\0\0\0\0\0\0' >> %t-bar.profraw
|
RUN: printf '\0\0\0\0\0\0\0\0' >> %t-bar.profraw
|
||||||
RUN: printf '\0\0\0\0\0\0\0\0' >> %t-bar.profraw
|
|
||||||
|
|
||||||
RUN: printf '\067\265\035\031\112\165\023\344' >> %t-bar.profraw
|
RUN: printf '\067\265\035\031\112\165\023\344' >> %t-bar.profraw
|
||||||
RUN: printf '\02\0\0\0\0\0\0\0' >> %t-bar.profraw
|
RUN: printf '\02\0\0\0\0\0\0\0' >> %t-bar.profraw
|
||||||
|
Loading…
Reference in New Issue
Block a user