diff options
author | Xinliang David Li <davidxl@google.com> | 2016-05-16 20:33:30 +0000 |
---|---|---|
committer | Xinliang David Li <davidxl@google.com> | 2016-05-16 20:33:30 +0000 |
commit | 9af4859d1b4867901cf0e573e3b6d4a9d6d328dd (patch) | |
tree | 7e05acd52fd7ba6522575c295addfe6ac8ac424c | |
parent | ef33572212a3dd2d2f7d1984c25448fac20b21e1 (diff) |
[profile] minor code restructuring /NFC
This is one of the enabler patch to allow value profiler to
allocate counter statically.
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@269689 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/profile/InstrProfData.inc | 36 | ||||
-rw-r--r-- | lib/profile/InstrProfiling.c | 2 | ||||
-rw-r--r-- | lib/profile/InstrProfiling.h | 6 | ||||
-rw-r--r-- | lib/profile/InstrProfilingValue.c | 11 |
4 files changed, 40 insertions, 15 deletions
diff --git a/lib/profile/InstrProfData.inc b/lib/profile/InstrProfData.inc index 4b748f973..49c3266c2 100644 --- a/lib/profile/InstrProfData.inc +++ b/lib/profile/InstrProfData.inc @@ -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 diff --git a/lib/profile/InstrProfiling.c b/lib/profile/InstrProfiling.c index 1c1d85af9..c763a4423 100644 --- a/lib/profile/InstrProfiling.c +++ b/lib/profile/InstrProfiling.c @@ -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; } } diff --git a/lib/profile/InstrProfiling.h b/lib/profile/InstrProfiling.h index 5b1a91ea2..9c7f03b08 100644 --- a/lib/profile/InstrProfiling.h +++ b/lib/profile/InstrProfiling.h @@ -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. diff --git a/lib/profile/InstrProfilingValue.c b/lib/profile/InstrProfilingValue.c index a54bb1b13..1a4438195 100644 --- a/lib/profile/InstrProfilingValue.c +++ b/lib/profile/InstrProfilingValue.c @@ -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; |