Index: llvm/trunk/include/llvm/ProfileData/ProfileCommon.h =================================================================== --- llvm/trunk/include/llvm/ProfileData/ProfileCommon.h +++ llvm/trunk/include/llvm/ProfileData/ProfileCommon.h @@ -71,16 +71,21 @@ protected: SummaryEntryVector DetailedSummary; std::vector DetailedSummaryCutoffs; - uint64_t TotalCount, MaxCount; - uint32_t NumCounts; + uint64_t TotalCount, MaxCount, MaxFunctionCount; + uint32_t NumCounts, NumFunctions; ProfileSummary(Kind K, std::vector Cutoffs) : PSK(K), DetailedSummaryCutoffs(Cutoffs), TotalCount(0), MaxCount(0), - NumCounts(0) {} - ProfileSummary(Kind K) : PSK(K), TotalCount(0), MaxCount(0), NumCounts(0) {} + MaxFunctionCount(0), NumCounts(0), NumFunctions(0) {} + ProfileSummary(Kind K) + : PSK(K), TotalCount(0), MaxCount(0), MaxFunctionCount(0), NumCounts(0), + NumFunctions(0) {} ProfileSummary(Kind K, SummaryEntryVector DetailedSummary, - uint64_t TotalCount, uint64_t MaxCount, uint32_t NumCounts) + uint64_t TotalCount, uint64_t MaxCount, + uint64_t MaxFunctionCount, uint32_t NumCounts, + uint32_t NumFunctions) : PSK(K), DetailedSummary(DetailedSummary), TotalCount(TotalCount), - MaxCount(MaxCount), NumCounts(NumCounts) {} + MaxCount(MaxCount), MaxFunctionCount(MaxFunctionCount), + NumCounts(NumCounts), NumFunctions(NumFunctions) {} ~ProfileSummary() = default; inline void addCount(uint64_t Count); /// \brief Return metadata specific to the profile format. @@ -105,11 +110,12 @@ Metadata *getMD(LLVMContext &Context); /// \brief Construct profile summary from metdata. static ProfileSummary *getFromMD(Metadata *MD); + uint32_t getNumFunctions() { return NumFunctions; } + uint64_t getMaxFunctionCount() { return MaxFunctionCount; } }; class InstrProfSummary final : public ProfileSummary { - uint64_t MaxInternalBlockCount, MaxFunctionCount; - uint32_t NumFunctions; + uint64_t MaxInternalBlockCount; inline void addEntryCount(uint64_t Count); inline void addInternalCount(uint64_t Count); @@ -118,53 +124,44 @@ public: InstrProfSummary(std::vector Cutoffs) - : ProfileSummary(PSK_Instr, Cutoffs), MaxInternalBlockCount(0), - MaxFunctionCount(0), NumFunctions(0) {} + : ProfileSummary(PSK_Instr, Cutoffs), MaxInternalBlockCount(0) {} InstrProfSummary(const IndexedInstrProf::Summary &S); InstrProfSummary(uint64_t TotalCount, uint64_t MaxBlockCount, uint64_t MaxInternalBlockCount, uint64_t MaxFunctionCount, uint32_t NumBlocks, uint32_t NumFunctions, SummaryEntryVector Summary) : ProfileSummary(PSK_Instr, Summary, TotalCount, MaxBlockCount, - NumBlocks), - MaxInternalBlockCount(MaxInternalBlockCount), - MaxFunctionCount(MaxFunctionCount), NumFunctions(NumFunctions) {} + MaxFunctionCount, NumBlocks, NumFunctions), + MaxInternalBlockCount(MaxInternalBlockCount) {} static bool classof(const ProfileSummary *PS) { return PS->getKind() == PSK_Instr; } void addRecord(const InstrProfRecord &); uint32_t getNumBlocks() { return NumCounts; } uint64_t getTotalCount() { return TotalCount; } - uint32_t getNumFunctions() { return NumFunctions; } - uint64_t getMaxFunctionCount() { return MaxFunctionCount; } uint64_t getMaxBlockCount() { return MaxCount; } uint64_t getMaxInternalBlockCount() { return MaxInternalBlockCount; } }; class SampleProfileSummary final : public ProfileSummary { - uint64_t MaxHeadSamples; - uint32_t NumFunctions; - protected: std::vector getFormatSpecificMD(LLVMContext &Context) override; public: uint32_t getNumLinesWithSamples() { return NumCounts; } uint64_t getTotalSamples() { return TotalCount; } - uint32_t getNumFunctions() { return NumFunctions; } - uint64_t getMaxHeadSamples() { return MaxHeadSamples; } + uint64_t getMaxHeadSamples() { return MaxFunctionCount; } uint64_t getMaxSamplesPerLine() { return MaxCount; } void addRecord(const sampleprof::FunctionSamples &FS); SampleProfileSummary(std::vector Cutoffs) - : ProfileSummary(PSK_Sample, Cutoffs), MaxHeadSamples(0), - NumFunctions(0) {} + : ProfileSummary(PSK_Sample, Cutoffs) {} SampleProfileSummary(uint64_t TotalSamples, uint64_t MaxSamplesPerLine, uint64_t MaxHeadSamples, int32_t NumLinesWithSamples, uint32_t NumFunctions, SummaryEntryVector DetailedSummary) : ProfileSummary(PSK_Sample, DetailedSummary, TotalSamples, - MaxSamplesPerLine, NumLinesWithSamples), - MaxHeadSamples(MaxHeadSamples), NumFunctions(NumFunctions) {} + MaxSamplesPerLine, MaxHeadSamples, NumLinesWithSamples, + NumFunctions) {} static bool classof(const ProfileSummary *PS) { return PS->getKind() == PSK_Sample; } Index: llvm/trunk/lib/ProfileData/ProfileSummary.cpp =================================================================== --- llvm/trunk/lib/ProfileData/ProfileSummary.cpp +++ llvm/trunk/lib/ProfileData/ProfileSummary.cpp @@ -42,8 +42,8 @@ // equivalent to a block with a count in the instrumented profile. void SampleProfileSummary::addRecord(const sampleprof::FunctionSamples &FS) { NumFunctions++; - if (FS.getHeadSamples() > MaxHeadSamples) - MaxHeadSamples = FS.getHeadSamples(); + if (FS.getHeadSamples() > MaxFunctionCount) + MaxFunctionCount = FS.getHeadSamples(); for (const auto &I : FS.getBodySamples()) addCount(I.second.getSamples()); } @@ -103,13 +103,13 @@ InstrProfSummary::InstrProfSummary(const IndexedInstrProf::Summary &S) : ProfileSummary(PSK_Instr), MaxInternalBlockCount( - S.get(IndexedInstrProf::Summary::MaxInternalBlockCount)), - MaxFunctionCount(S.get(IndexedInstrProf::Summary::MaxFunctionCount)), - NumFunctions(S.get(IndexedInstrProf::Summary::TotalNumFunctions)) { + S.get(IndexedInstrProf::Summary::MaxInternalBlockCount)) { TotalCount = S.get(IndexedInstrProf::Summary::TotalBlockCount); MaxCount = S.get(IndexedInstrProf::Summary::MaxBlockCount); + MaxFunctionCount = S.get(IndexedInstrProf::Summary::MaxFunctionCount); NumCounts = S.get(IndexedInstrProf::Summary::TotalNumBlocks); + NumFunctions = S.get(IndexedInstrProf::Summary::TotalNumFunctions); for (unsigned I = 0; I < S.NumCutoffEntries; I++) { const IndexedInstrProf::Summary::Entry &Ent = S.getEntry(I); @@ -117,6 +117,7 @@ Ent.NumBlocks); } } + void InstrProfSummary::addEntryCount(uint64_t Count) { addCount(Count); NumFunctions++;