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;  | 

