[profile] minor code restructuring /NFC

This is one of the enabler patch to allow value profiler to 
allocate counter statically.

llvm-svn: 269689
This commit is contained in:
Xinliang David Li 2016-05-16 20:33:30 +00:00
parent 28b759c4c8
commit f90425e73b
4 changed files with 40 additions and 15 deletions

View File

@ -88,6 +88,33 @@ INSTR_PROF_DATA(const uint16_t, Int16ArrayTy, NumValueSites[IPVK_Last+1], \
#undef INSTR_PROF_DATA
/* INSTR_PROF_DATA end. */
/* This is an internal data structure used by value profiler. It
* is defined here to allow serialization code sharing by LLVM
* to be used in unit test.
*
* typedef struct ValueProfNode {
* // InstrProfValueData VData;
* uint64_t Value;
* uint64_t Count;
* struct ValueProfNode *Next;
* } ValueProfNode;
*/
/* INSTR_PROF_VALUE_NODE start. */
#ifndef INSTR_PROF_VALUE_NODE
#define INSTR_PROF_VALUE_NODE(Type, LLVMType, Name, Initializer)
#else
#define INSTR_PROF_DATA_DEFINED
#endif
INSTR_PROF_VALUE_NODE(uint64_t, llvm::Type::getInt64Ty(Ctx), Value, \
ConstantInt::get(llvm::Type::GetInt64Ty(Ctx), 0))
INSTR_PROF_VALUE_NODE(uint64_t, llvm::Type::getInt64Ty(Ctx), Count, \
ConstantInt::get(llvm::Type::GetInt64Ty(Ctx), 0))
INSTR_PROF_VALUE_NODE(PtrToNodeT, llvm::Type::getInt8PtrTy(Ctx), Next, \
ConstantInt::get(llvm::Type::GetInt8PtrTy(Ctx), 0))
#undef INSTR_PROF_VALUE_NODE
/* INSTR_PROF_VALUE_NODE end. */
/* INSTR_PROF_RAW_HEADER start */
/* Definition of member fields of the raw profile header data structure. */
#ifndef INSTR_PROF_RAW_HEADER
@ -610,15 +637,6 @@ typedef struct InstrProfValueData {
uint64_t Count;
} InstrProfValueData;
/* This is an internal data structure used by value profiler. It
* is defined here to allow serialization code sharing by LLVM
* to be used in unit test.
*/
typedef struct ValueProfNode {
InstrProfValueData VData;
struct ValueProfNode *Next;
} ValueProfNode;
#endif /* INSTR_PROF_DATA_INC */
#else

View File

@ -61,7 +61,7 @@ COMPILER_RT_VISIBILITY void __llvm_profile_reset_counters(void) {
ValueProfNode *CurrentVNode = ValueCounters[i];
while (CurrentVNode) {
CurrentVNode->VData.Count = 0;
CurrentVNode->Count = 0;
CurrentVNode = CurrentVNode->Next;
}
}

View File

@ -30,6 +30,12 @@ typedef struct __llvm_profile_header {
#include "InstrProfData.inc"
} __llvm_profile_header;
typedef struct ValueProfNode * PtrToNodeT;
typedef struct ValueProfNode {
#define INSTR_PROF_VALUE_NODE(Type, LLVMType, Name, Initializer) Type Name;
#include "InstrProfData.inc"
} ValueProfNode;
/*!
* \brief Get number of bytes necessary to pad the argument to eight
* byte boundary.

View File

@ -85,8 +85,8 @@ __llvm_profile_instrument_target(uint64_t TargetValue, void *Data,
uint8_t VDataCount = 0;
while (CurrentVNode) {
if (TargetValue == CurrentVNode->VData.Value) {
CurrentVNode->VData.Count++;
if (TargetValue == CurrentVNode->Value) {
CurrentVNode->Count++;
return;
}
PrevVNode = CurrentVNode;
@ -101,8 +101,8 @@ __llvm_profile_instrument_target(uint64_t TargetValue, void *Data,
if (!CurrentVNode)
return;
CurrentVNode->VData.Value = TargetValue;
CurrentVNode->VData.Count++;
CurrentVNode->Value = TargetValue;
CurrentVNode->Count++;
uint32_t Success = 0;
if (!ValueCounters[CounterIndex])
@ -200,7 +200,8 @@ static ValueProfNode *getNextNValueData(uint32_t VK, uint32_t Site,
unsigned I;
ValueProfNode *VNode = StartNode ? StartNode : RTRecord.NodesKind[VK][Site];
for (I = 0; I < N; I++) {
Dst[I] = VNode->VData;
Dst[I].Value = VNode->Value;
Dst[I].Count = VNode->Count;
VNode = VNode->Next;
}
return VNode;