LLVM 17.0.0git
ProfileCommon.h
Go to the documentation of this file.
1//===- ProfileCommon.h - Common profiling APIs. -----------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This file contains data structures and functions common to both instrumented
10// and sample profiling.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef LLVM_PROFILEDATA_PROFILECOMMON_H
15#define LLVM_PROFILEDATA_PROFILECOMMON_H
16
17#include "llvm/ADT/ArrayRef.h"
21#include "llvm/Support/Error.h"
22#include <algorithm>
23#include <cstdint>
24#include <functional>
25#include <map>
26#include <memory>
27#include <vector>
28
29namespace llvm {
30
31namespace sampleprof {
32
33class FunctionSamples;
34
35} // end namespace sampleprof
36
37inline const char *getHotSectionPrefix() { return "hot"; }
38inline const char *getUnlikelySectionPrefix() { return "unlikely"; }
39
41private:
42 /// We keep track of the number of times a count (block count or samples)
43 /// appears in the profile. The map is kept sorted in the descending order of
44 /// counts.
45 std::map<uint64_t, uint32_t, std::greater<uint64_t>> CountFrequencies;
46 std::vector<uint32_t> DetailedSummaryCutoffs;
47
48protected:
55
56 ProfileSummaryBuilder(std::vector<uint32_t> Cutoffs)
57 : DetailedSummaryCutoffs(std::move(Cutoffs)) {}
59
60 inline void addCount(uint64_t Count);
62
63public:
64 /// A vector of useful cutoff values for detailed summary.
66
67 /// Find the summary entry for a desired percentile of counts.
68 static const ProfileSummaryEntry &
72};
73
75 uint64_t MaxInternalBlockCount = 0;
76
77 inline void addEntryCount(uint64_t Count);
78 inline void addInternalCount(uint64_t Count);
79
80public:
81 InstrProfSummaryBuilder(std::vector<uint32_t> Cutoffs)
82 : ProfileSummaryBuilder(std::move(Cutoffs)) {}
83
84 void addRecord(const InstrProfRecord &);
85 std::unique_ptr<ProfileSummary> getSummary();
86};
87
89public:
90 SampleProfileSummaryBuilder(std::vector<uint32_t> Cutoffs)
91 : ProfileSummaryBuilder(std::move(Cutoffs)) {}
92
94 bool isCallsiteSample = false);
95 std::unique_ptr<ProfileSummary>
97 std::unique_ptr<ProfileSummary> getSummary();
98};
99
100/// This is called when a count is seen in the profile.
102 TotalCount += Count;
103 if (Count > MaxCount)
104 MaxCount = Count;
105 NumCounts++;
106 CountFrequencies[Count]++;
107}
108
109} // end namespace llvm
110
111#endif // LLVM_PROFILEDATA_PROFILECOMMON_H
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
Definition: ArrayRef.h:41
std::unique_ptr< ProfileSummary > getSummary()
void addRecord(const InstrProfRecord &)
InstrProfSummaryBuilder(std::vector< uint32_t > Cutoffs)
Definition: ProfileCommon.h:81
void addCount(uint64_t Count)
This is called when a count is seen in the profile.
static const ProfileSummaryEntry & getEntryForPercentile(const SummaryEntryVector &DS, uint64_t Percentile)
Find the summary entry for a desired percentile of counts.
static const ArrayRef< uint32_t > DefaultCutoffs
A vector of useful cutoff values for detailed summary.
Definition: ProfileCommon.h:65
ProfileSummaryBuilder(std::vector< uint32_t > Cutoffs)
Definition: ProfileCommon.h:56
SummaryEntryVector DetailedSummary
Definition: ProfileCommon.h:49
static uint64_t getHotCountThreshold(const SummaryEntryVector &DS)
static uint64_t getColdCountThreshold(const SummaryEntryVector &DS)
std::unique_ptr< ProfileSummary > getSummary()
std::unique_ptr< ProfileSummary > computeSummaryForProfiles(const sampleprof::SampleProfileMap &Profiles)
void addRecord(const sampleprof::FunctionSamples &FS, bool isCallsiteSample=false)
SampleProfileSummaryBuilder(std::vector< uint32_t > Cutoffs)
Definition: ProfileCommon.h:90
Representation of the samples collected for a function.
Definition: SampleProf.h:726
std::unordered_map< SampleContext, FunctionSamples, SampleContext::Hash > SampleProfileMap
Definition: SampleProf.h:1222
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18
const char * getHotSectionPrefix()
Definition: ProfileCommon.h:37
const char * getUnlikelySectionPrefix()
Definition: ProfileCommon.h:38
std::vector< ProfileSummaryEntry > SummaryEntryVector
OutputIt move(R &&Range, OutputIt Out)
Provide wrappers to std::move which take ranges instead of having to pass begin/end explicitly.
Definition: STLExtras.h:1946
Definition: BitVector.h:858
Profiling information for a single function.
Definition: InstrProf.h:730