forked from OSchip/llvm-project
[NFC] Change getEntryForPercentile to be a static function in ProfileSummaryBuilder.
Change file static function getEntryForPercentile to be a static member function in ProfileSummaryBuilder so it can be used by other files. Differential Revision: https://reviews.llvm.org/D83439
This commit is contained in:
parent
78fe6a3ee2
commit
e296e9dfd6
|
@ -62,6 +62,10 @@ protected:
|
|||
public:
|
||||
/// A vector of useful cutoff values for detailed summary.
|
||||
static const ArrayRef<uint32_t> DefaultCutoffs;
|
||||
|
||||
/// Find the summary entry for a desired percentile of counts.
|
||||
static const ProfileSummaryEntry &
|
||||
getEntryForPercentile(SummaryEntryVector &DS, uint64_t Percentile);
|
||||
};
|
||||
|
||||
class InstrProfSummaryBuilder final : public ProfileSummaryBuilder {
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
#include "llvm/IR/Module.h"
|
||||
#include "llvm/IR/ProfileSummary.h"
|
||||
#include "llvm/InitializePasses.h"
|
||||
#include "llvm/ProfileData/ProfileCommon.h"
|
||||
#include "llvm/Support/CommandLine.h"
|
||||
using namespace llvm;
|
||||
|
||||
|
@ -86,19 +87,6 @@ static cl::opt<double> PartialSampleProfileWorkingSetSizeScaleFactor(
|
|||
"and the factor to scale the working set size to use the same "
|
||||
"shared thresholds as PGO."));
|
||||
|
||||
// Find the summary entry for a desired percentile of counts.
|
||||
static const ProfileSummaryEntry &getEntryForPercentile(SummaryEntryVector &DS,
|
||||
uint64_t Percentile) {
|
||||
auto It = partition_point(DS, [=](const ProfileSummaryEntry &Entry) {
|
||||
return Entry.Cutoff < Percentile;
|
||||
});
|
||||
// The required percentile has to be <= one of the percentiles in the
|
||||
// detailed summary.
|
||||
if (It == DS.end())
|
||||
report_fatal_error("Desired percentile exceeds the maximum cutoff");
|
||||
return *It;
|
||||
}
|
||||
|
||||
// The profile summary metadata may be attached either by the frontend or by
|
||||
// any backend passes (IR level instrumentation, for example). This method
|
||||
// checks if the Summary is null and if so checks if the summary metadata is now
|
||||
|
@ -284,13 +272,13 @@ bool ProfileSummaryInfo::isFunctionEntryCold(const Function *F) const {
|
|||
/// Compute the hot and cold thresholds.
|
||||
void ProfileSummaryInfo::computeThresholds() {
|
||||
auto &DetailedSummary = Summary->getDetailedSummary();
|
||||
auto &HotEntry =
|
||||
getEntryForPercentile(DetailedSummary, ProfileSummaryCutoffHot);
|
||||
auto &HotEntry = ProfileSummaryBuilder::getEntryForPercentile(
|
||||
DetailedSummary, ProfileSummaryCutoffHot);
|
||||
HotCountThreshold = HotEntry.MinCount;
|
||||
if (ProfileSummaryHotCount.getNumOccurrences() > 0)
|
||||
HotCountThreshold = ProfileSummaryHotCount;
|
||||
auto &ColdEntry =
|
||||
getEntryForPercentile(DetailedSummary, ProfileSummaryCutoffCold);
|
||||
auto &ColdEntry = ProfileSummaryBuilder::getEntryForPercentile(
|
||||
DetailedSummary, ProfileSummaryCutoffCold);
|
||||
ColdCountThreshold = ColdEntry.MinCount;
|
||||
if (ProfileSummaryColdCount.getNumOccurrences() > 0)
|
||||
ColdCountThreshold = ProfileSummaryColdCount;
|
||||
|
@ -324,8 +312,8 @@ ProfileSummaryInfo::computeThreshold(int PercentileCutoff) const {
|
|||
return iter->second;
|
||||
}
|
||||
auto &DetailedSummary = Summary->getDetailedSummary();
|
||||
auto &Entry =
|
||||
getEntryForPercentile(DetailedSummary, PercentileCutoff);
|
||||
auto &Entry = ProfileSummaryBuilder::getEntryForPercentile(DetailedSummary,
|
||||
PercentileCutoff);
|
||||
uint64_t CountThreshold = Entry.MinCount;
|
||||
ThresholdCache[PercentileCutoff] = CountThreshold;
|
||||
return CountThreshold;
|
||||
|
|
|
@ -31,6 +31,19 @@ static const uint32_t DefaultCutoffsData[] = {
|
|||
const ArrayRef<uint32_t> ProfileSummaryBuilder::DefaultCutoffs =
|
||||
DefaultCutoffsData;
|
||||
|
||||
const ProfileSummaryEntry &
|
||||
ProfileSummaryBuilder::getEntryForPercentile(SummaryEntryVector &DS,
|
||||
uint64_t Percentile) {
|
||||
auto It = partition_point(DS, [=](const ProfileSummaryEntry &Entry) {
|
||||
return Entry.Cutoff < Percentile;
|
||||
});
|
||||
// The required percentile has to be <= one of the percentiles in the
|
||||
// detailed summary.
|
||||
if (It == DS.end())
|
||||
report_fatal_error("Desired percentile exceeds the maximum cutoff");
|
||||
return *It;
|
||||
}
|
||||
|
||||
void InstrProfSummaryBuilder::addRecord(const InstrProfRecord &R) {
|
||||
// The first counter is not necessarily an entry count for IR
|
||||
// instrumentation profiles.
|
||||
|
|
Loading…
Reference in New Issue