diff options
author | Xinliang David Li <davidxl@google.com> | 2015-11-24 19:21:15 +0000 |
---|---|---|
committer | Xinliang David Li <davidxl@google.com> | 2015-11-24 19:21:15 +0000 |
commit | 6a829f78f90b28494ac6ce36cc6a2bca50ce00e4 (patch) | |
tree | df2cbb7818ba140aa2f14508ca6f7f4609d9a641 /llvm | |
parent | c1986638a7375e984a68aa054858deeee8878477 (diff) | |
download | bcm5719-llvm-6a829f78f90b28494ac6ce36cc6a2bca50ce00e4.tar.gz bcm5719-llvm-6a829f78f90b28494ac6ce36cc6a2bca50ce00e4.zip |
[PGO] Introduce value profile data closure type.
The closure is designed to abstact away two types of value profile
data:
- InstrProfRecord which is the primary data structure used to
represent profile data in host tools (reader, writer, and profile-use)
- value profile runtime data structure suitable to be used by C
runtime library.
Both sources of data need to serialize to disk/memory-buffer in common
format: ValueProfData.
The abstraction allows compiler-rt's raw profiler writer to share
the same code with indexed profile writer.
llvm-svn: 254008
Diffstat (limited to 'llvm')
-rw-r--r-- | llvm/include/llvm/ProfileData/InstrProf.h | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/llvm/include/llvm/ProfileData/InstrProf.h b/llvm/include/llvm/ProfileData/InstrProf.h index 5ec7d65773c..20d1574b309 100644 --- a/llvm/include/llvm/ProfileData/InstrProf.h +++ b/llvm/include/llvm/ProfileData/InstrProf.h @@ -538,6 +538,18 @@ typedef struct ValueProfData { ValueProfRecord *getFirstValueProfRecord(); } ValueProfData; +typedef struct ValueProfRecordClosure { + void *Record; + uint32_t (*GetNumValueKinds)(void *Record); + uint32_t (*GetNumValueSites)(void *Record, uint32_t VKind); + uint32_t (*GetNumValueData)(void *Record, uint32_t VKind); + uint32_t (*GetNumValueDataForSite)(void *R, uint32_t VK, uint32_t S); + uint64_t (*RemapValueData)(uint64_t Value); + void (*GetValueForSite)(InstrProfValueData Dst[], void *R, uint32_t K, + uint32_t S); + ValueProfData *(*AllocateValueProfData)(size_t TotalSizeInBytes); +} ValueProfRecordClosure; + inline uint32_t getValueProfRecordHeaderSize(uint32_t NumValueSites) { uint32_t Size = offsetof(ValueProfRecord, SiteCountArray) + sizeof(uint8_t) * NumValueSites; |